diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000000..6c6a62f9f901 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,70 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/python-3 +{ + "name": "InvenTree devcontainer", + "dockerComposeFile": "docker-compose.yml", + "service": "inventree", + "overrideCommand": true, + "workspaceFolder": "/home/inventree/", + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": { + "python.defaultInterpreterPath": "${containerWorkspaceFolder}/dev/venv/bin/python", + "python.linting.enabled": true, + "python.linting.pylintEnabled": false, + "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", + "python.formatting.blackPath": "/usr/local/py-utils/bin/black", + "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", + "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", + "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", + "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", + "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", + "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "batisteo.vscode-django", + "eamodio.gitlens" + ] + } + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [5173, 8000, 8080], + "portsAttributes": { + "5173": { + "label": "Vite Server" + }, + "8000": { + "label": "InvenTree Server" + }, + "8080": { + "label": "mkdocs server" + } + }, + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": ".devcontainer/postCreateCommand.sh", + + // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode", + "containerUser": "vscode", + + "remoteEnv": { + + // Python config + "PIP_USER": "no", + + // used to load the venv into the PATH and activate it + // Ref: https://stackoverflow.com/a/56286534 + "VIRTUAL_ENV": "${containerWorkspaceFolder}/dev/venv", + "PATH": "${containerWorkspaceFolder}/dev/venv/bin:${containerEnv:PATH}" + } +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 000000000000..9d3bd639e17f --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3" + +services: + db: + image: postgres:13 + restart: unless-stopped + expose: + - 5432/tcp + volumes: + - inventreedatabase:/var/lib/postgresql/data:z + environment: + POSTGRES_DB: inventree + POSTGRES_USER: inventree_user + POSTGRES_PASSWORD: inventree_password + + inventree: + build: + context: .. + dockerfile: ../InvenTree/contrib/container/Dockerfile + target: dev + args: + base_image: "mcr.microsoft.com/vscode/devcontainers/base:alpine-3.18" + data_dir: "dev" + volumes: + - ../:/home/inventree:z + + environment: + INVENTREE_DEBUG: True + INVENTREE_DB_ENGINE: postgresql + INVENTREE_DB_NAME: inventree + INVENTREE_DB_HOST: db + INVENTREE_DB_USER: inventree_user + INVENTREE_DB_PASSWORD: inventree_password + INVENTREE_PLUGINS_ENABLED: True + INVENTREE_SITE_URL: http://localhost:8000 + INVENTREE_CORS_ORIGIN_ALLOW_ALL: True + INVENTREE_PY_ENV: /home/inventree/dev/venv + + depends_on: + - db + +volumes: + inventreedatabase: diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh new file mode 100755 index 000000000000..9cf0b9c3a0fd --- /dev/null +++ b/.devcontainer/postCreateCommand.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Avoiding Dubious Ownership in Dev Containers for setup commands that use git +git config --global --add safe.directory /home/inventree + +# create venv +python3 -m venv /home/inventree/dev/venv --system-site-packages --upgrade-deps +. /home/inventree/dev/venv/bin/activate + +# Run initial InvenTree server setup +invoke update -s + +# Configure dev environment +invoke setup-dev + +# Install required frontend packages +invoke frontend-install + +# remove existing gitconfig created by "Avoiding Dubious Ownership" step +# so that it gets copied from host to the container to have your global +# git config in container +rm -f /home/vscode/.gitconfig diff --git a/.devops/testing_ci.yml b/.devops/testing_ci.yml new file mode 100644 index 000000000000..e9e53e9a24e4 --- /dev/null +++ b/.devops/testing_ci.yml @@ -0,0 +1,71 @@ +# Python Django +# Test a Django project on multiple versions of Python. +# Add steps that analyze code, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/python + +trigger: +- master + +pool: + vmImage: ubuntu-latest +strategy: + matrix: + Python39: + PYTHON_VERSION: '3.9' + maxParallel: 3 + +steps: +- task: UsePythonVersion@0 + inputs: + versionSpec: '$(PYTHON_VERSION)' + architecture: 'x64' + +- task: PythonScript@0 + displayName: 'Export project path' + inputs: + scriptSource: 'inline' + script: | + """Search all subdirectories for `manage.py`.""" + from glob import iglob + from os import path + # Python >= 3.5 + manage_py = next(iglob(path.join('**', 'manage.py'), recursive=True), None) + if not manage_py: + raise SystemExit('Could not find a Django project') + project_location = path.dirname(path.abspath(manage_py)) + print('Found Django project in', project_location) + print('##vso[task.setvariable variable=projectRoot]{}'.format(project_location)) + +- script: | + python -m pip install --upgrade pip setuptools wheel + pip install --require-hashes -r requirements.txt + pip install --require-hashes -r requirements-dev.txt + pip install unittest-xml-reporting coverage invoke + sudo apt-get install poppler-utils + sudo apt-get install libpoppler-dev + displayName: 'Install prerequisites' + +- script: | + pushd '$(projectRoot)' + invoke update + coverage run manage.py test --testrunner xmlrunner.extra.djangotestrunner.XMLTestRunner --no-input + coverage xml -i + displayName: 'Run tests' + env: + INVENTREE_DB_ENGINE: sqlite3 + INVENTREE_DB_NAME: inventree + INVENTREE_MEDIA_ROOT: ./media + INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup + INVENTREE_PLUGINS_ENABLED: true + +- task: PublishTestResults@2 + inputs: + testResultsFiles: "**/TEST-*.xml" + testRunTitle: 'Python $(PYTHON_VERSION)' + condition: succeededOrFailed() + +- task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 811972fb6891..401578a01045 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1,13 @@ -* @matmair +# General owner is the maintainers team +* @SchrodingersGat + +# plugins are co-owned +/src/backend/InvenTree/plugin/ @SchrodingersGat @matmair +/src/backend/InvenTree/plugins/ @SchrodingersGat @matmair + +# Installer functions +.pkgr.yml @matmair +Procfile @matmair +runtime.txt @matmair +/contrib/installer @matmair +/contrib/packager.io @matmair diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000000..10a5e7a1c256 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,5 @@ +github: inventree +ko_fi: inventree +patreon: inventree +polar: inventree +custom: [paypal.me/inventree] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 000000000000..de16c772a666 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,71 @@ +name: "Bug" +description: "Create a bug report to help us improve InvenTree!" +labels: ["bug", "question", "triage:not-checked"] +body: + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "Please verify that this bug has NOT been raised before." + description: "Search in the issues sections by clicking [HERE](https://github.com/inventree/inventree/issues?q=) and read the [Frequently Asked Questions](https://docs.inventree.org/en/latest/faq/)!" + options: + - label: "I checked and didn't find a similar issue" + required: true + - type: textarea + id: description + validations: + required: true + attributes: + label: "Describe the bug*" + description: "A clear and concise description of what the bug is." + - type: textarea + id: steps-to-reproduce + validations: + required: true + attributes: + label: "Steps to Reproduce" + description: "Steps to reproduce the behaviour, please make it detailed" + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See the error + - type: textarea + id: expected-behavior + validations: + required: true + attributes: + label: "Expected behaviour" + description: "A clear and concise description of what you expected to happen." + placeholder: "..." + - type: checkboxes + id: deployment + attributes: + label: "Deployment Method" + options: + - label: "Docker" + - label: "Package" + - label: "Bare metal" + - label: "Other - added info in Steps to Reproduce" + - type: textarea + id: version-info + validations: + required: true + attributes: + label: "Version Information" + description: "The version info block." + placeholder: "You can get this by going to the `About InvenTree` section in the upper right corner and clicking on the `copy version information` button" + - type: checkboxes + id: can-reproduce + attributes: + label: "Please verify if you can reproduce this bug on the demo site." + description: "You can sign in at [InvenTree Demo](https://demo.inventree.org) with admin:inventree. Note that this instance runs on the latest dev version, so your bug may be fixed there." + options: + - label: "I can reproduce this bug on the demo site." + - type: textarea + id: logs + attributes: + label: "Relevant log output" + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 3ba13e0cec6c..000000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/documentation.yaml b/.github/ISSUE_TEMPLATE/documentation.yaml new file mode 100644 index 000000000000..a4d77120dd00 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yaml @@ -0,0 +1,15 @@ +name: "Documentation" +description: "Create an issue to improve the documentation" +labels: ["documentation", "triage:not-checked"] +body: + - type: markdown + attributes: + value: | + Create a new issue regarding the InvenTree documentation + - type: textarea + id: repro + attributes: + label: Body of the issue + description: Please provide one distinct thing to fix or a clearly defined enhancement + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 000000000000..60782d0dc51b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,53 @@ +name: Feature Request +description: Suggest an idea for this project +title: "[FR] title" +labels: ["enhancement", "triage:not-checked"] +body: + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "Please verify that this feature request has NOT been suggested before." + description: "Search in the issues sections by clicking [HERE](https://github.com/inventree/inventree/issues?q=)" + options: + - label: "I checked and didn't find a similar feature request" + required: true + - type: textarea + id: problem + validations: + required: true + attributes: + label: "Problem statement" + description: "A clear and concise description of the problem or missing feature." + placeholder: "I am always struggling with ..." + - type: textarea + id: solution + validations: + required: true + attributes: + label: "Suggested solution" + description: "A clear and concise description of what you want to happen to solve the problem statement." + placeholder: "In my use-case, ..." + - type: textarea + id: alternatives + validations: + required: true + attributes: + label: "Describe alternatives you've considered" + description: "A clear and concise description of any alternative solutions or features you've considered." + placeholder: "This could also be done by doing ..." + - type: textarea + id: examples + validations: + required: false + attributes: + label: "Examples of other systems" + description: "Show how other software handles your FR if you have examples." + placeholder: "I software xxx this is done in the following way..." + - type: checkboxes + id: self-develop + attributes: + label: "Do you want to develop this?" + description: "This is not required, and you do not need to be a pro - this is just as information for us." + options: + - label: "I want to develop this." + required: false diff --git a/.github/ISSUE_TEMPLATE/install.yaml b/.github/ISSUE_TEMPLATE/install.yaml new file mode 100644 index 000000000000..f14281d76db0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/install.yaml @@ -0,0 +1,46 @@ +name: "Install problems" +description: "If you have problems deploying InvenTree" +labels: ["question", "triage:not-checked", "setup"] +body: + - type: checkboxes + id: deployment + validations: + required: true + attributes: + label: "Deployment Method" + options: + - label: "Installer" + - label: "Docker Development" + - label: "Docker Production" + - label: "Bare metal Development" + - label: "Bare metal Production" + - label: "Digital Ocean image" + - label: "Other (please provide a link `Steps to Reproduce`" + - type: textarea + id: description + validations: + required: true + attributes: + label: "Describe the problem*" + description: "A clear and concise description of what is failing." + - type: textarea + id: steps-to-reproduce + validations: + required: true + attributes: + label: "Steps to Reproduce" + description: "Steps to reproduce the behaviour, please make it detailed" + placeholder: | + 0. Link to all docs you used + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See the error + - type: textarea + id: logs + attributes: + label: "Relevant log output" + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: bash + validations: + required: false diff --git a/.github/actions/migration/action.yaml b/.github/actions/migration/action.yaml index 22c5d458644d..a5c4c7a56f35 100644 --- a/.github/actions/migration/action.yaml +++ b/.github/actions/migration/action.yaml @@ -13,5 +13,5 @@ runs: invoke export-records -f data.json python3 ./src/backend/InvenTree/manage.py flush --noinput invoke migrate - invoke import-records -c -f data.json - invoke import-records -c -f data.json + invoke import-records -f data.json + invoke import-records -f data.json diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 0a6848a23f7c..44ba540d332f 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -44,20 +44,14 @@ runs: with: python-version: ${{ env.python_version }} cache: pip - cache-dependency-path: | - src/backend/requirements.txt - src/backend/requirements-dev.txt - contrib/container/requirements.txt - contrib/dev_reqs/requirements.txt - name: Install Base Python Dependencies if: ${{ inputs.python == 'true' }} shell: bash run: | python3 -m pip install -U pip - pip3 install -U invoke wheel - pip3 install 'uv<0.3.0' - - name: Allow uv to use the system Python by default - run: echo "UV_SYSTEM_PYTHON=1" >> $GITHUB_ENV + pip3 install invoke wheel uv + - name: Set the VIRTUAL_ENV variable for uv to work + run: echo "VIRTUAL_ENV=${Python_ROOT_DIR}" >> $GITHUB_ENV shell: bash - name: Install Specific Python Dependencies if: ${{ inputs.pip-dependency }} @@ -88,7 +82,7 @@ runs: # Invoke commands - name: Install dev requirements - if: ${{ inputs.dev-install == 'true' || inputs.install == 'true' }} + if: ${{ inputs.dev-install == 'true' ||inputs.install == 'true' }} shell: bash run: uv pip install --require-hashes -r src/backend/requirements-dev.txt - name: Run invoke install @@ -98,4 +92,4 @@ runs: - name: Run invoke update if: ${{ inputs.update == 'true' }} shell: bash - run: invoke update --uv --skip-backup --skip-static + run: invoke update --uv diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 37c37b524e8c..0a6bdd5b8fde 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,11 +15,26 @@ updates: interval: weekly - package-ecosystem: pip - directories: - - /contrib/container - - /docs - - /contrib/dev_reqs - - /src/backend + directory: /contrib/container + schedule: + interval: weekly + + - package-ecosystem: pip + directory: /docs + schedule: + interval: weekly + + - package-ecosystem: npm + directory: /src/backend + schedule: + interval: weekly + groups: + dependencies: + patterns: + - "*" # Include all dependencies + + - package-ecosystem: pip + directory: /src/backend schedule: interval: weekly groups: @@ -28,9 +43,7 @@ updates: - "*" # Include all dependencies - package-ecosystem: npm - directories: - - /src/frontend - - /src/backend + directory: /src/frontend schedule: interval: weekly groups: diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000000..65b45fc3da42 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,36 @@ +# .github/release.yml + +changelog: + exclude: + labels: + - translation + - documentation + categories: + - title: Breaking Changes + labels: + - Semver-Major + - breaking + - title: Security Patches + labels: + - security + - title: New Features + labels: + - Semver-Minor + - feature + - enhancement + - title: Experimental Features + labels: + - experimental + - title: Bug Fixes + labels: + - Semver-Patch + - bug + - title: Devops / Setup Changes + labels: + - docker + - setup + - demo + - CI + - title: Other Changes + labels: + - "*" diff --git a/.github/requirements.in b/.github/requirements.in new file mode 100644 index 000000000000..5d479962c1b5 --- /dev/null +++ b/.github/requirements.in @@ -0,0 +1,3 @@ +# Packages needed for CI + requests==2.31.0 + pyyaml==6.0.1 diff --git a/.github/requirements.txt b/.github/requirements.txt new file mode 100644 index 000000000000..73856016a7ab --- /dev/null +++ b/.github/requirements.txt @@ -0,0 +1,161 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile .github/requirements.in -o .github/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via requests +idna==3.7 \ + --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ + --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 + # via requests +pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via requests diff --git a/.github/scripts/version_check.py b/.github/scripts/version_check.py index 5d26b1609250..68e2ff1e2516 100644 --- a/.github/scripts/version_check.py +++ b/.github/scripts/version_check.py @@ -10,7 +10,6 @@ """ -import itertools import json import os import re @@ -19,11 +18,8 @@ import requests -REPO = os.getenv('GITHUB_REPOSITORY', 'inventree/inventree') -GITHUB_API_URL = os.getenv('GITHUB_API_URL', 'https://api.github.com') - -def get_existing_release_tags(include_prerelease=True): +def get_existing_release_tags(): """Request information on existing releases via the GitHub API.""" # Check for github token token = os.getenv('GITHUB_TOKEN', None) @@ -32,7 +28,9 @@ def get_existing_release_tags(include_prerelease=True): if token: headers = {'Authorization': f'Bearer {token}'} - response = requests.get(f'{GITHUB_API_URL}/repos/{REPO}/releases', headers=headers) + response = requests.get( + 'https://api.github.com/repos/inventree/inventree/releases', headers=headers + ) if response.status_code != 200: raise ValueError( @@ -52,9 +50,6 @@ def get_existing_release_tags(include_prerelease=True): print(f"Version '{tag}' did not match expected pattern") continue - if not include_prerelease and release['prerelease']: - continue - tags.append([int(x) for x in match.groups()]) return tags @@ -78,7 +73,7 @@ def check_version_number(version_string, allow_duplicate=False): version_tuple = [int(x) for x in match.groups()] # Look through the existing releases - existing = get_existing_release_tags(include_prerelease=False) + existing = get_existing_release_tags() # Assume that this is the highest release, unless told otherwise highest_release = True @@ -95,11 +90,6 @@ def check_version_number(version_string, allow_duplicate=False): if __name__ == '__main__': - # Ensure that we are running in GH Actions - if os.environ.get('GITHUB_ACTIONS', '') != 'true': - print('This script is intended to be run within a GitHub Action!') - sys.exit(1) - if 'only_version' in sys.argv: here = Path(__file__).parent.absolute() version_file = here.joinpath( @@ -107,18 +97,16 @@ def check_version_number(version_string, allow_duplicate=False): ) text = version_file.read_text() results = re.findall(r"""INVENTREE_API_VERSION = (.*)""", text) - # If 2. args is true lower the version number by 1 - if len(sys.argv) > 2 and sys.argv[2] == 'true': - results[0] = str(int(results[0]) - 1) print(results[0]) exit(0) - # GITHUB_REF_TYPE may be either 'branch' or 'tag' GITHUB_REF_TYPE = os.environ['GITHUB_REF_TYPE'] # GITHUB_REF may be either 'refs/heads/' or 'refs/heads/' GITHUB_REF = os.environ['GITHUB_REF'] + GITHUB_REF_NAME = os.environ['GITHUB_REF_NAME'] + GITHUB_BASE_REF = os.environ['GITHUB_BASE_REF'] # Print out version information, makes debugging actions *much* easier! @@ -199,13 +187,10 @@ def check_version_number(version_string, allow_duplicate=False): print(f"Version check passed for '{version}'!") print(f"Docker tags: '{docker_tags}'") - target_repos = [REPO.lower(), f'ghcr.io/{REPO.lower()}'] - # Ref: https://getridbug.com/python/how-to-set-environment-variables-in-github-actions-using-python/ with open(os.getenv('GITHUB_ENV'), 'a') as env_file: # Construct tag string - tag_list = [[f'{r}:{t}' for t in docker_tags] for r in target_repos] - tags = ','.join(itertools.chain(*tag_list)) + tags = ','.join([f'inventree/inventree:{tag}' for tag in docker_tags]) env_file.write(f'docker_tags={tags}\n') diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml new file mode 100644 index 000000000000..bb09d65f3bb3 --- /dev/null +++ b/.github/workflows/backport.yaml @@ -0,0 +1,39 @@ +# Backport tagged issues to a stable branch. +# +# To enable backporting for a pullrequest, add the label "backport" to the PR. +# Additionally, add a label with the prefix "backport-to-" and the target branch + +name: Backport + +on: + pull_request_target: + types: ["labeled", "closed"] + +jobs: + backport: + name: Backport PR + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + if: | + github.event.pull_request.merged == true + && contains(github.event.pull_request.labels.*.name, 'backport') + && ( + (github.event.action == 'labeled' && github.event.label.name == 'backport') + || (github.event.action == 'closed') + ) + steps: + - name: Backport Action + uses: sqren/backport-github-action@f54e19901f2a57f8b82360f2490d47ee82ec82c6 # pin@v9.2.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + auto_backport_label_prefix: backport-to- + + - name: Info log + if: ${{ success() }} + run: cat ~/.backport/backport.info.log + + - name: Debug log + if: ${{ failure() }} + run: cat ~/.backport/backport.debug.log diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml new file mode 100644 index 000000000000..9565f1a6d850 --- /dev/null +++ b/.github/workflows/check_translations.yaml @@ -0,0 +1,42 @@ +name: Check Translations + +on: + push: + branches: + - l10 + pull_request: + branches: + - l10 + +env: + python_version: 3.9 + +permissions: + contents: read + +jobs: + check: + runs-on: ubuntu-latest + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + INVENTREE_DB_NAME: "./test_db.sqlite" + INVENTREE_DB_ENGINE: django.db.backends.sqlite3 + INVENTREE_DEBUG: info + INVENTREE_MEDIA_ROOT: ./media + INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup + INVENTREE_SITE_URL: http://localhost:8000 + + steps: + - name: Checkout Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Environment Setup + uses: ./.github/actions/setup + with: + install: true + apt-dependency: gettext + - name: Test Translations + run: invoke translate + - name: Check Migration Files + run: python3 .github/scripts/check_migration_files.py diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index caf7bcc06505..7c5b9d938407 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -19,18 +19,14 @@ on: push: branches: - - "main" + - "master" pull_request: branches: - - "main" + - "master" permissions: contents: read -env: - platforms: linux/amd64 - image: ghcr.io/invenhost/inventree - jobs: paths-filter: permissions: @@ -43,16 +39,19 @@ jobs: docker: ${{ steps.filter.outputs.docker }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: filters: | docker: - .github/workflows/docker.yaml - - contrib/container/** - - src/backend/InvenTree/InvenTree/settings.py - - src/backend/requirements.txt + - docker/** + - docker-compose.yml + - docker.dev.env + - Dockerfile + - InvenTree/settings.py + - requirements.txt - tasks.py # Build the docker image @@ -60,10 +59,9 @@ jobs: needs: paths-filter if: needs.paths-filter.outputs.docker == 'true' || github.event_name == 'release' || github.event_name == 'push' permissions: - id-token: write - packages: write - attestations: write contents: read + packages: write + id-token: write env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} python_version: "3.11" @@ -71,18 +69,17 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Set Up Python ${{ env.python_version }} - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # pin@v5.1.1 + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 with: python-version: ${{ env.python_version }} - name: Version Check - id: version run: | - pip install --require-hashes -r contrib/dev_reqs/requirements.txt + pip install --require-hashes -r .github/requirements.txt python3 .github/scripts/version_check.py - echo "git_commit_hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_OUTPUT + echo "git_commit_hash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_ENV - name: Test Docker Image id: test-docker run: | @@ -91,17 +88,12 @@ jobs: docker run --rm inventree-test invoke --list docker run --rm inventree-test gunicorn --version docker run --rm inventree-test pg_dump --version - docker run --rm inventree-test test -f /home/inventree/init.sh - docker run --rm inventree-test test -f /home/inventree/tasks.py - docker run --rm inventree-test test -f /home/inventree/gunicorn.conf.py - docker run --rm inventree-test test -f /home/inventree/src/backend/requirements.txt docker run --rm inventree-test test -f /home/inventree/src/backend/InvenTree/manage.py - name: Build Docker Image # Build the development docker image (using docker-compose.yml) run: docker compose --project-directory . -f contrib/container/dev-docker-compose.yml build --no-cache - name: Update Docker Image run: | - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke install docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke update docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke setup-dev docker compose --project-directory . -f contrib/container/dev-docker-compose.yml up -d @@ -121,40 +113,39 @@ jobs: - name: Run Unit Tests run: | echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> contrib/container/docker.dev.env - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke test --disable-pty - - name: Run Migration Tests - run: | - docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke test --migrations + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke test --disable-pty + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke test --migrations --disable-pty + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml down - name: Clean up test folder run: | rm -rf InvenTree/_testfolder - name: Set up QEMU if: github.event_name != 'pull_request' - uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # pin@v3.2.0 + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # pin@v3.0.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # pin@v3.6.1 + uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # pin@v3.2.0 - name: Set up cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@4959ce089c160fddf62f7b42464195ba1a56d382 # pin@v3.6.0 + uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # pin@v3.5.0 - name: Check if Dockerhub login is required id: docker_login run: | if [ -z "${{ secrets.DOCKER_USERNAME }}" ]; then - echo "skip_dockerhub_login=true" >> $GITHUB_OUTPUT + echo "skip_dockerhub_login=true" >> $GITHUB_ENV else - echo "skip_dockerhub_login=false" >> $GITHUB_OUTPUT + echo "skip_dockerhub_login=false" >> $GITHUB_ENV fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3.3.0 + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # pin@v3.1.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@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3.3.0 + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # pin@v3.1.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -166,42 +157,22 @@ jobs: uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # pin@v5.5.1 with: images: | - ${{ env.image }} - - - name: Set SOURCE_DATE_EPOCH - run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_OUTPUT - shell: bash - id: epoch + inventree/inventree + ghcr.io/${{ github.repository }} - name: Push Docker Images id: push-docker - uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # pin@v6.7.0 + if: github.event_name != 'pull_request' + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # pin@v5.3.0 with: context: . file: ./contrib/container/Dockerfile - platforms: ${{ env.platforms }} - push: ${{ github.event_name != 'pull_request' }} + platforms: linux/amd64,linux/arm64 + push: true sbom: true - provenance: mode=max + provenance: false target: production - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.docker_tags }} build-args: | - commit_hash=${{ steps.epoch.outputs.git_commit_hash }} - commit_date=${{ steps.epoch.outputs.git_commit_date }} - SOURCE_DATE_EPOCH=${{ steps.epoch.outputs.SOURCE_DATE_EPOCH }} - cache-from: type=gha - cache-to: type=gha,mode=max - - name: Sign the published Docker image - if: ${{ github.event_name != 'pull_request' }} - env: - TAGS: ${{ steps.meta.outputs.tags }} - DIGEST: ${{ steps.push-docker.outputs.digest }} - run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST} - - name: Attest image - if: ${{ github.event_name != 'pull_request' }} - uses: github-early-access/generate-build-provenance@main - with: - subject-name: ${{ env.image }} - subject-digest: ${{ steps.push-docker.outputs.digest }} - push-to-registry: true + commit_hash=${{ env.git_commit_hash }} + commit_date=${{ env.git_commit_date }} diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index d9be7239da89..1b778950bbf3 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -10,9 +10,11 @@ on: env: python_version: 3.9 - node_version: 20 + node_version: 18 # The OS version must be set per job server_start_sleep: 60 + requests_version: 2.31.0 + pyyaml_version: 6.0.1 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} INVENTREE_DB_ENGINE: sqlite3 @@ -38,7 +40,7 @@ jobs: force: ${{ steps.force.outputs.force }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: @@ -70,7 +72,7 @@ jobs: needs: ["pre-commit"] steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -92,9 +94,9 @@ jobs: if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.force == 'true' steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # pin@v5.1.1 + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 with: python-version: ${{ env.python_version }} cache: "pip" @@ -102,9 +104,35 @@ jobs: uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # pin@v3.0.1 - name: Check Version run: | - pip install --require-hashes -r contrib/dev_reqs/requirements.txt + pip install --require-hashes -r .github/requirements.txt python3 .github/scripts/version_check.py + mkdocs: + name: Style [Documentation] + runs-on: ubuntu-20.04 + + needs: paths-filter + + steps: + - name: Checkout Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Set up Python ${{ env.python_version }} + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 + with: + python-version: ${{ env.python_version }} + - name: Check Config + run: | + pip install --require-hashes -r .github/requirements.txt + pip install -r docs/requirements.txt + python docs/ci/check_mkdocs_config.py + - name: Check Links + uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368 # v1 + with: + folder-path: docs + config-file: docs/mlc_config.json + check-modified-files-only: "yes" + use-quiet-mode: "yes" + schema: name: Tests - API Schema Documentation runs-on: ubuntu-20.04 @@ -123,7 +151,7 @@ jobs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -133,32 +161,20 @@ jobs: - name: Export API Documentation run: invoke schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # pin@v4.3.6 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4.3.1 with: name: schema.yml path: src/backend/InvenTree/schema.yml - name: Download public schema + if: needs.paths-filter.outputs.api == 'false' run: | - pip install --require-hashes -r contrib/dev_reqs/requirements.txt >/dev/null 2>&1 - version="$(python3 .github/scripts/version_check.py only_version ${{ needs.paths-filter.outputs.api }} 2>&1)" + pip install --require-hashes -r .github/requirements.txt >/dev/null 2>&1 + version="$(python3 .github/scripts/version_check.py only_version 2>&1)" echo "Version: $version" url="https://raw.githubusercontent.com/inventree/schema/main/export/${version}/api.yaml" echo "URL: $url" - code=$(curl -s -o api.yaml $url --write-out '%{http_code}' --silent) - if [ "$code" != "200" ]; then - exit 1 - fi + curl -s -o api.yaml $url echo "Downloaded api.yaml" - - name: Running OpenAPI Spec diff action - id: breaking_changes - uses: oasdiff/oasdiff-action/diff@a2ff6682b27d175162a74c09ace8771bd3d512f8 # pin@main - with: - base: 'api.yaml' - revision: 'src/backend/InvenTree/schema.yml' - format: 'html' - - name: Echoing diff to step - run: echo "${{ steps.breaking_changes.outputs.diff }}" >> $GITHUB_STEP_SUMMARY - - name: Check for differences in API Schema if: needs.paths-filter.outputs.api == 'false' run: | @@ -169,13 +185,39 @@ jobs: continue-on-error: true - name: Extract version for publishing id: version - if: github.ref == 'refs/heads/main' && needs.paths-filter.outputs.api == 'true' + if: github.ref == 'refs/heads/master' && needs.paths-filter.outputs.api == 'true' run: | - pip install --require-hashes -r contrib/dev_reqs/requirements.txt >/dev/null 2>&1 + pip install --require-hashes -r .github/requirements.txt >/dev/null 2>&1 version="$(python3 .github/scripts/version_check.py only_version 2>&1)" echo "Version: $version" echo "version=$version" >> "$GITHUB_OUTPUT" + schema-push: + name: Push new schema + runs-on: ubuntu-20.04 + needs: [paths-filter, schema] + if: needs.schema.result == 'success' && github.ref == 'refs/heads/master' && needs.paths-filter.outputs.api == 'true' && github.repository_owner == 'inventree' + env: + version: ${{ needs.schema.outputs.version }} + + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + repository: inventree/schema + token: ${{ secrets.SCHEMA_PAT }} + - name: Download schema artifact + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + with: + name: schema.yml + - name: Move schema to correct location + run: | + echo "Version: $version" + mkdir export/${version} + mv schema.yml export/${version}/api.yaml + - uses: stefanzweifel/git-auto-commit-action@8621497c8c39c72f3e2a999a26b4ca1b5058a842 # v5.0.1 + with: + commit_message: "Update API schema for ${version}" + python: name: Tests - inventree-python runs-on: ubuntu-20.04 @@ -196,7 +238,7 @@ jobs: INVENTREE_SITE_URL: http://127.0.0.1:12345 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -219,26 +261,21 @@ jobs: coverage run -m unittest discover -s test/ coverage: - name: Tests - DB [SQLite] + Coverage ${{ matrix.python_version }} + name: Tests - DB [SQLite] + Coverage runs-on: ubuntu-20.04 needs: ["pre-commit", "paths-filter"] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' continue-on-error: true # continue if a step fails so that coverage gets pushed - strategy: - matrix: - python_version: [3.9] - # python_version: [3.9, 3.12] # Disabled due to requirement issues env: INVENTREE_DB_NAME: ./inventree.sqlite INVENTREE_DB_ENGINE: sqlite3 INVENTREE_PLUGINS_ENABLED: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - python_version: ${{ matrix.python_version }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -254,7 +291,7 @@ jobs: - name: Coverage Tests run: invoke test --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 + uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -292,7 +329,7 @@ jobs: - 6379:6379 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -336,7 +373,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -353,7 +390,7 @@ jobs: name: Tests - Migrations [PostgreSQL] runs-on: ubuntu-latest needs: paths-filter - if: ${{ (needs.paths-filter.outputs.force == 'true') || (github.ref == 'refs/heads/main' && needs.paths-filter.outputs.migrations == 'true') }} + if: ${{ (needs.paths-filter.outputs.force == 'true') || (github.ref == 'refs/heads/master' && needs.paths-filter.outputs.migrations == 'true') }} env: INVENTREE_DB_ENGINE: django.db.backends.postgresql @@ -375,7 +412,7 @@ jobs: - 5432:5432 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -386,7 +423,7 @@ jobs: - name: Run Tests run: invoke test --migrations --report --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 + uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -397,7 +434,7 @@ jobs: name: Tests - Full Migration [SQLite] runs-on: ubuntu-latest needs: paths-filter - if: ${{ (needs.paths-filter.outputs.force == 'true') || (github.ref == 'refs/heads/main' && needs.paths-filter.outputs.migrations == 'true') }} + if: ${{ (needs.paths-filter.outputs.force == 'true') || (github.ref == 'refs/heads/master' && needs.paths-filter.outputs.migrations == 'true') }} env: INVENTREE_DB_ENGINE: sqlite3 @@ -406,7 +443,7 @@ jobs: INVENTREE_PLUGINS_ENABLED: false steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 name: Checkout Code - name: Environment Setup uses: ./.github/actions/setup @@ -463,7 +500,7 @@ jobs: VITE_COVERAGE: true steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -481,7 +518,7 @@ jobs: - name: Run Playwright tests id: tests run: cd src/frontend && npx nyc playwright test - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # pin@v4 + - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -491,7 +528,7 @@ jobs: if: always() run: cd src/frontend && npx nyc report --report-dir ./coverage --temp-dir .nyc_output --reporter=lcov --exclude-after-remap false - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 + uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -504,7 +541,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4.1.7 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 - name: Environment Setup uses: ./.github/actions/setup with: @@ -513,13 +550,11 @@ jobs: run: cd src/frontend && yarn install - name: Build frontend run: cd src/frontend && yarn run compile && yarn run build - - name: Write version file - SHA - run: cd src/backend/InvenTree/web/static/web/.vite && echo "$GITHUB_SHA" > sha.txt - name: Zip frontend run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # pin@v4.3.6 + - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4.3.1 with: name: frontend-build path: src/backend/InvenTree/web/static/web diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 000000000000..1a74ca3d6847 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,53 @@ +# Runs on releases + +name: Publish release notes +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + stable: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Version Check + run: | + pip install --require-hashes -r .github/requirements.txt + python3 .github/scripts/version_check.py + - name: Push to Stable Branch + uses: ad-m/github-push-action@d91a481090679876dfc4178fef17f286781251df # pin@v0.8.0 + if: env.stable_release == 'true' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: stable + force: true + + publish-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Environment Setup + uses: ./.github/actions/setup + with: + npm: true + - name: Install dependencies + run: cd src/frontend && yarn install + - name: Build frontend + run: cd src/frontend && npm run compile && npm run build + - name: Zip frontend + run: | + cd src/backend/InvenTree/web/static/web + zip -r ../frontend-build.zip * + - uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # pin@2.9.0 + 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 diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 8054df890c76..6db68c5d05b8 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -12,7 +12,7 @@ on: schedule: - cron: "32 0 * * 0" push: - branches: ["main"] + branches: ["master"] # Declare default permissions as read only. permissions: read-all @@ -32,12 +32,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: results_file: results.sarif results_format: sarif @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 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@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 + uses: github/codeql-action/upload-sarif@df5a14dc28094dc936e103b37d749c6628682b60 # v3.25.0 with: sarif_file: results.sarif diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 000000000000..e5c7962bf6b9 --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,27 @@ +# Marks all issues that do not receive activity stale starting 2022 +name: Mark stale issues and pull requests + +on: + schedule: + - cron: "24 11 * * *" + +permissions: + contents: read + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # pin@v9.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: "This issue seems stale. Please react to show this is still important." + stale-pr-message: "This PR seems stale. Please react to show this is still important." + stale-issue-label: "inactive" + stale-pr-label: "inactive" + start-date: "2022-01-01" + exempt-all-milestones: true diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml new file mode 100644 index 000000000000..c0438b60ea93 --- /dev/null +++ b/.github/workflows/translations.yaml @@ -0,0 +1,54 @@ +name: Update Translation Files + +on: + push: + branches: + - master + +env: + python_version: 3.9 + node_version: 18 + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + INVENTREE_DB_NAME: "./test_db.sqlite" + INVENTREE_DB_ENGINE: django.db.backends.sqlite3 + INVENTREE_DEBUG: info + INVENTREE_MEDIA_ROOT: ./media + INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup + INVENTREE_SITE_URL: http://localhost:8000 + + steps: + - name: Checkout Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Environment Setup + uses: ./.github/actions/setup + with: + install: true + npm: true + apt-dependency: gettext + - name: Make Translations + run: invoke translate + - name: Commit files + run: | + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git checkout -b l10_local + git add "*.po" + git commit -m "updated translation base" + - name: Push changes + uses: ad-m/github-push-action@d91a481090679876dfc4178fef17f286781251df # pin@v0.8.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: l10 + force: true diff --git a/.github/workflows/update.yml.disabled b/.github/workflows/update.yml.disabled new file mode 100644 index 000000000000..a9edddc6a374 --- /dev/null +++ b/.github/workflows/update.yml.disabled @@ -0,0 +1,22 @@ +name: Update dependency files regularly + +on: + workflow_dispatch: null + schedule: + - cron: "0 0 * * *" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - name: Setup + run: pip install --require-hashes -r requirements-dev.txt + - name: Update requirements.txt + run: pip-compile --output-file=requirements.txt requirements.in -U + - name: Update requirements-dev.txt + run: pip-compile --generate-hashes --output-file=requirements-dev.txt requirements-dev.in -U + - uses: stefanzweifel/git-auto-commit-action@fd157da78fa13d9383e5580d1fd1184d89554b51 # pin@v4.15.1 + with: + commit_message: "[Bot] Updated dependency" + branch: dep-update diff --git a/.gitignore b/.gitignore index 8541ce79a301..8c119f2ab22c 100644 --- a/.gitignore +++ b/.gitignore @@ -108,7 +108,5 @@ src/backend/InvenTree/web/static InvenTree/web/static # Generated docs files -docs/schema.yml docs/docs/api/*.yml docs/docs/api/schema/*.yml -inventree_settings.json diff --git a/.pkgr.yml b/.pkgr.yml new file mode 100644 index 000000000000..88f27034a505 --- /dev/null +++ b/.pkgr.yml @@ -0,0 +1,38 @@ +name: inventree +description: Open Source Inventory Management System +homepage: https://inventree.org +notifications: true +buildpack: https://github.com/mjmair/heroku-buildpack-python#v216-mjmair +env: + - STACK=heroku-20 + - DISABLE_COLLECTSTATIC=1 + - INVENTREE_DB_ENGINE=sqlite3 + - INVENTREE_DB_NAME=database.sqlite3 + - INVENTREE_PLUGINS_ENABLED + - 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 +after_install: contrib/packager.io/postinstall.sh +before: + - contrib/packager.io/before.sh +dependencies: + - curl + - "python3.9 | python3.10 | python3.11" + - "python3.9-venv | python3.10-venv | python3.11-venv" + - "python3.9-dev | python3.10-dev | python3.11-dev" + - python3-pip + - python3-cffi + - python3-brotli + - python3-wheel + - libpango-1.0-0 + - libharfbuzz0b + - libpangoft2-1.0-0 + - gettext + - nginx + - jq + - libffi7 +targets: + ubuntu-20.04: true + debian-11: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c4d13efeef02..0f8057da83b7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: check-yaml - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.1 + rev: v0.4.1 hooks: - id: ruff-format args: [--preview] @@ -27,46 +27,34 @@ repos: --preview ] - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.2.13 + rev: 0.1.35 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, --python-version=3.9, --no-strip-extras, --generate-hashes] files: src/backend/requirements-dev\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [src/backend/requirements.in, -o, src/backend/requirements.txt, --no-strip-extras, --generate-hashes] + args: [src/backend/requirements.in, -o, src/backend/requirements.txt,--python-version=3.9, --no-strip-extras,--generate-hashes] files: src/backend/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt, --no-strip-extras, --generate-hashes] - files: contrib/dev_reqs/requirements\.(in|txt)$ - - id: pip-compile - name: pip-compile requirements.txt - args: [docs/requirements.in, -o, docs/requirements.txt, --no-strip-extras, --generate-hashes] - files: docs/requirements\.(in|txt)$ - - id: pip-compile - name: pip-compile requirements.txt - args: [contrib/container/requirements.in, -o, contrib/container/requirements.txt, --python-version=3.11, --no-strip-extras, --generate-hashes] - files: contrib/container/requirements\.(in|txt)$ + args: [.github/requirements.in, -o, .github/requirements.txt,--python-version=3.9, --no-strip-extras, --generate-hashes] + files: .github/requirements\.(in|txt)$ - repo: https://github.com/Riverside-Healthcare/djLint rev: v1.34.1 hooks: - id: djlint-django - repo: https://github.com/codespell-project/codespell - rev: v2.3.0 + rev: v2.2.6 hooks: - id: codespell - additional_dependencies: - - tomli exclude: > (?x)^( docs/docs/stylesheets/.*| docs/docs/javascripts/.*| docs/docs/webfonts/.* | src/frontend/src/locales/.* | - pyproject.toml | - src/frontend/vite.config.ts | )$ - repo: https://github.com/pre-commit/mirrors-prettier rev: "v4.0.0-alpha.8" @@ -77,7 +65,7 @@ repos: - "prettier@^2.4.1" - "@trivago/prettier-plugin-sort-imports" - repo: https://github.com/pre-commit/mirrors-eslint - rev: "v9.6.0" + rev: "v9.1.0" hooks: - id: eslint additional_dependencies: @@ -89,14 +77,10 @@ repos: - "@typescript-eslint/parser" files: ^src/frontend/.*\.(js|jsx|ts|tsx)$ - repo: https://github.com/gitleaks/gitleaks - rev: v8.18.4 + rev: v8.18.2 hooks: - id: gitleaks #- repo: https://github.com/jumanjihouse/pre-commit-hooks # rev: 3.0.0 # hooks: # - id: shellcheck -- repo: https://github.com/isidentical/teyit - rev: 0.4.3 - hooks: - - id: teyit diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000000..effc92367ae6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "InvenTree Server", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", + "args": ["runserver"], + "django": true, + "justMyCode": true + }, + { + "name": "InvenTree Server - 3rd party", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", + "args": ["runserver"], + "django": true, + "justMyCode": false + }, + { + "name": "InvenTree Frontend - Vite", + "type": "chrome", + "request": "launch", + "url": "http://localhost:5173", + "webRoot": "${workspaceFolder}/src/frontend" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000000..ffa8d8d36bde --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,70 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + + // the problemMatchers should prevent vscode from asking how it should check the output + + "version": "2.0.0", + "tasks": [ + { + "label": "worker", + "type": "shell", + "command": "inv worker", + "problemMatcher": [], + }, + { + "label": "clean-settings", + "type": "shell", + "command": "inv clean-settings", + "problemMatcher": [], + }, + { + "label": "delete-data", + "type": "shell", + "command": "inv delete-data", + "problemMatcher": [], + }, + { + "label": "migrate", + "type": "shell", + "command": "inv migrate", + "problemMatcher": [], + }, + { + "label": "server", + "type": "shell", + "command": "inv server", + "problemMatcher": [], + }, + { + "label": "setup-dev", + "type": "shell", + "command": "inv setup-dev", + "problemMatcher": [], + }, + { + "label": "setup-test", + "type": "shell", + "command": "inv setup-test -i --path dev/inventree-demo-dataset", + "problemMatcher": [], + }, + { + "label": "superuser", + "type": "shell", + "command": "inv superuser", + "problemMatcher": [], + }, + { + "label": "test", + "type": "shell", + "command": "inv test", + "problemMatcher": [], + }, + { + "label": "update", + "type": "shell", + "command": "inv update", + "problemMatcher": [], + }, + ] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000000..50022d571e71 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,50 @@ +### Contributing to InvenTree + +Hi there, thank you for your interest in contributing! +Please read our contribution guidelines, before submitting your first pull request to the InvenTree codebase. + +### Project File Structure + +The InvenTree project is split into two main components: frontend and backend. This source is located in the `src` directory. All other files are used for project management, documentation, and testing. + +```bash +InvenTree/ +├─ .devops/ # Files for Azure DevOps +├─ .github/ # Files for GitHub +│ ├─ actions/ # Reused actions +│ ├─ ISSUE_TEMPLATE/ # Templates for issues and pull requests +│ ├─ workflows/ # CI/CD flows +│ ├─ scripts/ # CI scripts +├─ .vscode/ # Settings for Visual Code IDE +├─ assets/ # General project assets +├─ contrib/ # Files needed for deployments +│ ├─ container/ # Files related to building container images +│ ├─ installer/ # Files needed to build single-file installer +│ ├─ packager.io/ # Files needed for Debian/Ubuntu packages +├─ docs/ # Directory for documentation / General helper files +│ ├─ ci/ # CI for documentation +│ ├─ docs/ # Source for documentation +├─ src/ # Source for application +│ ├─ backend/ # Directory for backend parts +│ │ ├─ InvenTree/ # Source for backend +│ │ ├─ requirements.txt # Dependencies for backend +│ │ ├─ package.json # Dependencies for backend HTML linting +│ ├─ frontend/ # Directory for frontend parts +│ │ ├─ src/ # Source for frontend +│ │ │ ├─ main.tsx # Entry point for frontend +│ │ ├─ tests/ # Tests for frontend +│ │ ├─ netlify.toml # Settings for frontend previews (Netlify) +│ │ ├─ package.json # Dependencies for frontend +│ │ ├─ playwright.config.ts # Settings for frontend tests +│ │ ├─ tsconfig.json # Settings for frontend compilation +├─ .pkgr.yml # Build definition for Debian/Ubuntu packages +├─ .pre-commit-config.yaml # Code formatter/linter configuration +├─ CONTRIBUTING.md # Contirbution guidelines and overview +├─ 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 +``` + +Refer to our [contribution guidelines](https://docs.inventree.org/en/latest/develop/contributing/) for more information! diff --git a/Procfile b/Procfile new file mode 100644 index 000000000000..9b81d80a4dca --- /dev/null +++ b/Procfile @@ -0,0 +1,8 @@ +# Web process: gunicorn +web: env/bin/gunicorn --chdir $APP_HOME/src/backend/InvenTree -c src/backend/InvenTree/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$PORT +# Worker process: qcluster +worker: env/bin/python src/backend/InvenTree/manage.py qcluster +# Invoke commands +invoke: echo "" | echo "" && . env/bin/activate && invoke +# CLI: Provided for backwards compatibility +cli: echo "" | echo "" && . env/bin/activate && invoke diff --git a/README.md b/README.md index 88200dfba35d..8c21973f358e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,189 @@ -# InvenHost InvenTree distribution +
+ InvenTree logo +

InvenTree

+

Open Source Inventory Management System

+ +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/inventree/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) [![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7179/badge)](https://bestpractices.coreinfrastructure.org/projects/7179) -[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/invenhost/InvenTree/badge)](https://securityscorecards.dev/viewer/?uri=github.com/invenhost/InvenTree) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/inventree/InvenTree/badge)](https://securityscorecards.dev/viewer/?uri=github.com/inventree/InvenTree) +[![Netlify Status](https://api.netlify.com/api/v1/badges/9bbb2101-0a4d-41e7-ad56-b63fb6053094/deploy-status)](https://app.netlify.com/sites/inventree/deploys) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=inventree_InvenTree&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=inventree_InvenTree) -This project is a stripped downs version of the [InvenTree project](https://github.com/inventree/InvenTree) which soles purpose is to build InvenTree docker images. There is no active development here and PRs are very unlikely merged - please contribute to the upstream. +[![codecov](https://codecov.io/gh/inventree/InvenTree/graph/badge.svg?token=9DZRGUUV7B)](https://codecov.io/gh/inventree/InvenTree) +[![Crowdin](https://badges.crowdin.net/inventree/localized.svg)](https://crowdin.com/project/inventree) +![GitHub commit activity](https://img.shields.io/github/commit-activity/m/inventree/inventree) +[![Docker Pulls](https://img.shields.io/docker/pulls/inventree/inventree)](https://hub.docker.com/r/inventree/inventree) -Changes from upstream are listed here: -- Cleanup of repo initial setup - [#2](https://github.com/invenhost/InvenTree/pull/2) -- Set epoch - [#1](https://github.com/invenhost/InvenTree/pull/1) -- Fix up CI tagging - [#3](https://github.com/invenhost/InvenTree/pull/7) +![GitHub Org's stars](https://img.shields.io/github/stars/inventree?style=social) +[![Twitter Follow](https://img.shields.io/twitter/follow/inventreedb?style=social)](https://twitter.com/inventreedb) +[![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/inventree?style=social)](https://www.reddit.com/r/InvenTree/) -Please always report security issues upstream and If you can to sec@mjmair.com + +

+ View Demo + · + Documentation + · + Report Bug + · + Request Feature +

+
+ + +## :star2: About the Project + +InvenTree is an open-source Inventory Management System which provides powerful low-level stock control and part tracking. The core of the InvenTree system is a Python/Django database backend which provides an admin interface (web-based) and a REST API for interaction with external interfaces and applications. A powerful plugin system provides support for custom applications and extensions. + +Check out [our website](https://inventree.org) for more details. + + +### :compass: Roadmap + +Want to see what we are working on? Check out the [roadmap tag](https://github.com/inventree/InvenTree/issues?q=is%3Aopen+is%3Aissue+label%3Aroadmap) and [horizon milestone](https://github.com/inventree/InvenTree/milestone/42). + + +### :hammer_and_wrench: Integration + +InvenTree is designed to be **extensible**, and provides multiple options for **integration** with external applications or addition of custom plugins: + +* [InvenTree API](https://docs.inventree.org/en/latest/api/api/) +* [Python module](https://docs.inventree.org/en/latest/api/python/python/) +* [Plugin interface](https://docs.inventree.org/en/latest/extend/plugins) +* [Third party tools](https://docs.inventree.org/en/latest/extend/integrate) + + +### :space_invader: Tech Stack + +
+ Server + +
+ +
+Database + +
+ +
+ Client + +
+ +
+DevOps + +
+ + +## :toolbox: Deployment / Getting Started + +There are several options to deploy InvenTree. + +

+ Docker + · + Deploy to DO + · + Bare Metal +

+ +Single line install - read [the docs](https://docs.inventree.org/en/latest/start/installer/) for supported distros and details about the function: +```bash +wget -qO install.sh https://get.inventree.org && bash install.sh +``` + +Refer to the [getting started guide](https://docs.inventree.org/en/latest/start/install/) for a full set of installation and setup instructions. + + +## :iphone: Mobile App + +InvenTree is supported by a [companion mobile app](https://docs.inventree.org/en/latest/app/app/) which allows users access to stock control information and functionality. + +

+ Android Play Store + · + Apple App Store +

+ + +## :wave: Contributing + +Contributions are welcomed and encouraged. Please help to make this project even better! Refer to the [contribution page](CONTRIBUTING.md). + + +## :scroll: Translation + +Native language translation of the InvenTree web application is [community contributed via crowdin](https://crowdin.com/project/inventree). **Contributions are welcomed and encouraged**. + + +## :money_with_wings: Sponsor + +If you use InvenTree and find it to be useful, please consider [sponsoring the project](https://github.com/sponsors/inventree). + + +## :gem: Acknowledgements + +We would like to acknowledge a few special projects: + - [PartKeepr](https://github.com/partkeepr/PartKeepr) as a valuable predecessor and inspiration + - [Readme Template](https://github.com/Louis3797/awesome-readme-template) for the template of this page + +Find a full list of used third-party libraries in [our documentation](https://docs.inventree.org/en/latest/credits/). + +## :heart: Support + +

This project is supported by the following sponsors:

+ +

+Martin Löper +Oliver Lippert +Seth Smith + +SpaceQuest Ltd +Appwrite + +Cabot Technologies +Markus Kasten +Jess Haynes +

+ +

With ongoing resources provided by:

+ +

+ + Servers by Digital Ocean + + Deploys by Netlify + Translation by Crowdin +

+ + + +## :warning: License + +Distributed under the [MIT](https://choosealicense.com/licenses/mit/) License. See [LICENSE.txt](https://github.com/inventree/InvenTree/blob/master/LICENSE) for more information. diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 000000000000..f4370acbe3f4 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,23 @@ +## Release Checklist + +Checklist of steps to perform at each code release + +### Update Version String + +Update `INVENTREE_SW_VERSION` in [version.py](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/InvenTree/version.py) + +### Increment API Version + +If the API has changed, ensure that the API version number is incremented. + +### Translation Files + +Merge the crowdin translation updates into master branch + +### Python Library Release + +Create new release for the [InvenTree python library](https://github.com/inventree/inventree-python) + +## App Release + +Create new versioned release for the InvenTree mobile app. diff --git a/SECURITY.md b/SECURITY.md index 0a1944821c9d..605460491472 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,7 +1,17 @@ # Security Policy -Please report security vulnerabilities by emailing: +The InvenTree team take all security vulnerabilities seriously. Thank you for improving the security of our open source software. +We appreciate your efforts and responsible disclosure and will make every effort to acknowledge your contributions. + +## Reporting a Vulnerability + +Please report security vulnerabilities by emailing the InvenTree team at: ``` -sec@mjmair.com +security@inventree.org ``` + +Someone from the InvenTree development team will acknowledge your email as soon as possible, and indicate the next steps in handling your security report. + + +The team will endeavour to keep you informed of the progress towards a fix for the issue, and subsequent release to the stable and development code branches. Where possible, the issue will be resolved within 90 days of reporting. diff --git a/assets/images/logo/inventree.png b/assets/images/logo/inventree.png new file mode 100644 index 000000000000..e4626e0abeb6 Binary files /dev/null and b/assets/images/logo/inventree.png differ diff --git a/assets/images/logo/inventree.svg b/assets/images/logo/inventree.svg new file mode 100644 index 000000000000..f2bb05ffae39 --- /dev/null +++ b/assets/images/logo/inventree.svg @@ -0,0 +1,291 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logo/inventree_logo_large.png b/assets/images/logo/inventree_logo_large.png new file mode 100644 index 000000000000..845e7185366c Binary files /dev/null and b/assets/images/logo/inventree_logo_large.png differ diff --git a/assets/images/logo/inventree_logo_old.svg b/assets/images/logo/inventree_logo_old.svg new file mode 100644 index 000000000000..a65006db563d --- /dev/null +++ b/assets/images/logo/inventree_logo_old.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000000..2edad7bb46be --- /dev/null +++ b/codecov.yml @@ -0,0 +1,28 @@ +coverage: + status: + project: + default: + target: 82% + +github_checks: + annotations: true + +flag_management: + default_rules: + carryforward: true + individual_flags: + - name: backend + carryforward: true + statuses: + - type: project + target: 85% + - name: migrations + carryforward: true + statuses: + - type: project + target: 40% + - name: pui + carryforward: true + statuses: + - type: project + target: 45% diff --git a/contrib/container/.env b/contrib/container/.env index a180d82dc268..447ede63b4c3 100644 --- a/contrib/container/.env +++ b/contrib/container/.env @@ -28,7 +28,6 @@ INVENTREE_DB_PASSWORD=pgpassword # Un-comment the following lines to enable Redis cache # Note that you will also have to run docker-compose with the --profile redis command # Refer to settings.py for other cache options -#INVENTREE_CACHE_ENABLED=True #INVENTREE_CACHE_HOST=inventree-cache #INVENTREE_CACHE_PORT=6379 diff --git a/contrib/container/Caddyfile b/contrib/container/Caddyfile index 96fb01c52aa2..f1b1532028bf 100644 --- a/contrib/container/Caddyfile +++ b/contrib/container/Caddyfile @@ -1,10 +1,7 @@ -# Example Caddyfile for Inventree +# Caddyfile for Inventree # The following environment variables may be used: # - INVENTREE_SITE_URL: The upstream URL of the Inventree site (default: inventree.localhost) # - INVENTREE_SERVER: The internal URL of the Inventree container (default: http://inventree-server:8000) -# -# Note that while this file is a good starting point, it may need to be modified to suit your specific requirements - (log_common) { log { diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index 5d90af7196c1..3b1783a27eb6 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -11,13 +11,11 @@ ARG base_image=python:3.11-alpine3.18 FROM ${base_image} AS inventree_base -ARG base_image # Build arguments for this image ARG commit_tag="" ARG commit_hash="" ARG commit_date="" -ARG SOURCE_DATE_EPOCH ARG data_dir="data" @@ -50,18 +48,13 @@ ENV INVENTREE_BACKGROUND_WORKERS="4" ENV INVENTREE_WEB_ADDR=0.0.0.0 ENV INVENTREE_WEB_PORT=8000 -LABEL org.opencontainers.image.created=${DATE} \ - org.opencontainers.image.vendor="inventree" \ - org.opencontainers.image.title="InvenTree backend server" \ - org.opencontainers.image.description="InvenTree is the open-source inventory management system" \ - org.opencontainers.image.url="https://inventree.org" \ - org.opencontainers.image.documentation="https://docs.inventree.org" \ - org.opencontainers.image.source="https://github.com/inventree/InvenTree" \ - org.opencontainers.image.revision=${commit_hash} \ - org.opencontainers.image.licenses="MIT" \ - org.opencontainers.image.base.name="docker.io/library/${base_image}" \ - org.opencontainers.image.version=${commit_tag} - +LABEL org.label-schema.schema-version="1.0" \ + org.label-schema.build-date=${DATE} \ + org.label-schema.vendor="inventree" \ + org.label-schema.name="inventree/inventree" \ + org.label-schema.url="https://hub.docker.com/r/inventree/inventree" \ + org.label-schema.vcs-url="https://github.com/inventree/InvenTree.git" \ + org.label-schema.vcs-ref=${commit_tag} # Install required system level packages RUN apk add --no-cache \ @@ -75,9 +68,8 @@ RUN apk add --no-cache \ # MySQL / MariaDB client mariadb-client mariadb-connector-c \ && \ - # font support - apk --update --upgrade --no-cache add fontconfig ttf-freefont font-terminus font-noto font-noto-cjk font-noto-extra \ - && fc-cache -f + # fonts + apk --update --upgrade --no-cache add fontconfig ttf-freefont font-noto terminus-font && fc-cache -f EXPOSE 8000 @@ -105,14 +97,14 @@ FROM inventree_base AS prebuild ENV PATH=/root/.local/bin:$PATH RUN ./install_build_packages.sh --no-cache --virtual .build-deps && \ - pip install --user --require-hashes -r base_requirements.txt --no-cache && \ + pip install --user -r base_requirements.txt --no-cache && \ pip install --user --require-hashes -r requirements.txt --no-cache && \ apk --purge del .build-deps # Frontend builder image: FROM prebuild AS frontend -RUN apk add --no-cache --update nodejs npm yarn +RUN apk add --no-cache --update nodejs npm && npm install -g yarn@v1.22.22 --ignore-scripts RUN yarn config set network-timeout 600000 -g COPY src ${INVENTREE_HOME}/src COPY tasks.py ${INVENTREE_HOME}/tasks.py @@ -136,15 +128,6 @@ COPY --from=prebuild /root/.local /root/.local # Copy source code COPY src/backend/InvenTree ${INVENTREE_BACKEND_DIR}/InvenTree - -# Clean up python caches, default config, old frontend compiles -RUN find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf && \ - rm -f ${INVENTREE_BACKEND_DIR}/InvenTree/plugins.txt && \ - rm -f ${INVENTREE_BACKEND_DIR}/InvenTree/secret_key.txt && \ - rm -f ${INVENTREE_BACKEND_DIR}/InvenTree/web/static/web - -# Copy frontend source code -COPY src/backend/requirements.txt ${INVENTREE_BACKEND_DIR}/requirements.txt COPY --from=frontend ${INVENTREE_BACKEND_DIR}/InvenTree/web/static/web ${INVENTREE_BACKEND_DIR}/InvenTree/web/static/web # Launch the production server @@ -158,11 +141,11 @@ EXPOSE 5173 # Install packages required for building python packages RUN ./install_build_packages.sh -RUN pip install --require-hashes -r base_requirements.txt --no-cache +RUN pip install uv==0.1.26 --no-cache-dir && pip install -r base_requirements.txt --no-cache # Install nodejs / npm / yarn -RUN apk add --no-cache --update nodejs npm yarn +RUN apk add --no-cache --update nodejs npm && npm install -g yarn@v1.22.22 --ignore-scripts RUN yarn config set network-timeout 600000 -g # The development image requires the source code to be mounted to /home/inventree/ diff --git a/contrib/container/dev-docker-compose.yml b/contrib/container/dev-docker-compose.yml index 54636da3d56a..4b84be12a5fe 100644 --- a/contrib/container/dev-docker-compose.yml +++ b/contrib/container/dev-docker-compose.yml @@ -1,3 +1,5 @@ +version: "3.8" + # Docker compose recipe for InvenTree development server # - Runs PostgreSQL as the database backend # - Uses built-in django webserver diff --git a/contrib/container/docker-compose.yml b/contrib/container/docker-compose.yml index 6a0b001f8bf4..5fa153248109 100644 --- a/contrib/container/docker-compose.yml +++ b/contrib/container/docker-compose.yml @@ -1,3 +1,5 @@ +version: "3.8" + # Docker compose recipe for a production-ready InvenTree setup, with the following containers: # - PostgreSQL as the database backend # - gunicorn as the InvenTree web server @@ -51,9 +53,14 @@ services: restart: unless-stopped # redis acts as database cache manager + # only runs under the "redis" profile : https://docs.docker.com/compose/profiles/ inventree-cache: image: redis:7.0 container_name: inventree-cache + depends_on: + - inventree-db + profiles: + - redis env_file: - .env expose: @@ -107,23 +114,9 @@ services: env_file: - .env volumes: - - ./Caddyfile:/etc/caddy/Caddyfile:ro,z + - ./Caddyfile:/etc/caddy/Caddyfile:ro - ${INVENTREE_EXT_VOLUME}/static:/var/www/static:z - ${INVENTREE_EXT_VOLUME}/media:/var/www/media:z - ${INVENTREE_EXT_VOLUME}:/var/log:z - ${INVENTREE_EXT_VOLUME}:/data:z - ${INVENTREE_EXT_VOLUME}:/config:z - - # alternative: run nginx as reverse proxy - # inventree-proxy: - # container_name: inventree-proxy - # image: nginx:stable - # restart: always - # depends_on: - # - inventree-server - # ports: - # - ${INVENTREE_WEB_PORT:-80}:80 - # - 443:443 - # volumes: - # - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro,z - # - ${INVENTREE_EXT_VOLUME}:/var/www:z diff --git a/contrib/container/install_build_packages.sh b/contrib/container/install_build_packages.sh index bbeae43a540a..358a256e7f48 100644 --- a/contrib/container/install_build_packages.sh +++ b/contrib/container/install_build_packages.sh @@ -1,7 +1,7 @@ #!/bin/ash # Install system packages required for building InvenTree python libraries -# Note that for postgreslql, we use the version 13, which matches the version used in the InvenTree docker image +# Note that for postgreslql, we use the 13 version, which matches the version used in the InvenTree docker image apk add gcc g++ musl-dev openssl-dev libffi-dev cargo python3-dev openldap-dev \ libstdc++ build-base linux-headers py3-grpcio \ diff --git a/contrib/container/requirements.in b/contrib/container/requirements.in deleted file mode 100644 index 1a87893d54ba..000000000000 --- a/contrib/container/requirements.in +++ /dev/null @@ -1,23 +0,0 @@ -# Base python requirements for docker containers - -# Basic package requirements -invoke>=2.2.0 # Invoke build tool -pyyaml>=6.0.1 -setuptools>=69.0.0 -wheel>=0.41.0 - -# Database links -psycopg[binary, pool] -mysqlclient>=2.2.0 -mariadb>=1.1.8 - -# gunicorn web server -gunicorn>=22.0.0 - -# LDAP required packages -django-auth-ldap # Django integration for ldap auth -python-ldap # LDAP auth support -django<5.0 # Force lower to match main project - -# Upgraded python package installer -uv diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index aa209c88ba2a..47968937a53f 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -1,225 +1,22 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile contrib/container/requirements.in -o contrib/container/requirements.txt --python-version=3.11 --no-strip-extras --generate-hashes -asgiref==3.8.1 \ - --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ - --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 - # via django -django==4.2.15 \ - --hash=sha256:61ee4a130efb8c451ef3467c67ca99fdce400fedd768634efc86a68c18d80d30 \ - --hash=sha256:c77f926b81129493961e19c0e02188f8d07c112a1162df69bfab178ae447f94a - # via - # -r contrib/container/requirements.in - # django-auth-ldap -django-auth-ldap==4.8.0 \ - --hash=sha256:4b4b944f3c28bce362f33fb6e8db68429ed8fd8f12f0c0c4b1a4344a7ef225ce \ - --hash=sha256:604250938ddc9fda619f247c7a59b0b2f06e53a7d3f46a156f28aa30dd71a738 - # via -r contrib/container/requirements.in -gunicorn==23.0.0 \ - --hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \ - --hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec - # via -r contrib/container/requirements.in -invoke==2.2.0 \ - --hash=sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820 \ - --hash=sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5 - # via -r contrib/container/requirements.in -mariadb==1.1.10 \ - --hash=sha256:03d6284ef713d1cad40146576a4cc2d6cbc1662060f2a0e59b174e1694521698 \ - --hash=sha256:1ce87971c02375236ff8933e6c593c748e7b2f2950b86eabfab4289fd250ea63 \ - --hash=sha256:1d81b22efbaaf4c5bc5e4cc4e2ef3c459538c1a939371089d8c5591d6f26a62e \ - --hash=sha256:29040e426f877ddc45f337c6eb381b6bbab63cc6bf8431a28effe30162142513 \ - --hash=sha256:4521aa721f926946bd71491f872e8babc78fa97755ed2114f5684b77363107cb \ - --hash=sha256:49200378c614984f5ec875481662a49d7c97c2be27970b01b32fa4b7520d4e22 \ - --hash=sha256:5d652117e2fdf12b9723e7452a05fce9e6ccbae6ea48871b21a3a8fde259dc48 \ - --hash=sha256:8c8c6b27486b0e1772a23002c702b5fd244eecf9f05633dd6cb345fc26755a20 \ - --hash=sha256:a332893e3ef7ceb7970ab4bd7c844bcb4bd68a051ca51313566f9808d7411f2d \ - --hash=sha256:d7b09ec4abd02ed235257feb769f90cd4066e8f536b55b92f5166103d5b66a63 \ - --hash=sha256:dff8b28ce4044574870d7bdd2d9f9f5da8e5f95a7ff6d226185db733060d1a93 - # via -r contrib/container/requirements.in -mysqlclient==2.2.4 \ - --hash=sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711 \ - --hash=sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41 \ - --hash=sha256:3c318755e06df599338dad7625f884b8a71fcf322a9939ef78c9b3db93e1de7a \ - --hash=sha256:4e80dcad884dd6e14949ac6daf769123223a52a6805345608bf49cdaf7bc8b3a \ - --hash=sha256:9d3310295cb682232cadc28abd172f406c718b9ada41d2371259098ae37779d3 \ - --hash=sha256:9d4c015480c4a6b2b1602eccd9846103fc70606244788d04aa14b31c4bd1f0e2 \ - --hash=sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5 \ - --hash=sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54 \ - --hash=sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab - # via -r contrib/container/requirements.in -packaging==24.1 \ - --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ - --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 - # via - # gunicorn - # mariadb -psycopg[binary, pool]==3.2.1 \ - --hash=sha256:dc8da6dc8729dacacda3cc2f17d2c9397a70a66cf0d2b69c91065d60d5f00cb7 \ - --hash=sha256:ece385fb413a37db332f97c49208b36cf030ff02b199d7635ed2fbd378724175 - # via -r contrib/container/requirements.in -psycopg-binary==3.2.1 \ - --hash=sha256:059cbd4e6da2337e17707178fe49464ed01de867dc86c677b30751755ec1dc51 \ - --hash=sha256:06a7aae34edfe179ddc04da005e083ff6c6b0020000399a2cbf0a7121a8a22ea \ - --hash=sha256:0879b5d76b7d48678d31278242aaf951bc2d69ca4e4d7cef117e4bbf7bfefda9 \ - --hash=sha256:0ab58213cc976a1666f66bc1cb2e602315cd753b7981a8e17237ac2a185bd4a1 \ - --hash=sha256:0b018631e5c80ce9bc210b71ea885932f9cca6db131e4df505653d7e3873a938 \ - --hash=sha256:101472468d59c74bb8565fab603e032803fd533d16be4b2d13da1bab8deb32a3 \ - --hash=sha256:1d353e028b8f848b9784450fc2abf149d53a738d451eab3ee4c85703438128b9 \ - --hash=sha256:1d6833f607f3fc7b22226a9e121235d3b84c0eda1d3caab174673ef698f63788 \ - --hash=sha256:21927f41c4d722ae8eb30d62a6ce732c398eac230509af5ba1749a337f8a63e2 \ - --hash=sha256:28ada5f610468c57d8a4a055a8ea915d0085a43d794266c4f3b9d02f4288f4db \ - --hash=sha256:2e8213bf50af073b1aa8dc3cff123bfeedac86332a16c1b7274910bc88a847c7 \ - --hash=sha256:302b86f92c0d76e99fe1b5c22c492ae519ce8b98b88d37ef74fda4c9e24c6b46 \ - --hash=sha256:334046a937bb086c36e2c6889fe327f9f29bfc085d678f70fac0b0618949f674 \ - --hash=sha256:33e6669091d09f8ba36e10ce678a6d9916e110446236a9b92346464a3565635e \ - --hash=sha256:3c838806eeb99af39f934b7999e35f947a8e577997cc892c12b5053a97a9057f \ - --hash=sha256:40bb515d042f6a345714ec0403df68ccf13f73b05e567837d80c886c7c9d3805 \ - --hash=sha256:413977d18412ff83486eeb5875eb00b185a9391c57febac45b8993bf9c0ff489 \ - --hash=sha256:415c3b72ea32119163255c6504085f374e47ae7345f14bc3f0ef1f6e0976a879 \ - --hash=sha256:42781ba94e8842ee98bca5a7d0c44cc9d067500fedca2d6a90fa3609b6d16b42 \ - --hash=sha256:463d55345f73ff391df8177a185ad57b552915ad33f5cc2b31b930500c068b22 \ - --hash=sha256:4a42b8f9ab39affcd5249b45cac763ac3cf12df962b67e23fd15a2ee2932afe5 \ - --hash=sha256:4c84fcac8a3a3479ac14673095cc4e1fdba2935499f72c436785ac679bec0d1a \ - --hash=sha256:592b27d6c46a40f9eeaaeea7c1fef6f3c60b02c634365eb649b2d880669f149f \ - --hash=sha256:62b1b7b07e00ee490afb39c0a47d8282a9c2822c7cfed9553a04b0058adf7e7f \ - --hash=sha256:6418712ba63cebb0c88c050b3997185b0ef54173b36568522d5634ac06153040 \ - --hash=sha256:6f9e13600647087df5928875559f0eb8f496f53e6278b7da9511b4b3d0aff960 \ - --hash=sha256:7066d3dca196ed0dc6172f9777b2d62e4f138705886be656cccff2d555234d60 \ - --hash=sha256:73f9c9b984be9c322b5ec1515b12df1ee5896029f5e72d46160eb6517438659c \ - --hash=sha256:74d623261655a169bc84a9669890975c229f2fa6e19a7f2d10a77675dcf1a707 \ - --hash=sha256:788ffc43d7517c13e624c83e0e553b7b8823c9655e18296566d36a829bfb373f \ - --hash=sha256:78c2007caf3c90f08685c5378e3ceb142bafd5636be7495f7d86ec8a977eaeef \ - --hash=sha256:7a84b5eb194a258116154b2a4ff2962ea60ea52de089508db23a51d3d6b1c7d1 \ - --hash=sha256:7ce965caf618061817f66c0906f0452aef966c293ae0933d4fa5a16ea6eaf5bb \ - --hash=sha256:84837e99353d16c6980603b362d0f03302d4b06c71672a6651f38df8a482923d \ - --hash=sha256:8f28ff0cb9f1defdc4a6f8c958bf6787274247e7dfeca811f6e2f56602695fb1 \ - --hash=sha256:921f0c7f39590763d64a619de84d1b142587acc70fd11cbb5ba8fa39786f3073 \ - --hash=sha256:950fd666ec9e9fe6a8eeb2b5a8f17301790e518953730ad44d715b59ffdbc67f \ - --hash=sha256:9a997efbaadb5e1a294fb5760e2f5643d7b8e4e3fe6cb6f09e6d605fd28e0291 \ - --hash=sha256:aa3931f308ab4a479d0ee22dc04bea867a6365cac0172e5ddcba359da043854b \ - --hash=sha256:af0469c00f24c4bec18c3d2ede124bf62688d88d1b8a5f3c3edc2f61046fe0d7 \ - --hash=sha256:b0104a72a17aa84b3b7dcab6c84826c595355bf54bb6ea6d284dcb06d99c6801 \ - --hash=sha256:b09e8a576a2ac69d695032ee76f31e03b30781828b5dd6d18c6a009e5a3d1c35 \ - --hash=sha256:b140182830c76c74d17eba27df3755a46442ce8d4fb299e7f1cf2f74a87c877b \ - --hash=sha256:b1f087bd84bdcac78bf9f024ebdbfacd07fc0a23ec8191448a50679e2ac4a19e \ - --hash=sha256:c1d2b6438fb83376f43ebb798bf0ad5e57bc56c03c9c29c85bc15405c8c0ac5a \ - --hash=sha256:cad2de17804c4cfee8640ae2b279d616bb9e4734ac3c17c13db5e40982bd710d \ - --hash=sha256:cc304a46be1e291031148d9d95c12451ffe783ff0cc72f18e2cc7ec43cdb8c68 \ - --hash=sha256:dc314a47d44fe1a8069b075a64abffad347a3a1d8652fed1bab5d3baea37acb2 \ - --hash=sha256:f092114f10f81fb6bae544a0ec027eb720e2d9c74a4fcdaa9dd3899873136935 \ - --hash=sha256:f34e369891f77d0738e5d25727c307d06d5344948771e5379ea29c76c6d84555 \ - --hash=sha256:f8a509aeaac364fa965454e80cd110fe6d48ba2c80f56c9b8563423f0b5c3cfd \ - --hash=sha256:f8afb07114ea9b924a4a0305ceb15354ccf0ef3c0e14d54b8dbeb03e50182dd7 \ - --hash=sha256:f99e59f8a5f4dcd9cbdec445f3d8ac950a492fc0e211032384d6992ed3c17eb7 - # via psycopg -psycopg-pool==3.2.2 \ - --hash=sha256:273081d0fbfaced4f35e69200c89cb8fbddfe277c38cc86c235b90a2ec2c8153 \ - --hash=sha256:9e22c370045f6d7f2666a5ad1b0caf345f9f1912195b0b25d0d3bcc4f3a7389c - # via psycopg -pyasn1==0.6.0 \ - --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ - --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 - # via - # pyasn1-modules - # python-ldap -pyasn1-modules==0.4.0 \ - --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ - --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b - # via python-ldap -python-ldap==3.4.4 \ - --hash=sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828 - # via - # -r contrib/container/requirements.in - # django-auth-ldap -pyyaml==6.0.2 \ - --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ - --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ - --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ - --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ - --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ - --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ - --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ - --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ - --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ - --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ - --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ - --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ - --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ - --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ - --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ - --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ - --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ - --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ - --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ - --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ - --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ - --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ - --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ - --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ - --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ - --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ - --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ - --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ - --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ - --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ - --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ - --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ - --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ - --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ - --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ - --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ - --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ - --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ - --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ - --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ - --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ - --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ - --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ - --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ - --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ - --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ - --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ - --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ - --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ - --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ - --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 - # via -r contrib/container/requirements.in -setuptools==73.0.1 \ - --hash=sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e \ - --hash=sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193 - # via -r contrib/container/requirements.in -sqlparse==0.5.1 \ - --hash=sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4 \ - --hash=sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e - # via django -typing-extensions==4.12.2 \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 - # via - # psycopg - # psycopg-pool -uv==0.3.0 \ - --hash=sha256:084551ee0743339aa5d0d4c76a94c9f9df16c33030b850f0cd98f316db7b42cc \ - --hash=sha256:0da4f060d583325846cde0727a8cc0cb4e8c63b30ac9373dae213a7315056d90 \ - --hash=sha256:160a1f3b01298942d6cfe21f95a9b7daa3eb73231ba1fc4689157eb9f23b3438 \ - --hash=sha256:21ebc6ca30df7ff57a8e17e3abeeba8a9d1d4ac79c1adf842fa42d48a5c7f372 \ - --hash=sha256:24a1388f5e285058f97576b7dfee79bb5007a712a9e368f3fcdcfeb2dfd9ce92 \ - --hash=sha256:2f937ebdf9976ec1ffe7228fd608ef3e6ce2a61ed68cf7b157ae6900a9c80f41 \ - --hash=sha256:39a4276afe0808ca6c033e0cd6cb73249f934b4a0c9d7b18a944f3f8ea635e27 \ - --hash=sha256:3b62e44f61a154303fc9f4aa87ae54891957d49769d21dcf2be9c22e640c3e92 \ - --hash=sha256:4303364d717b1def58e82b11271259d2ee3bb03da0ca6111819ee254f65b38f4 \ - --hash=sha256:503fc619238550be222b41422b415677c9b8045c92a9815f80ff5d7477671fe6 \ - --hash=sha256:52b3a6110705ff27462ddc68657fedf8a296ed545619a90fa73354f130ad632e \ - --hash=sha256:5c826d9daace67d67790503b0c1152093b3cecd35a91de10f5bb9e26afea9de9 \ - --hash=sha256:6d1025349cbaeba9a974d413795d0ce8d37de5ad7fb7654c0519968b2c083ba1 \ - --hash=sha256:a15b2321444f3668bc95863d2b13ce44ea54053189427ea48d112ecd8b3d2f89 \ - --hash=sha256:a71b7080ee6d7658b22f93aa750cbfd19111cd6c8ac643a73d6778598dd06559 \ - --hash=sha256:b44ebf501de5eef33e4f3cf4b6ea9a458d1f1b3cf26737c25ac507ab7914076a \ - --hash=sha256:d3da56b87ec5aa4f2ae572127c754655bad3820dd41a4d37ed4d5e2f67035990 \ - --hash=sha256:d87ff76da5128036c05db0291db7510a85cb8efb86538e8f49adc8074bb292f0 - # via -r contrib/container/requirements.in -wheel==0.44.0 \ - --hash=sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f \ - --hash=sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49 - # via -r contrib/container/requirements.in +# Base python requirements for docker containers + +# Basic package requirements +invoke>=2.2.0 # Invoke build tool +pyyaml>=6.0.1 +setuptools>=69.0.0 +wheel>=0.41.0 + +# Database links +psycopg[binary, pool] +mysqlclient>=2.2.0 +mariadb>=1.1.8 + +# gunicorn web server +gunicorn>=22.0.0 + +# LDAP required packages +django-auth-ldap # Django integration for ldap auth +python-ldap # LDAP auth support + +# Upgraded python package installer +uv diff --git a/contrib/deploy/supervisord.conf b/contrib/deploy/supervisord.conf new file mode 100644 index 000000000000..a480cba8041d --- /dev/null +++ b/contrib/deploy/supervisord.conf @@ -0,0 +1,46 @@ +; # Supervisor Config File +; Example configuration file for running InvenTree using supervisor +; There are two separate processes which must be managed: +; +; ## Web Server +; The InvenTree server must be launched and managed as a process +; The recommended way to handle the web server is to use gunicorn +; +; ## Background Tasks +; A background task manager processes long-running and periodic tasks +; InvenTree uses django-q for this purpose + +[supervisord] +; Change this path if log files are stored elsewhere +logfile=/home/inventree/log/supervisor.log +user=inventree + +[supervisorctl] + +[inet_http_server] +port = 127.0.0.1:9001 + +; InvenTree Web Server Process +[program:inventree-server] +user=inventree +directory=/home/inventree/src/InvenTree +command=/home/inventree/env/bin/gunicorn -c gunicorn.conf.py InvenTree.wsgi +startsecs=10 +autostart=true +autorestart=true +startretries=3 +; Change these paths if log files are stored elsewhere +stderr_logfile=/home/inventree/log/server.err.log +stdout_logfile=/home/inventree/log/server.out.log + +; InvenTree Background Worker Process +[program:inventree-cluster] +user=inventree +directory=/home/inventree/src/InvenTree +command=/home/inventree/env/bin/python manage.py qcluster +startsecs=10 +autostart=true +autorestart=true +; Change these paths if log files are stored elsewhere +stderr_logfile=/home/inventree/log/cluster.err.log +stdout_logfile=/home/inventree/log/cluster.out.log diff --git a/contrib/dev_reqs/requirements.in b/contrib/dev_reqs/requirements.in deleted file mode 100644 index 06161673d92f..000000000000 --- a/contrib/dev_reqs/requirements.in +++ /dev/null @@ -1,4 +0,0 @@ -# Packages needed for CI/packages -requests==2.32.3 -pyyaml==6.0.2 -jc==1.25.3 diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt deleted file mode 100644 index b1f8b7efae77..000000000000 --- a/contrib/dev_reqs/requirements.txt +++ /dev/null @@ -1,233 +0,0 @@ -# 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 -certifi==2024.7.4 \ - --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ - --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 - # via requests -charset-normalizer==3.3.2 \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 - # via requests -idna==3.7 \ - --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ - --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 - # via requests -jc==1.25.3 \ - --hash=sha256:ea17a8578497f2da92f73924d9d403f4563ba59422fbceff7bb4a16cdf84a54f \ - --hash=sha256:fa3140ceda6cba1210d1362f363cd79a0514741e8a1dd6167db2b2e2d5f24f7b - # via -r contrib/dev_reqs/requirements.in -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a - # via jc -pyyaml==6.0.2 \ - --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ - --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ - --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ - --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ - --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ - --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ - --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ - --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ - --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ - --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ - --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ - --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ - --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ - --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ - --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ - --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ - --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ - --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ - --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ - --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ - --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ - --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ - --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ - --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ - --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ - --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ - --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ - --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ - --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ - --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ - --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ - --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ - --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ - --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ - --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ - --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ - --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ - --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ - --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ - --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ - --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ - --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ - --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ - --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ - --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ - --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ - --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ - --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ - --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ - --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ - --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 - # via -r contrib/dev_reqs/requirements.in -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - # via -r contrib/dev_reqs/requirements.in -ruamel-yaml==0.18.6 \ - --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \ - --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b - # via jc -ruamel-yaml-clib==0.2.8 \ - --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \ - --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \ - --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \ - --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \ - --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \ - --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \ - --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \ - --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \ - --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \ - --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \ - --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \ - --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \ - --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \ - --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \ - --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \ - --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \ - --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \ - --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \ - --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \ - --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \ - --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \ - --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \ - --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \ - --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \ - --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \ - --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \ - --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \ - --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \ - --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \ - --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \ - --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \ - --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \ - --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \ - --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \ - --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \ - --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \ - --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \ - --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \ - --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \ - --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \ - --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \ - --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \ - --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \ - --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \ - --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \ - --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \ - --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \ - --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \ - --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \ - --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412 - # via ruamel-yaml -urllib3==2.2.2 \ - --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ - --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 - # via requests -xmltodict==0.13.0 \ - --hash=sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56 \ - --hash=sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852 - # via jc diff --git a/contrib/install.sh b/contrib/install.sh new file mode 100755 index 000000000000..3b432ae366a9 --- /dev/null +++ b/contrib/install.sh @@ -0,0 +1,352 @@ +#!/usr/bin/env bash +# This script was generated by bashly 1.1.1 (https://bashly.dannyb.co) +# Modifying it manually is not recommended + +if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then + printf "bash version 4 or higher is required\n" >&2 + exit 1 +fi + +root_command() { + # Settings + source_url=${args[source]} + publisher=${args[publisher]} + # Flags + no_call=${args[--no-call]} + dry_run=${args[--dry-run]} + + REQS="wget apt-transport-https" + + function do_call() { + if [[ $dry_run ]]; then + echo -e "### DRY RUN: \n$1" + else + $1 + fi + } + + function get_distribution { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$NAME + VER=$VERSION_ID + elif type lsb_release >/dev/null 2>&1; then + OS=$(lsb_release -si) + VER=$(lsb_release -sr) + elif [ -f /etc/lsb-release ]; then + . /etc/lsb-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE + elif [ -f /etc/debian_version ]; then + OS=Debian + VER=$(cat /etc/debian_version) + elif [ -f /etc/SuSe-release ]; then + OS=SEL + elif [ -f /etc/redhat-release ]; then + OS=RedHat + else + OS=$(uname -s) + VER=$(uname -r) + fi + } + + echo "### Installer for InvenTree - source: $publisher/$source_url" + + # Check if os and version is supported + get_distribution + echo "### Detected distribution: $OS $VER" + SUPPORTED=true # is this OS supported? + NEEDS_LIBSSL1_1=false # does this OS need libssl1.1? + + DIST_OS=${OS,,} + DIST_VER=$VER + + case "$OS" in + Ubuntu) + if [[ $VER == "22.04" ]]; then + SUPPORTED=true + NEEDS_LIBSSL1_1=true + DIST_VER="20.04" + elif [[ $VER == "20.04" ]]; then + SUPPORTED=true + else + SUPPORTED=false + fi + ;; + "Debian GNU/Linux" | "debian gnu/linux" | Raspbian) + if [[ $VER == "12" ]]; then + SUPPORTED=true + elif [[ $VER == "11" ]]; then + SUPPORTED=true + elif [[ $VER == "10" ]]; then + SUPPORTED=true + else + SUPPORTED=false + fi + DIST_OS=debian + ;; + *) + echo "### Distribution not supported" + SUPPORTED=false + ;; + esac + + if [[ $SUPPORTED != "true" ]]; then + echo "This OS is currently not supported." + echo "Please install manually using https://docs.inventree.org/en/stable/start/install/" + echo "or check https://github.com/inventree/InvenTree/issues/3836 for packaging for your OS." + echo "If you think this is a bug please file an issue at" + echo "https://github.com/inventree/InvenTree/issues/new?template=install.yaml" + + exit 1 + fi + + echo "### Installing required packages for download" + for pkg in $REQS; do + if dpkg-query -W -f'${Status}' "$pkg" 2>/dev/null | grep -q "ok installed"; then + true + else + do_call "sudo apt-get -yqq install $pkg" + fi + done + + if [[ $NEEDS_LIBSSL1_1 == "true" ]]; then + echo "### Installing libssl1.1" + + echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list + do_call "sudo apt-get update" + do_call "sudo apt-get install libssl1.1" + sudo rm /etc/apt/sources.list.d/focal-security.list + fi + + echo "### Getting and adding key" + curl -fsSL https://dl.packager.io/srv/$publisher/InvenTree/key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/pkgr-inventree.gpg > /dev/null + echo "### Adding package source" + SOURCE_URL="deb [signed-by=/etc/apt/trusted.gpg.d/pkgr-inventree.gpg] https://dl.packager.io/srv/deb/$publisher/InvenTree/$source_url/$DIST_OS $DIST_VER main" + echo "$SOURCE_URL" | tee /etc/apt/sources.list.d/inventree.list > /dev/null + echo "### Updating package lists" + do_call "sudo apt-get update" + + # Set up environment for install + echo "### Setting installer args" + if [[ $no_call ]]; then + do_call "export NO_CALL=true" + fi + + echo "### Installing InvenTree" + do_call "sudo apt-get install inventree -y" + + echo "### Install done!" + +} + +version_command() { + echo "$version" +} + +install.sh_usage() { + if [[ -n $long_usage ]]; then + printf "install.sh - Interactive installer for InvenTree\n" + echo + + else + printf "install.sh - Interactive installer for InvenTree\n" + echo + + fi + + printf "%s\n" "Usage:" + printf " install.sh [SOURCE] [PUBLISHER] [OPTIONS]\n" + printf " install.sh --help | -h\n" + printf " install.sh --version | -v\n" + echo + + if [[ -n $long_usage ]]; then + printf "%s\n" "Options:" + + printf " %s\n" "--no-call, -n" + printf " Do not call outside APIs (only functionally needed)\n" + echo + + printf " %s\n" "--dry-run, -d" + printf " Dry run (do not install anything)\n" + echo + + printf " %s\n" "--help, -h" + printf " Show this help\n" + echo + printf " %s\n" "--version, -v" + printf " Show version number\n" + echo + + printf "%s\n" "Arguments:" + + printf " %s\n" "SOURCE" + printf " Package source that should be used\n" + printf " Allowed: stable, master, main\n" + printf " Default: stable\n" + echo + + printf " %s\n" "PUBLISHER" + printf " Publisher that should be used\n" + printf " Default: inventree\n" + echo + + printf "%s\n" "Examples:" + printf " install\n" + printf " install master --no-call\n" + printf " install master matmair --dry-run\n" + echo + + fi +} + +normalize_input() { + local arg flags + + while [[ $# -gt 0 ]]; do + arg="$1" + if [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then + input+=("${BASH_REMATCH[1]}") + input+=("${BASH_REMATCH[2]}") + elif [[ $arg =~ ^(-[a-zA-Z0-9])=(.+)$ ]]; then + input+=("${BASH_REMATCH[1]}") + input+=("${BASH_REMATCH[2]}") + elif [[ $arg =~ ^-([a-zA-Z0-9][a-zA-Z0-9]+)$ ]]; then + flags="${BASH_REMATCH[1]}" + for ((i = 0; i < ${#flags}; i++)); do + input+=("-${flags:i:1}") + done + else + input+=("$arg") + fi + + shift + done +} + +inspect_args() { + if ((${#args[@]})); then + readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) + echo args: + for k in "${sorted_keys[@]}"; do echo "- \${args[$k]} = ${args[$k]}"; done + else + echo args: none + fi + + if ((${#other_args[@]})); then + echo + echo other_args: + echo "- \${other_args[*]} = ${other_args[*]}" + for i in "${!other_args[@]}"; do + echo "- \${other_args[$i]} = ${other_args[$i]}" + done + fi + + if ((${#deps[@]})); then + readarray -t sorted_keys < <(printf '%s\n' "${!deps[@]}" | sort) + echo + echo deps: + for k in "${sorted_keys[@]}"; do echo "- \${deps[$k]} = ${deps[$k]}"; done + fi + +} + +parse_requirements() { + + while [[ $# -gt 0 ]]; do + case "${1:-}" in + --version | -v) + version_command + exit + ;; + + --help | -h) + long_usage=yes + install.sh_usage + exit + ;; + + *) + break + ;; + + esac + done + + action="root" + + while [[ $# -gt 0 ]]; do + key="$1" + case "$key" in + + --no-call | -n) + + args['--no-call']=1 + shift + ;; + + --dry-run | -d) + + args['--dry-run']=1 + shift + ;; + + -?*) + printf "invalid option: %s\n" "$key" >&2 + exit 1 + ;; + + *) + + if [[ -z ${args['source']+x} ]]; then + + args['source']=$1 + shift + elif [[ -z ${args['publisher']+x} ]]; then + + args['publisher']=$1 + shift + else + printf "invalid argument: %s\n" "$key" >&2 + exit 1 + fi + + ;; + + esac + done + + [[ -n ${args['source']:-} ]] || args['source']="stable" + [[ -n ${args['publisher']:-} ]] || args['publisher']="inventree" + + if [[ -n ${args['source']} ]] && [[ ! ${args['source']} =~ ^(stable|master|main)$ ]]; then + printf "%s\n" "source must be one of: stable, master, main" >&2 + exit 1 + fi + +} + +initialize() { + version="2.0" + long_usage='' + set -e + + +} + +run() { + declare -A args=() + declare -A deps=() + declare -a other_args=() + declare -a input=() + normalize_input "$@" + parse_requirements "${input[@]}" + + case "$action" in + "root") root_command ;; + esac +} + +initialize +run "$@" diff --git a/contrib/installer/README b/contrib/installer/README new file mode 100644 index 000000000000..78ac001a72fb --- /dev/null +++ b/contrib/installer/README @@ -0,0 +1,14 @@ +The installer is generated using bashly. + +## Installation +Check out the docs: https://bashly.dannyb.co/installation/ + +If you have ruby already installed run +```bash +gem install bashly +``` + +## Regenerate script +```bash +bashly generate +``` diff --git a/contrib/installer/settings.yml b/contrib/installer/settings.yml new file mode 100644 index 000000000000..ddd64bbe8ba9 --- /dev/null +++ b/contrib/installer/settings.yml @@ -0,0 +1,32 @@ +# All settings are optional (with their default values provided below), and +# can also be set with an environment variable with the same name, capitalized +# and prefixed by `BASHLY_` - for example: BASHLY_SOURCE_DIR +# +# When setting environment variables, you can use: +# - "0", "false" or "no" to represent false +# - "1", "true" or "yes" to represent true + +# The path containing the bashly configuration and source files +source_dir: src + +# The path to use for creating the bash script +target_dir: .. + +# The path to use for upgrading library files, relative to the source dir +lib_dir: lib + +# When true, enable bash strict mode (set -euo pipefail) +strict: false + +# When true, the generated script will use tab indentation instead of spaces +# (every 2 leading spaces will be converted to a tab character) +tab_indent: false + +# When true, the generated script will consider any argument in the form of +# `-abc` as if it is `-a -b -c`. +compact_short_flags: true + +# Set to 'production' or 'development': +# - production generate a smaller script, without file markers +# - development generate with file markers +env: production diff --git a/contrib/installer/src/bashly.yml b/contrib/installer/src/bashly.yml new file mode 100644 index 000000000000..638facdf6f4e --- /dev/null +++ b/contrib/installer/src/bashly.yml @@ -0,0 +1,28 @@ +name: install.sh +help: Interactive installer for InvenTree +version: 2.0 + +args: +- name: source + help: Package source that should be used + default: stable + allowed: + - stable + - master + - main +- name: publisher + help: Publisher that should be used + default: inventree + +flags: +- long: --no-call + short: -n + help: Do not call outside APIs (only functionally needed) +- long: --dry-run + short: -d + help: Dry run (do not install anything) + +examples: +- install +- install master --no-call +- install master matmair --dry-run diff --git a/contrib/installer/src/initialize.sh b/contrib/installer/src/initialize.sh new file mode 100644 index 000000000000..868d376707f7 --- /dev/null +++ b/contrib/installer/src/initialize.sh @@ -0,0 +1,6 @@ +## Code here runs inside the initialize() function +## Use it for anything that you need to run before any other function, like +## setting environment variables: +## CONFIG_FILE=settings.ini +## +## Feel free to empty (but not delete) this file. diff --git a/contrib/installer/src/root_command.sh b/contrib/installer/src/root_command.sh new file mode 100644 index 000000000000..4e7bffcdc490 --- /dev/null +++ b/contrib/installer/src/root_command.sh @@ -0,0 +1,129 @@ +# Settings +source_url=${args[source]} +publisher=${args[publisher]} +# Flags +no_call=${args[--no-call]} +dry_run=${args[--dry-run]} + +REQS="wget apt-transport-https" + +function do_call() { + if [[ $dry_run ]]; then + echo -e "### DRY RUN: \n$1" + else + $1 + fi +} + +function get_distribution { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$NAME + VER=$VERSION_ID + elif type lsb_release >/dev/null 2>&1; then + OS=$(lsb_release -si) + VER=$(lsb_release -sr) + elif [ -f /etc/lsb-release ]; then + . /etc/lsb-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE + elif [ -f /etc/debian_version ]; then + OS=Debian + VER=$(cat /etc/debian_version) + elif [ -f /etc/SuSe-release ]; then + OS=SEL + elif [ -f /etc/redhat-release ]; then + OS=RedHat + else + OS=$(uname -s) + VER=$(uname -r) + fi +} + +echo "### Installer for InvenTree - source: $publisher/$source_url" + +# Check if os and version is supported +get_distribution +echo "### Detected distribution: $OS $VER" +SUPPORTED=true # is this OS supported? +NEEDS_LIBSSL1_1=false # does this OS need libssl1.1? + +DIST_OS=${OS,,} +DIST_VER=$VER + +case "$OS" in + Ubuntu) + if [[ $VER == "22.04" ]]; then + SUPPORTED=true + NEEDS_LIBSSL1_1=true + DIST_VER="20.04" + elif [[ $VER == "20.04" ]]; then + SUPPORTED=true + else + SUPPORTED=false + fi + ;; + "Debian GNU/Linux" | "debian gnu/linux" | Raspbian) + if [[ $VER == "12" ]]; then + SUPPORTED=true + elif [[ $VER == "11" ]]; then + SUPPORTED=true + elif [[ $VER == "10" ]]; then + SUPPORTED=true + else + SUPPORTED=false + fi + DIST_OS=debian + ;; + *) + echo "### Distribution not supported" + SUPPORTED=false + ;; +esac + +if [[ $SUPPORTED != "true" ]]; then + echo "This OS is currently not supported." + echo "Please install manually using https://docs.inventree.org/en/stable/start/install/" + echo "or check https://github.com/inventree/InvenTree/issues/3836 for packaging for your OS." + echo "If you think this is a bug please file an issue at" + echo "https://github.com/inventree/InvenTree/issues/new?template=install.yaml" + + exit 1 +fi + +echo "### Installing required packages for download" +for pkg in $REQS; do + if dpkg-query -W -f'${Status}' "$pkg" 2>/dev/null | grep -q "ok installed"; then + true + else + do_call "sudo apt-get -yqq install $pkg" + fi +done + +if [[ $NEEDS_LIBSSL1_1 == "true" ]]; then + echo "### Installing libssl1.1" + + echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list + do_call "sudo apt-get update" + do_call "sudo apt-get install libssl1.1" + sudo rm /etc/apt/sources.list.d/focal-security.list +fi + +echo "### Getting and adding key" +curl -fsSL https://dl.packager.io/srv/$publisher/InvenTree/key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/pkgr-inventree.gpg > /dev/null +echo "### Adding package source" +SOURCE_URL="deb [signed-by=/etc/apt/trusted.gpg.d/pkgr-inventree.gpg] https://dl.packager.io/srv/deb/$publisher/InvenTree/$source_url/$DIST_OS $DIST_VER main" +echo "$SOURCE_URL" | tee /etc/apt/sources.list.d/inventree.list > /dev/null +echo "### Updating package lists" +do_call "sudo apt-get update" + +# Set up environment for install +echo "### Setting installer args" +if [[ $no_call ]]; then + do_call "export NO_CALL=true" +fi + +echo "### Installing InvenTree" +do_call "sudo apt-get install inventree -y" + +echo "### Install done!" diff --git a/contrib/packager.io/before.sh b/contrib/packager.io/before.sh new file mode 100755 index 000000000000..b0bb808cef7e --- /dev/null +++ b/contrib/packager.io/before.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# packager.io before script +# + +set -eu + +VERSION="$APP_PKG_VERSION-$APP_PKG_ITERATION" +echo "Setting VERSION information to $VERSION" +echo "$VERSION" > VERSION + +# The sha is the second element in APP_PKG_ITERATION +SHA=$(echo $APP_PKG_ITERATION | cut -d'.' -f2) + +# Download info +echo "Getting info from github for commit $SHA" +curl -L \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/InvenTree/InvenTree/commits/$SHA > commit.json +curl -L \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/InvenTree/InvenTree/commits/$SHA/branches-where-head > branches.json + +# Extract info +echo "Extracting info from github" +DATE=$(jq -r '.commit.committer.date' commit.json) +BRANCH=$(jq -r '.[].name' branches.json) +NODE_ID=$(jq -r '.node_id' commit.json) +SIGNATURE=$(jq -r '.commit.verification.signature' commit.json) + +echo "Write VERSION information" +echo "INVENTREE_COMMIT_HASH='$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 "Written VERSION information" +cat VERSION diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh new file mode 100755 index 000000000000..5b74029b9d10 --- /dev/null +++ b/contrib/packager.io/functions.sh @@ -0,0 +1,296 @@ +#!/bin/bash +# +# packager.io postinstall script functions +# + +function detect_docker() { + if [ -n "$(grep docker /dev/null)" ]; then + INIT_CMD="systemctl" + elif [ -n "$(which initctl 2>/dev/null)" ]; then + INIT_CMD="initctl" + else + function sysvinit() { + service $2 $1 + } + INIT_CMD="sysvinit" + fi + + if [ "${DOCKER}" == "yes" ]; then + INIT_CMD="initctl" + fi +} + +function detect_ip() { + # Get the IP address of the server + + if [ "${SETUP_NO_CALLS}" == "true" ]; then + # Use local IP address + echo "# Getting the IP address of the first local IP address" + export INVENTREE_IP=$(hostname -I | awk '{print $1}') + else + # Use web service to get the IP address + echo "# Getting the IP address of the server via web service" + export INVENTREE_IP=$(curl -s https://checkip.amazonaws.com) + fi + + echo "IP address is ${INVENTREE_IP}" +} + +function get_env() { + envname=$1 + + pid=$$ + while [ -z "${!envname}" -a $pid != 1 ]; do + ppid=`ps -oppid -p$pid|tail -1|awk '{print $1}'` + env=`strings /proc/$ppid/environ` + export $envname=`echo "$env"|awk -F= '$1 == "'$envname'" { print $2; }'` + pid=$ppid + done + + if [ -n "${SETUP_DEBUG}" ]; then + echo "Done getting env $envname: ${!envname}" + fi +} + +function detect_local_env() { + # Get all possible envs for the install + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Printing local envs - before #++#" + printenv + fi + + for i in ${SETUP_ENVS//,/ } + do + get_env $i + done + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Printing local envs - after #++#" + printenv + fi +} + +function detect_envs() { + # Detect all envs that should be passed to setup commands + + echo "# Setting base environment variables" + + export INVENTREE_CONFIG_FILE=${INVENTREE_CONFIG_FILE:-${CONF_DIR}/config.yaml} + + if test -f "${INVENTREE_CONFIG_FILE}"; then + echo "# Using existing config file: ${INVENTREE_CONFIG_FILE}" + + # Install parser + pip install jc==1.25.2 -q + + # Load config + local CONF=$(cat ${INVENTREE_CONFIG_FILE} | jc --yaml) + + # Parse the config file + export INVENTREE_MEDIA_ROOT=$(jq -r '.[].media_root' <<< ${CONF}) + export INVENTREE_STATIC_ROOT=$(jq -r '.[].static_root' <<< ${CONF}) + export INVENTREE_BACKUP_DIR=$(jq -r '.[].backup_dir' <<< ${CONF}) + export INVENTREE_PLUGINS_ENABLED=$(jq -r '.[].plugins_enabled' <<< ${CONF}) + export INVENTREE_PLUGIN_FILE=$(jq -r '.[].plugin_file' <<< ${CONF}) + export INVENTREE_SECRET_KEY_FILE=$(jq -r '.[].secret_key_file' <<< ${CONF}) + + export INVENTREE_DB_ENGINE=$(jq -r '.[].database.ENGINE' <<< ${CONF}) + export INVENTREE_DB_NAME=$(jq -r '.[].database.NAME' <<< ${CONF}) + export INVENTREE_DB_USER=$(jq -r '.[].database.USER' <<< ${CONF}) + export INVENTREE_DB_PASSWORD=$(jq -r '.[].database.PASSWORD' <<< ${CONF}) + export INVENTREE_DB_HOST=$(jq -r '.[].database.HOST' <<< ${CONF}) + export INVENTREE_DB_PORT=$(jq -r '.[].database.PORT' <<< ${CONF}) + else + echo "# No config file found: ${INVENTREE_CONFIG_FILE}, using envs or defaults" + + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Print current envs" + printenv | grep INVENTREE_ + printenv | grep SETUP_ + fi + + export INVENTREE_MEDIA_ROOT=${INVENTREE_MEDIA_ROOT:-${DATA_DIR}/media} + export INVENTREE_STATIC_ROOT=${DATA_DIR}/static + export INVENTREE_BACKUP_DIR=${DATA_DIR}/backup + export INVENTREE_PLUGINS_ENABLED=true + export INVENTREE_PLUGIN_FILE=${CONF_DIR}/plugins.txt + export INVENTREE_SECRET_KEY_FILE=${CONF_DIR}/secret_key.txt + + export INVENTREE_DB_ENGINE=${INVENTREE_DB_ENGINE:-sqlite3} + export INVENTREE_DB_NAME=${INVENTREE_DB_NAME:-${DATA_DIR}/database.sqlite3} + export INVENTREE_DB_USER=${INVENTREE_DB_USER:-sampleuser} + export INVENTREE_DB_PASSWORD=${INVENTREE_DB_PASSWORD:-samplepassword} + export INVENTREE_DB_HOST=${INVENTREE_DB_HOST:-samplehost} + export INVENTREE_DB_PORT=${INVENTREE_DB_PORT:-123456} + + export SETUP_CONF_LOADED=true + fi + + # For debugging pass out the envs + echo "# Collected environment variables:" + echo "# INVENTREE_MEDIA_ROOT=${INVENTREE_MEDIA_ROOT}" + echo "# INVENTREE_STATIC_ROOT=${INVENTREE_STATIC_ROOT}" + echo "# INVENTREE_BACKUP_DIR=${INVENTREE_BACKUP_DIR}" + echo "# INVENTREE_PLUGINS_ENABLED=${INVENTREE_PLUGINS_ENABLED}" + echo "# INVENTREE_PLUGIN_FILE=${INVENTREE_PLUGIN_FILE}" + echo "# INVENTREE_SECRET_KEY_FILE=${INVENTREE_SECRET_KEY_FILE}" + echo "# INVENTREE_DB_ENGINE=${INVENTREE_DB_ENGINE}" + echo "# INVENTREE_DB_NAME=${INVENTREE_DB_NAME}" + echo "# INVENTREE_DB_USER=${INVENTREE_DB_USER}" + if [ -n "${SETUP_DEBUG}" ]; then + echo "# INVENTREE_DB_PASSWORD=${INVENTREE_DB_PASSWORD}" + fi + echo "# INVENTREE_DB_HOST=${INVENTREE_DB_HOST}" + echo "# INVENTREE_DB_PORT=${INVENTREE_DB_PORT}" +} + +function create_initscripts() { + + # Make sure python env exists + if test -f "${APP_HOME}/env"; then + echo "# python environment already present - skipping" + else + echo "# Setting up python environment" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && ${SETUP_PYTHON} -m venv env" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && env/bin/pip install invoke wheel" + + if [ -n "${SETUP_EXTRA_PIP}" ]; then + echo "# Installing extra pip packages" + if [ -n "${SETUP_DEBUG}" ]; then + echo "# Extra pip packages: ${SETUP_EXTRA_PIP}" + fi + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && env/bin/pip install ${SETUP_EXTRA_PIP}" + fi + fi + + # Unlink default config if it exists + if test -f "/etc/nginx/sites-enabled/default"; then + echo "# Unlinking default nginx config\n# Old file still in /etc/nginx/sites-available/default" + sudo unlink /etc/nginx/sites-enabled/default + fi + + # Create InvenTree specific nginx config + echo "# Stopping nginx" + ${INIT_CMD} stop nginx + echo "# Setting up nginx to ${SETUP_NGINX_FILE}" + # Always use the latest nginx config; important if new headers are added / needed for security + cp ${APP_HOME}/contrib/packager.io/nginx.prod.conf ${SETUP_NGINX_FILE} + sed -i s/inventree-server:8000/localhost:6000/g ${SETUP_NGINX_FILE} + sed -i s=var/www=opt/inventree/data=g ${SETUP_NGINX_FILE} + # Start nginx + echo "# Starting nginx" + ${INIT_CMD} start nginx + + echo "# (Re)creating init scripts" + # This resets scale parameters to a known state + inventree scale web="1" worker="1" + + echo "# Enabling InvenTree on boot" + ${INIT_CMD} enable inventree +} + +function create_admin() { + # Create data for admin user + + if test -f "${SETUP_ADMIN_PASSWORD_FILE}"; then + echo "# Admin data already exists - skipping" + else + echo "# Creating admin user data" + + # Static admin data + export INVENTREE_ADMIN_USER=${INVENTREE_ADMIN_USER:-admin} + export INVENTREE_ADMIN_EMAIL=${INVENTREE_ADMIN_EMAIL:-admin@example.com} + + # Create password if not set + if [ -z "${INVENTREE_ADMIN_PASSWORD}" ]; then + openssl rand -base64 32 >${SETUP_ADMIN_PASSWORD_FILE} + export INVENTREE_ADMIN_PASSWORD=$(cat ${SETUP_ADMIN_PASSWORD_FILE}) + fi + fi +} + +function start_inventree() { + echo "# Starting InvenTree" + ${INIT_CMD} start inventree +} + +function stop_inventree() { + echo "# Stopping InvenTree" + ${INIT_CMD} stop inventree +} + +function update_or_install() { + + # Set permissions so app user can write there + chown ${APP_USER}:${APP_GROUP} ${APP_HOME} -R + + # Run update as app user + echo "# Updating InvenTree" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && pip install wheel" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && invoke update | sed -e 's/^/# inv update| /;'" + + # Make sure permissions are correct again + echo "# Set permissions for data dir and media: ${DATA_DIR}" + chown ${APP_USER}:${APP_GROUP} ${DATA_DIR} -R + chown ${APP_USER}:${APP_GROUP} ${CONF_DIR} -R +} + +function set_env() { + echo "# Setting up InvenTree config values" + + inventree config:set INVENTREE_CONFIG_FILE=${INVENTREE_CONFIG_FILE} + + # Changing the config file + echo "# Writing the settings to the config file ${INVENTREE_CONFIG_FILE}" + # Media Root + sed -i s=#media_root:\ \'/home/inventree/data/media\'=media_root:\ \'${INVENTREE_MEDIA_ROOT}\'=g ${INVENTREE_CONFIG_FILE} + # Static Root + sed -i s=#static_root:\ \'/home/inventree/data/static\'=static_root:\ \'${INVENTREE_STATIC_ROOT}\'=g ${INVENTREE_CONFIG_FILE} + # Backup dir + sed -i s=#backup_dir:\ \'/home/inventree/data/backup\'=backup_dir:\ \'${INVENTREE_BACKUP_DIR}\'=g ${INVENTREE_CONFIG_FILE} + # Plugins enabled + sed -i s=plugins_enabled:\ False=plugins_enabled:\ ${INVENTREE_PLUGINS_ENABLED}=g ${INVENTREE_CONFIG_FILE} + # Plugin file + sed -i s=#plugin_file:\ \'/path/to/plugins.txt\'=plugin_file:\ \'${INVENTREE_PLUGIN_FILE}\'=g ${INVENTREE_CONFIG_FILE} + # Secret key file + sed -i s=#secret_key_file:\ \'/etc/inventree/secret_key.txt\'=secret_key_file:\ \'${INVENTREE_SECRET_KEY_FILE}\'=g ${INVENTREE_CONFIG_FILE} + # Debug mode + sed -i s=debug:\ True=debug:\ False=g ${INVENTREE_CONFIG_FILE} + + # Database engine + sed -i s=#ENGINE:\ sampleengine=ENGINE:\ ${INVENTREE_DB_ENGINE}=g ${INVENTREE_CONFIG_FILE} + # Database name + sed -i s=#NAME:\ \'/path/to/database\'=NAME:\ \'${INVENTREE_DB_NAME}\'=g ${INVENTREE_CONFIG_FILE} + # Database user + sed -i s=#USER:\ sampleuser=USER:\ ${INVENTREE_DB_USER}=g ${INVENTREE_CONFIG_FILE} + # Database password + sed -i s=#PASSWORD:\ samplepassword=PASSWORD:\ ${INVENTREE_DB_PASSWORD}=g ${INVENTREE_CONFIG_FILE} + # Database host + sed -i s=#HOST:\ samplehost=HOST:\ ${INVENTREE_DB_HOST}=g ${INVENTREE_CONFIG_FILE} + # Database port + sed -i s=#PORT:\ 123456=PORT:\ ${INVENTREE_DB_PORT}=g ${INVENTREE_CONFIG_FILE} + + # Fixing the permissions + chown ${APP_USER}:${APP_GROUP} ${DATA_DIR} ${INVENTREE_CONFIG_FILE} +} + +function final_message() { + echo -e "####################################################################################" + echo -e "This InvenTree install uses nginx, the settings for the webserver can be found in" + echo -e "${SETUP_NGINX_FILE}" + echo -e "Try opening InvenTree with either\nhttp://localhost/ or http://${INVENTREE_IP}/\n" + echo -e "Admin user data:" + echo -e " Email: ${INVENTREE_ADMIN_EMAIL}" + echo -e " Username: ${INVENTREE_ADMIN_USER}" + echo -e " Password: ${INVENTREE_ADMIN_PASSWORD}" + echo -e "####################################################################################" +} diff --git a/contrib/container/nginx.conf b/contrib/packager.io/nginx.prod.conf similarity index 87% rename from contrib/container/nginx.conf rename to contrib/packager.io/nginx.prod.conf index 91b82adae164..a78b9ebd0f42 100644 --- a/contrib/container/nginx.conf +++ b/contrib/packager.io/nginx.prod.conf @@ -1,6 +1,3 @@ -# An example configuration file for running InvenTree container behind an nginx proxy -# While suitable for a simple installation, this file will likely require some modification -# if you are running a more complex setup (e.g behind another proxy, or with HTTPS) server { diff --git a/contrib/packager.io/postinstall.sh b/contrib/packager.io/postinstall.sh new file mode 100755 index 000000000000..03230b955a84 --- /dev/null +++ b/contrib/packager.io/postinstall.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# +# packager.io postinstall script +# + +exec > >(tee ${APP_HOME}/log/setup_$(date +"%F_%H_%M_%S").log) 2>&1 + +PATH=${APP_HOME}/env/bin:${APP_HOME}/:/sbin:/bin:/usr/sbin:/usr/bin: + +# import functions +. ${APP_HOME}/contrib/packager.io/functions.sh + +# Envs that should be passed to setup commands +export SETUP_ENVS=PATH,APP_HOME,INVENTREE_MEDIA_ROOT,INVENTREE_STATIC_ROOT,INVENTREE_BACKUP_DIR,INVENTREE_PLUGINS_ENABLED,INVENTREE_PLUGIN_FILE,INVENTREE_CONFIG_FILE,INVENTREE_SECRET_KEY_FILE,INVENTREE_DB_ENGINE,INVENTREE_DB_NAME,INVENTREE_DB_USER,INVENTREE_DB_PASSWORD,INVENTREE_DB_HOST,INVENTREE_DB_PORT,INVENTREE_ADMIN_USER,INVENTREE_ADMIN_EMAIL,INVENTREE_ADMIN_PASSWORD,SETUP_NGINX_FILE,SETUP_ADMIN_PASSWORD_FILE,SETUP_NO_CALLS,SETUP_DEBUG,SETUP_EXTRA_PIP,SETUP_PYTHON + +# Get the envs +detect_local_env + +# default config +export CONF_DIR=/etc/inventree +export DATA_DIR=${APP_HOME}/data +# Setup variables +export SETUP_NGINX_FILE=${SETUP_NGINX_FILE:-/etc/nginx/sites-enabled/inventree.conf} +export SETUP_ADMIN_PASSWORD_FILE=${CONF_DIR}/admin_password.txt +export SETUP_NO_CALLS=${SETUP_NO_CALLS:-false} +export SETUP_PYTHON=${SETUP_PYTHON:-python3.9} +# SETUP_DEBUG can be set to get debug info +# SETUP_EXTRA_PIP can be set to install extra pip packages +# SETUP_PYTHON can be set to use a different python version + +# get base info +detect_envs +detect_docker +detect_initcmd +detect_ip + +# create processes +create_initscripts +create_admin + +# run updates +stop_inventree +update_or_install +# Write config file +if [ "${SETUP_CONF_LOADED}" = "true" ]; then + set_env +fi +start_inventree + +# show info +final_message diff --git a/contrib/packager.io/preinstall.sh b/contrib/packager.io/preinstall.sh deleted file mode 100755 index 0e59daebb263..000000000000 --- a/contrib/packager.io/preinstall.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# -# packager.io preinstall/preremove script -# -PATH=${APP_HOME}/env/bin:${APP_HOME}/:/sbin:/bin:/usr/sbin:/usr/bin: - -# Envs that should be passed to setup commands -export SETUP_ENVS=PATH,APP_HOME,INVENTREE_MEDIA_ROOT,INVENTREE_STATIC_ROOT,INVENTREE_BACKUP_DIR,INVENTREE_PLUGINS_ENABLED,INVENTREE_PLUGIN_FILE,INVENTREE_CONFIG_FILE,INVENTREE_SECRET_KEY_FILE,INVENTREE_DB_ENGINE,INVENTREE_DB_NAME,INVENTREE_DB_USER,INVENTREE_DB_PASSWORD,INVENTREE_DB_HOST,INVENTREE_DB_PORT,INVENTREE_ADMIN_USER,INVENTREE_ADMIN_EMAIL,INVENTREE_ADMIN_PASSWORD,SETUP_NGINX_FILE,SETUP_ADMIN_PASSWORD_FILE,SETUP_NO_CALLS,SETUP_DEBUG,SETUP_EXTRA_PIP,SETUP_PYTHON - -if test -f "${APP_HOME}/env/bin/pip"; then - echo "# Clearing precompiled files" - sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && invoke clear-generated" -else - echo "# No python environment found - skipping" -fi diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000000..e6851f3632ae --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,8 @@ +"commit_message": "Fix: New translations %original_file_name% from Crowdin" +"append_commit_message": false + +files: + - source: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po + translation: /src/backend/InvenTree/locale/%two_letters_code%/LC_MESSAGES/%original_file_name% + - source: /src/frontend/src/locales/en/messages.po + translation: /src/frontend/src/locales/%two_letters_code%/%original_file_name% diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000000..ea8649cfa3e2 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,20 @@ +# Ignore python environment files +env-inv-doc/ +env/ + +# Compiled python files +*.pyd +*.pyc + +# Documentation build files +_build/ +site/ + +# Generated API schema files +docs/api/schema/*.yml + +# Temp files +releases.json +versions.json + +.vscode/ diff --git a/src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE b/docs/LICENSE similarity index 96% rename from src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE rename to docs/LICENSE index 974db1ac4bf4..54fb0f2c1c9c 100644 --- a/src/backend/InvenTree/InvenTree/static/tabler-icons/LICENSE +++ b/docs/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020-2024 Paweł Kuna +Copyright (c) 2019 InvenTree Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000000..578afc13e835 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,83 @@ +# InvenTree Documentation + +[![Documentation Status](https://readthedocs.org/projects/inventree/badge/?version=latest)](https://inventree.readthedocs.io/en/latest/?badge=latest) + +This repository hosts the [official documentation](https://inventree.readthedocs.io/) for [InvenTree](https://github.com/inventree/inventree), an open source inventory management system. + +To serve this documentation locally (e.g. for development), you will need to have Python 3 installed on your system. + +## Setup + +Run the following commands from the top-level project directory: + +``` +$ git clone https://github.com/inventree/inventree +$ pip install -r docs/requirements.txt +``` + +## Serve Locally + +To serve the pages locally, run the following command (from the top-level project directory): + +``` +$ mkdocs serve -f docs/mkdocs.yml -a localhost:8080 +``` + +## Edit Documentation Files + +Once the server is running, it will monitor the documentation files for any changes, and update the served pages. + +### Admonitions + +"Admonition" blocks can be added as follow: +``` +!!! info "This is the admonition block title" + This is the admonition block content +``` + +Refer to the [reference documentation](https://squidfunk.github.io/mkdocs-material/reference/admonitions/) to customize the admonition block to the use-case (eg. warning, missing, info, etc.). + +### Internal Links + +Links to internal documentation pages **must** use relative pathing, otherwise the link will be broken by the readthedocs URL formatting. + +Also, linking to an internal page must use the `.md` suffix! + +For example, to link to the page `/part/views` from `/stock/stocktake`, the link must be formed as follows: + +``` +Click [here](../part/views.md) +``` + +*Formatting the link as follows:* + +``` +Click [here](/part/views) +``` + +*will result in a broken link.* + +### Images + +Images are served from the `./docs/assets/images` folder and can be added as follow: +``` +{% with id="image_id", url="folder/image_name.png", description="Text shown if image is not loaded properly" %} +{% include 'img.html' %} +{% endwith %} +``` + +Replace: +* `image_id` with a short unique identifier for the image (most commonly, `image_id` is same as `image_name`) +* `folder` with the folder in `docs/assets/images` in which the image is stored +* `image_name` with the name of the image +* `.png` with the image extension (PNG or JPEG are preferred formats) + +### Global variables + +Refer to the [reference documentation](https://squidfunk.github.io/mkdocs-material/reference/variables/#using-custom-variables) to find out how to add global variables to the documentation site. + +Global variables should be added in the `# Global Variables` section of the `mkdocs.yml` configuration file. + +## Credits + +This documentation makes use of the [mkdocs-material template](https://github.com/squidfunk/mkdocs-material) diff --git a/src/backend/InvenTree/importer/__init__.py b/docs/__init__.py similarity index 100% rename from src/backend/InvenTree/importer/__init__.py rename to docs/__init__.py diff --git a/docs/_includes/app_img.html b/docs/_includes/app_img.html new file mode 100644 index 000000000000..ffafb7f32df3 --- /dev/null +++ b/docs/_includes/app_img.html @@ -0,0 +1,5 @@ +{% set url = 'app/' + url %} + +{% with id=id, url=url, maxheight="240px", description="" %} +{% include "img.html" %} +{% endwith %} diff --git a/docs/_includes/carousel.html b/docs/_includes/carousel.html new file mode 100644 index 000000000000..a4ecb1574e10 --- /dev/null +++ b/docs/_includes/carousel.html @@ -0,0 +1,32 @@ +
+
+
    + {% for img in listimages(directory) %} + {% with src=img %} + {% include "splide_image.html" %} + {% endwith %} + {% endfor %} +
+
+
+ + diff --git a/docs/_includes/django.html b/docs/_includes/django.html new file mode 100644 index 000000000000..87046023f3db --- /dev/null +++ b/docs/_includes/django.html @@ -0,0 +1 @@ +https://docs.djangoproject.com/en/{{ config.extra.django_version }} diff --git a/docs/_includes/img.html b/docs/_includes/img.html new file mode 100644 index 000000000000..620e41f44744 --- /dev/null +++ b/docs/_includes/img.html @@ -0,0 +1,30 @@ +{% if 'http' in url %} +{% set img_url = url %} +{% else %} +{% set img_url = config.assets_dir + '/images/' + url %} +{% endif %} + +
+ {% if id %} + + + {% elif img_url %} + + {% endif %} + {{ description }} + {% if id or img_url %} + + {% endif %} + + {% if id %} + + + {{ description }} + + {% endif %} +
diff --git a/docs/_includes/overrides/404.html b/docs/_includes/overrides/404.html new file mode 100644 index 000000000000..e0eae12040e6 --- /dev/null +++ b/docs/_includes/overrides/404.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block tabs %} +{{ super() }} + +{% endblock tabs %} + +{% block site_nav %} +{% endblock site_nav %} + +{% block content %} + + +
+
+
+

+ + Page not found +

+
+
+ +{% endblock content %} diff --git a/docs/_includes/overrides/home.html b/docs/_includes/overrides/home.html new file mode 100644 index 000000000000..48b4a89f23cb --- /dev/null +++ b/docs/_includes/overrides/home.html @@ -0,0 +1,47 @@ +{% extends "main.html" %} + +{% block tabs %} +{{ super() }} + +{% endblock tabs %} + +{% block content %} + +{{ page.content }} + + + + +
+ +
+ +{% endblock content %} diff --git a/docs/_includes/overrides/main.html b/docs/_includes/overrides/main.html new file mode 100644 index 000000000000..576314115d57 --- /dev/null +++ b/docs/_includes/overrides/main.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} + +{% block footer %} +{% include "partials/version_banner.html" %} +{% include "partials/footer.html" %} +{% endblock footer %} diff --git a/docs/_includes/overrides/partials/outdated.html b/docs/_includes/overrides/partials/outdated.html new file mode 100644 index 000000000000..542e7fa4ab4a --- /dev/null +++ b/docs/_includes/overrides/partials/outdated.html @@ -0,0 +1 @@ + diff --git a/docs/_includes/overrides/partials/version_banner.html b/docs/_includes/overrides/partials/version_banner.html new file mode 100644 index 000000000000..0db2535c1697 --- /dev/null +++ b/docs/_includes/overrides/partials/version_banner.html @@ -0,0 +1,15 @@ +{% if False and config.version_banner %} + +{% endif %} diff --git a/docs/_includes/release_table.html b/docs/_includes/release_table.html new file mode 100644 index 000000000000..33dea37fa594 --- /dev/null +++ b/docs/_includes/release_table.html @@ -0,0 +1,40 @@ + +
+
+ + + + + + + + + + + +{% for release in config.releases %} + + + + + + +{% endfor %} + +
Release Date GitHub Docker
+ {% if release.local_path %} + {{ release.tag_name }} + {% else %} + {{ release.tag_name }} + {% endif %} + {{ release.date }} + {{ release.tag_name }} + + {% if release.docker %} + inventree/inventree:{{ release.tag_name }} + {% else %} + Not available for this release + {% endif %} +
+
+
diff --git a/docs/_includes/splide_image.html b/docs/_includes/splide_image.html new file mode 100644 index 000000000000..48d5cbb2d4cf --- /dev/null +++ b/docs/_includes/splide_image.html @@ -0,0 +1,10 @@ + +{% if 'http' in src %} +{% set img_url = src %} +{% else %} +{% set img_url = config.assets_dir + '/images/' + src %} +{% endif %} + +
  • + Image +
  • diff --git a/docs/ci/check_mkdocs_config.py b/docs/ci/check_mkdocs_config.py new file mode 100644 index 000000000000..93a3afe0c802 --- /dev/null +++ b/docs/ci/check_mkdocs_config.py @@ -0,0 +1,16 @@ +"""Check mkdocs.yml config file for errors.""" + +import os + +import yaml + +here = os.path.dirname(__file__) + +tld = os.path.abspath(os.path.join(here, '..')) + +config_file = os.path.join(tld, 'mkdocs.yml') + +with open(config_file, 'r') as f: + data = yaml.load(f, yaml.BaseLoader) + + assert data['strict'] == 'true' diff --git a/src/backend/InvenTree/importer/migrations/__init__.py b/docs/docs/__init__.py similarity index 100% rename from src/backend/InvenTree/importer/migrations/__init__.py rename to docs/docs/__init__.py diff --git a/docs/docs/api/api.md b/docs/docs/api/api.md new file mode 100644 index 000000000000..7f2c9328d007 --- /dev/null +++ b/docs/docs/api/api.md @@ -0,0 +1,121 @@ +--- +title: InvenTree API +--- + +## InvenTree API + +InvenTree provides a powerful REST API for interacting with inventory data on the server. Low-level data access and manipulation is available, with integrated user authentication and data validation. + +!!! info "Django REST Framework" + The InvenTree API is based on the powerful and flexible [Django REST Framework](https://www.django-rest-framework.org/). + +## Documentation + +The API is self-documenting, and the documentation is provided alongside any InvenTree installation instance. If (for example) you have an InvenTree instance running at `http://127.0.0.1:8000` then the API documentation is available at `http://127.0.0.1:8000/api-doc/` + +{% with id="api_doc", url="api/api_doc.png", description="API documentation" %} +{% include 'img.html' %} +{% endwith %} + +### Schema Description + The API schema is also documented in the [API Schema](./schema.md) page. + +### Generating Schema File + +If you want to generate the API schema file yourself (for example to use with an external client, use the `invoke schema` command. Run with the `-help` command to see available options. + +``` +invoke schema -help +``` + +## Authentication + +Users must be authenticated to gain access to the InvenTree API. The API accepts either basic username:password authentication, or token authentication. Token authentication is recommended as it provides much faster API access. + +!!! warning "Permissions" + API access is restricted based on the permissions assigned to the user. + +### Basic Auth + +Users can authenticate against the API using basic authentication - specifically a valid combination of `username` and `password` credentials. + +### Tokens + +Each user is assigned an authentication token which can be used to access the API. This token is persistent for that user (unless invalidated by an administrator) and can be used across multiple sessions. + +!!! info "Token Administration" + User tokens can be created and/or invalidated via the Admin interface. + +### Requesting a Token + +If a user does not know their access token, it can be requested via the API interface itself, using a basic authentication request. + +To obtain a valid token, perform a GET request to `/api/user/token/`. No data are required, but a valid username / password combination must be supplied in the authentication headers. + +!!! info "Credentials" + Ensure that a valid username:password combination are supplied as basic authorization headers. + +Once a valid token is received from the server, subsequent API requests should be performed using that token. + +If the supplied user credentials are validated, the server will respond with: + +``` +HTTP_200_OK +{ + token: "usertokendatastring", +} +``` + +### Using a Token + +After reception of a valid authentication token, it can be subsequently used to perform token-based authentication. + +The token value sent to the server must be of the format `Token ` (without the `<` and `>` characters). + +**Example: Javascript** +```javascript +var token = "MY-TOKEN-VALUE-HERE"; + +$.ajax({ + url: "http://localhost:8080/api/part/", + type: 'GET', + headers: {"Authorization": `Token ${token}`} +}); +``` + +**Example: Python (Requests)** +```python +import requests + +token = 'MY-TOKEN-VALUE-HERE' +data = { ... } +headers = { + 'AUTHORIZATION': f'Token {token}' +} +response = request.get('http://localhost:8080/api/part/', data=data, headers=headers) +``` + +## Authorization + +### User Roles + +Users can only perform REST API actions which align with their assigned [role permissions](../settings/permissions.md#roles). +Once a user has *authenticated* via the API, a list of the available roles can be retrieved from: + +`/api/user/roles/` + +For example, when accessing the API from a *superuser* account: + +{% with id="api_roles", url="api/api_roles.png", description="API superuser roles" %} +{% include 'img.html' %} +{% endwith %} + +Or, when accessing the API from an account which has read-only permissions: + +{% with id="api_roles_2", url="api/api_roles_2.png", description="API user roles" %} +{% include 'img.html' %} +{% endwith %} + +### Permission Denied + +If an API action outside of the user's role(s) is attempted, the server will respond with a 403 permission error message. diff --git a/docs/docs/api/browse.md b/docs/docs/api/browse.md new file mode 100644 index 000000000000..f1c04a611885 --- /dev/null +++ b/docs/docs/api/browse.md @@ -0,0 +1,37 @@ +--- +title: Interactive API +--- + +## Interactive API + +If the server is running in [Debug Mode](../start/intro.md#debug-mode) then an interactive version of the API is available using a browser. + +!!! info "Debug Mode" + This interactive API is only available when running the server in debug mode + +!!! warning "Slow Traffic Ahead" + The interactive API is *significantly* slower than using the normal JSON format. It is provided only for development and testing. + +### List View + +Various list endpoints can be displayed as shown below: + +{% with id="api_browse", url="api/api_browse.png", description="List API" %} +{% include 'img.html' %} +{% endwith %} + +### Filtering + +List views can be filtered interactively: + +{% with id="api_filter", url="api/api_filters.png", description="Filter API" %} +{% include 'img.html' %} +{% endwith %} + +### Detail View + +Detail view endpoints can also be displayed: + +{% with id="api_detail", url="api/api_detail.png", description="Detail API" %} +{% include 'img.html' %} +{% endwith %} diff --git a/docs/docs/api/bulk_delete.md b/docs/docs/api/bulk_delete.md new file mode 100644 index 000000000000..9c7f9c6f01a7 --- /dev/null +++ b/docs/docs/api/bulk_delete.md @@ -0,0 +1,44 @@ +--- +title: Bulk Deletion +--- + +## Bulk Deletion + +While deleting items individually via the API is supported, it can prove inefficient (time consuming) when multiple items are to be deleted sequentially. + +For example, if the user wishes to delete a large number items (such as lines from a [Bill of Materials](../build/bom.md)), these items are deleted sequentially, with each `DELETE` separate request requiring network transfer, database access, cleanup, etc. + +A much more efficient approach is to allow for "bulk deletion" of multiple database items in a single transaction. This means that only one network request is required, and only a single database access request. + +So, InvenTree supports a custom "bulk deletion" endpoint which is available for some database models. + +## Item Filtering + +In a "regular" `DELETE` action, the pk (primary key) of the target object is provided, to designate which object is going to be removed from the database: + +`DELETE /api/part/10/` + +However this approach does not work if we wish to delete multiple items. To determine which items are to be deleted, additional data can be added to the query (as you would do with a normal `POST` request, for example). + +### Primary Key Values + +The request can specify a list of individual pk (primary key) values to delete, using the `items` variable: + +```json +{ + "items": [1, 10, 50, 99] +} +``` + +### Filters + +The request can also specify a list of filters to be applied to the database query. Any items which match the filters will be deleted. Here, use the `filters` variable: + +``` +{ + "filters": { + "active": False, + "category": 7. + } +} +``` diff --git a/docs/docs/api/download.md b/docs/docs/api/download.md new file mode 100644 index 000000000000..2dfa408eb5a7 --- /dev/null +++ b/docs/docs/api/download.md @@ -0,0 +1,22 @@ +--- +title: Data Download +--- + +## Data Download + +Some API endpoints provide a *download* function, whereby the data presented at the API endpoint can be downloaded as a tabulated file. + +To export API data to a file, add the `&export=` modifier to the query. The following file formats are supported: + +| File Format | Modifier | +| --- | --- | +| csv | `&format=csv` | +| tsv | `&format=tsv` | +| xls | `&format=xls` | +| xlsx | `&format=xlsx` | + +### Query Filters + +Any other query filters used in the API request are also observed when downloading the data. For example, to download a list of all stock items in a given location: + +`/api/stock/?format=csv&location=10` diff --git a/docs/docs/api/metadata.md b/docs/docs/api/metadata.md new file mode 100644 index 000000000000..48a0dca5d7ba --- /dev/null +++ b/docs/docs/api/metadata.md @@ -0,0 +1,91 @@ +--- +title: Model Metadata +--- + +## Model Metadata + +The API is *self describing* in that it provides metadata about the various fields available at any given endpoint. External applications (such as the [python interface](../api/python/python.md)) can introspect the API to determine information about the model fields. + +!!! tip "API Forms" + The various forms implemented in the InvenTree web interface make heavy use of this metadata feature + +### Requesting Metadata + +To request metadata about a particular API endpoint, simply perform an `OPTIONS` method request against the API URL. + +For example, to view the metadata available for creating a new [Part Category](../part/part.md#part-category), an `OPTIONS` request to `/api/part/category/` yields: + +{% with id="api_cat_options", url="api/api_category_options.png", description="Part category options" %} +{% include 'img.html' %} +{% endwith %} + +You can see here a detailed list of the various fields which are available for this API endpoint. + +## Metadata Information + +The `OPTIONS` endpoint provides the following information: + +| Entry | Description | +| --- | --- | +| name | The human-readable name of the API endpoint | +| description | Descriptive detail for the endpoint, extracted from the python docstring | +| actions | Contains the available HTTP actions and field information (see below) | + +Specific details are provided on the available attributes of each field: + +{% with id="api_fields", url="api/api_metadata_fields.png", description="Metadata fields" %} +{% include 'img.html' %} +{% endwith %} + +### Field Types + +Supported field types are: + +| Field Type | Description | +| --- | --- | +| string | Text data | +| boolean | true / false value | +| integer | Integer numbers | +| float | Floating point numbers | +| related field | Primary key value for a foreign-key relationship in the database | + +### Field Attributes + +Each named field provides information on available attributes: + +| Attribute | Description | +| --- | --- | +| type | Defines the [field type](#field-types) | +| default | The default value for this field. Will be assumed if no value is supplied | +| required | Boolean value, whether this field must be supplied | +| read_only | Boolean value, whether this field is writeable | +| label | Human readable descriptive label for this field. | +| help_text | Long form descriptor for this field. | +| min_value | Minimum allowed value (for numeric fields) | +| max_value | Maximum allowed value (for numeric fields) | +| max_length | Maximum allowed length (for text fields) | +| model | Name of the database model, if this field represents a foreign-key relationship | +| api_url | API url for the related model, if this field represents a foreign-key relationship | +| filters | API filters for the field, if this field represents a foreign-key relationship | + +!!! tip "Field Name" + The field name is the *key* used to define the field itself + +!!! info "Available Attributes" + Some attributes may not be made available for a particular field + + + +## Translation + +Field *label* and *help text* values are localized using the [community contributed translations](https://crowdin.com/project/inventree). The required locale information is determined from the API request itself, meaning that the translated values are provided automatically. + +For example, the same forms (in the web interface) are served via identical API requests, with the locale information determined "on the fly": + +{% with id="api_english", url="api/api_english.png", description="API forms (english)" %} +{% include 'img.html' %} +{% endwith %} + +{% with id="api_german", url="api/api_german.png", description="API forms (german)" %} +{% include 'img.html' %} +{% endwith %} diff --git a/docs/docs/api/python/currency.md b/docs/docs/api/python/currency.md new file mode 100644 index 000000000000..f609190b8d9c --- /dev/null +++ b/docs/docs/api/python/currency.md @@ -0,0 +1,56 @@ +--- +title: Python Currency Support +--- + +## Currency Support + +InvenTree provides native support for multiple currencies, which can mean that data require conversion between these currencies, at defined exchange rates. + +The InvenTree server maintains a set of exchange rates, which are updated periodically. These exchange rates are available via the [InvenTree API](../api.md), and can be used by the Python bindings. + +### CurrencyManager Class + +The Python bindings provide the `CurrencyManager` class, which takes care of retrieving currency exchange data from the server. This class can be instantiated as shown below: + +```python +from inventree.currency import CurrencyManager + +# The manager class must be passed a valid InvenTreeAPI instance +manager = CurrencyManager(api) + +# Access the 'base currency' data +base_currency = manager.getBaseCurrency() + +# Access the 'exchange rate' data +rates = manager.getExchangeRates() +``` + +### Currency Conversion + +Currency conversion is performed by passing the value of currency, as well as the *source* and *target* currency codes to the currency manager. + +!!! warning "Missing Currency Data" + The currency conversion only works if the manager class has valid information on both the *source* and *target* currency exchange rates! + +```python +from inventree.currency import CurrencyManager + +manager = CurrencyManager(api) + +# Convert from AUD to CAD +cad = manager.convertCurrency(12.54, 'AUD', 'CAD') + +# Convert from NZD to USD +usd = manager.convertCurrency(99.99, 'NZD', 'USD') +``` + +### Exchange Rate Update + +To request a manual update of currency data (from the server), run the following command: + +```python +from inventree.currency import CurrencyManager + +manager = CurrencyManager(api) +manager.refreshExchangeRates() +``` diff --git a/docs/docs/api/python/examples.md b/docs/docs/api/python/examples.md new file mode 100644 index 000000000000..4c2590550297 --- /dev/null +++ b/docs/docs/api/python/examples.md @@ -0,0 +1,256 @@ +--- +title: Python Interface Examples +--- + +## Examples + +Following is a *non-exhaustive* list of examples of the capabilities provided by the python library. For a complete look at what it can do, [read the source code](https://github.com/inventree/inventree-python)! + +### Creating New Items + +Use the `create` method to add new items to the database: + +```python +from inventree.part import Part, PartCategory +from inventree.stock import StockItem + +## Create a new PartCategory object, +## underneath the existing category with pk 7. Leave the parent empty for a top level category +furniture = PartCategory.create(api, { + 'name': 'Furniture', + 'description': 'Chairs, tables, etc', + 'parent': 7, +}) + +## Create a new Part +## Use the pk (primary-key) of the newly created category +couch = Part.create(api, { + 'name': 'Couch', + 'description': 'Long thing for sitting on', + 'category': furniture.pk, + 'active': True, + 'virtual': False, + ## Note - You do not have to fill out *all* fields +}) +``` + +### Updating Attributes + +Most model fields which are exposed via the API can be directly edited using the python interface, by simply calling the `save()` method as shown below: + +```python +from inventree.api import InvenTreeAPI +from inventree.part import Part + +api = InvenTreeAPI(host='http://localhost:8000', username='admin', password='inventree') + +# Retrieve part instance with primary-key of 1 +part = Part(api, pk=1) + +# Update specified part parameters +part.save(data={ + "description": "New part description", + "minimum_stock": 250, +}) + +# Reload data from remote server +part.reload() + +# Display updated data +print("Part Name:", part.name) +print("Description:", part.description) +print("Minimum stock:", part.minimum_stock) +``` + +!!! info "Read Only Fields" + Note that some fields are read-only and cannot be edited via the API + +### Adding Parameters + +Each [part](../../part/part.md) can have multiple [parameters](../../part/parameter.md). For the example of the sofa (above) *length* and *weight* make sense. Each parameter has a parameter template that combines the parameter name with a unit. So we first have to create the parameter templates and afterwards add the parameter values to the sofa. + +```python +from inventree.part import Parameter +from inventree.part import ParameterTemplate + +LengthTemplate = ParameterTemplate.create(api, { 'name' : 'Length', 'units' : 'Meters' }) +WeightTemplate = ParameterTemplate.create(api, { 'name' : 'Weight', 'units' : 'kg' }) + +ParameterLength = Parameter.create(api, { 'part': couch.pk, 'template': LengthTemplate.pk, 'data' : 2 }) +ParameterWeight = Parameter.create(api, { 'part': couch.pk, 'template': WeightTemplate.pk, 'data' : 60 }) +``` +These parameter templates need to be defined only once and can be used for all other parts. Lets finally add a picture. + +```python +couch.uploadImage('my_nice_couch.jpg') +``` + +### Adding Location Data + +If we have several sofas on stock we need to know there we have stored them. So let’s add stock locations to the part. Stock locations can be organized in a hierarchical manner e.g. boxes in shelves in aisles in rooms. So each location can have a parent. Let’s assume we have 10 sofas in box 12 and 3 sofas in box 13 located in shelve 43 aisle 3. First we have to create the locations, afterwards we can put the sofas inside. + +```python + +from inventree.stock import StockLocation +from inventree.stock import StockItem + +... + +## Create the stock locations. Leave the parent empty for top level hierarchy +Aisle3 = StockLocation.create(api, {'name':'Aisle 3','description':'Aisle for sofas','parent':''}) +Shelve43 = StockLocation.create(api, {'name':'Shelve 43','description':'Shelve for sofas','parent':Aisle3.pk}) +Box12 = StockLocation.create(api, {'name':'Box 12','description':'green box','parent':Shelve43.pk}) +Box13 = StockLocation.create(api, {'name':'Box 13','description':'red box','parent':Shelve43.pk}) + +## Now fill them with items +Id1 = StockItem.create(api, { 'part': sofa.pk, 'quantity': 10, 'notes': 'new ones', 'location': Box12.pk, ‘status’:10 }) +Id2 = StockItem.create(api, { 'part': sofa.pk, 'quantity': 3, 'notes': 'old ones', 'location': Box13.pk, ‘status’:55 }) + +``` +Please recognize the different status flags. 10 means OK, 55 means damaged. We have the following choices: + +* 10: OK +* 50: Attention needed +* 55: Damaged +* 60: Destroyed +* 65: Rejected +* 70: Lost +* 85: Returned + +### Adding Manufacturers and Supplier + +We can add manufacturers and suppliers to parts. We first need to create two companies, ACME (manufacturer) and X-Store (supplier). + +```python +from inventree.company import Company + +... + +acme = Company.create(api, { + 'name' : 'ACME', + 'description':'A Company that makes everything', + 'website':'https://www.acme.bla', + 'is_customer':0, + 'is_manufacturer':1, + 'is_supplier':0 +}) +xstore = Company.create(api, { + 'name' : 'X-Store', + 'description':'A really cool online store', + 'website':'https://www.xst.bla', + 'is_customer':0, + 'is_manufacturer':0, + 'is_supplier':1 +}) +``` + +Please recognize the different flag settings for is_supplier and is_manufacturer. Now lets add those to our couch: + +```python +from inventree.company import SupplierPart + +... + +SupplierPart.create(api,{ + 'part':couch.pk, + 'supplier':xstore.pk, + 'SKU':'some_code', + 'link':'https://www.xst.bla/products/stock?...' +}) +ManufacturerPart.create(api,{ + 'part':couch.pk, + 'manufacturer':acme.pk, + 'MPN':'Part code of the manufacturer' +}) +``` + +### Stock Adjustments + +Various stock adjustment actions can be performed as follows: + +```python +from inventree.stock import StockItem, StockLocation + +# Fetch item from the server +item = StockItem(api, pk=99) + +# Count stock +item.countStock(500) + +# Add stock to the item +item.addStock(15) + +# Remove stock from the item +item.removeStock(25) + +# Transfer partial quantity to another location +loc = StockLocation(api, pk=12) +item.transferStock(loc, quantity=50) +``` + +### Delete a Part + +To delete a [Part instance](../../part/part.md), first in needs to be marked as *inactive* (otherwise it will throw an error): + +```python +from inventree.part import Part + +part = Part(api, pk=10) +part.save(data={'active': False}) +part.delete() +``` + +### Bulk Delete + +Some database models support bulk delete operations, where multiple database entries can be deleted in a single API query. + +```python +from inventree.stock import StockItem + +# Delete all items in a particular category +StockItem.bulkDelete(api, filters={'category': 3}) +``` + +### Upload Attachments + +We have the possibility to upload attachments against a particular Part. We can use pdf for documents but also other files like 3D drawings or pictures. To do so we add the following commands: + +```python +from inventree.part import PartAttachment + +# The ID of the Part to attach the files to +part_id = 47 + +PartAttachment.upload(api, part_id, 'manual.pdf', comment='Datasheet') +PartAttachment.upload(api, part_id, 'sofa.dxf', comment='Drawing') +``` + +Alternatively, we can upload an attachment directly against the `Part` instance: + +```python +from inventree.part import Part + +part = Part(api, pk=47) + +part.uploadAttachment('data.txt', comment='A data file') +``` + +### Adding a Bill of Materials + +Imagine your sofa is made from three parts: one seat, one back and two arm rests. To enable this +the assembly flag of the sofa part has to be set. You need to have all three parts in you InvenTree +database. + +A BOM (Bill of Materials) contains BOM items. These are separate records in the database that refer to the master assembly (the *part*) +and the component which is being used (the *sub_part*). + +BOM Items can be created using the Python API interface as follows: + +```python +BomItem.create(api, data={'part':sofa_id, 'sub_part':back_id, 'quantity':1, 'reference':'p1'}) +BomItem.create(api, data={'part':sofa_id, 'sub_part':seat_id, 'quantity':1, 'reference':'p2'}) +BomItem.create(api, data={'part':sofa_id, 'sub_part':armrest_id, 'quantity':2, 'reference':'p3, p4'}) +``` + +Now you have three BOM items that make the BOM for the sofa. The `id` values are the primary keys of the +specified parts. The reference can be any string that names the instances. diff --git a/docs/docs/api/python/python.md b/docs/docs/api/python/python.md new file mode 100644 index 000000000000..a1e0d6802e1d --- /dev/null +++ b/docs/docs/api/python/python.md @@ -0,0 +1,167 @@ +--- +title: Python Interface +--- + +## Python Module + +A [Python module](https://github.com/inventree/inventree-python) is provided for rapid development of third party scripts or applications using the REST API. The python module handles authentication and API transactions, providing an extremely clean interface for interacting with and manipulating database data. + +### Features + +- Automatic authentication management using token-based authentication +- Pythonic data access +- Native file uploads +- Powerful functions for accessing related model data + +### Installation + +The inventree python interface can be easily installed via the [PIP package manager](https://pypi.org/project/inventree/): + +``` +pip3 install inventree +``` + +!!! tip "Upgrading" + To upgrade to the latest version, run `pip install --upgrade inventree` + +Alternatively, it can downloaded and installed from source, from [GitHub](https://github.com/inventree/inventree-python). + +### Authentication + +Authentication against an InvenTree server is simple: + +#### Basic Auth + +Connect using your username/password as follows: + +```python +from inventree.api import InvenTreeAPI + +SERVER_ADDRESS = 'http://127.0.0.1:8000' +MY_USERNAME = 'not_my_real_username' +MY_PASSWORD = 'not_my_real_password' + +api = InvenTreeAPI(SERVER_ADDRESS, username=MY_USERNAME, password=MY_PASSWORD) +``` + +#### Token Auth + +Alternatively, if you already have an access token: + +```python +api = InvenTreeAPI(SERVER_ADDRESS, token=MY_TOKEN) +``` + +#### Environment Variables + +Authentication variables can also be set using environment variables: + +- `INVENTREE_API_HOST` +- `INVENTREE_API_USERNAME` +- `INVENTREE_API_PASSWORD` +- `INVENTREE_API_TOKEN` + +And simply connect as follows: + +```python +api = InvenTreeAPI() +``` + +### Retrieving Data + +Once a connection is established to the InvenTree server, querying individual items is simple. + +#### Single Item + +If the primary-key of an object is already known, retrieving it from the database is performed as follows: + +```python +from inventree.part import PartCategory + +category = PartCategory(api, 10) +``` + +#### Multiple Items + +Database items can be queried by using the `list` method for the given class. Note that arbitrary filter parameters can be applied (as specified by the [InvenTree API](../api.md)) to filter the returned results. + +```python +from inventree.part import Part +from inventree.stock import StockItem + +parts = Part.list(api, category=10, assembly=True) +items = StockItem.list(api, location=4, part=24) +``` + +The `items` variable above provides a list of `StockItem` objects. + +#### Filtering by parent + +In tree based models the child items could be filtered by using the parent keyword: + +```python +from inventree.part import PartCategory + +child_categories = PartCategory.list(api, parent=10) +``` + +The top level items can can be queried by passing empty string as a parent filter: + +```python +from inventree.part import PartCategory + +parent_categories = PartCategory.list(api, parent='') +``` + +### Item Attributes + +The available model attributes are determined by introspecting [API metadata](../metadata.md). To view the fields (attributes) available for a given database model type within the python interface, use the `fieldNames` and `fieldInfo` methods, as below: + +```python +from inventree.api import InvenTreeAPI +from inventree.part import Part + +api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") + +fields = Part.fieldNames(api) + +for field in Part.fieldNames(api): + print(field, '->', Part.fieldInfo(field, api)) +``` + +``` +active -> {'type': 'boolean', 'required': True, 'read_only': False, 'label': 'Active', 'help_text': 'Is this part active?', 'default': True, 'max_length': None} +allocated_to_build_orders -> {'type': 'float', 'required': True, 'read_only': True, 'label': 'Allocated to build orders'} +allocated_to_sales_orders -> {'type': 'float', 'required': True, 'read_only': True, 'label': 'Allocated to sales orders'} +assembly -> {'type': 'boolean', 'required': True, 'read_only': False, 'label': 'Assembly', 'help_text': 'Can this part be built from other parts?', 'default': False, 'max_length': None} +category -> {'type': 'related field', 'required': True, 'read_only': False, 'label': 'Category', 'model': 'partcategory', 'api_url': '/api/part/category/', 'filters': {}, 'help_text': 'Part category', 'max_length': None} +component -> {'type': 'boolean', 'required': True, 'read_only': False, 'label': 'Component', 'help_text': 'Can this part be used to build other parts?', 'default': True, 'max_length': None} +default_expiry -> {'type': 'integer', 'required': True, 'read_only': False, 'label': 'Default Expiry', 'help_text': 'Expiry time (in days) for stock items of this part', 'min_value': 0, 'max_value': 2147483647, 'default': 0, 'max_length': None} +... +variant_stock -> {'type': 'float', 'required': True, 'read_only': True, 'label': 'Variant stock'} +``` + + +### Item Methods + +Once an object has been retrieved from the database, its related objects can be returned with the provided helper methods: + +```python +part = Part(api, 25) +stock_items = part.getStockItems() +``` + +Some classes also have helper functions for performing certain actions, such as uploading file attachments or test results: + +```python +stock_item = StockItem(api, 1001) +stock_item.uploadTestResult("Firmware", True, value="0x12345678", attachment="device_firmware.bin") +``` + +#### Discovering Methods + +You can determine the available methods by either [reading the source code](https://github.com/inventree/inventree-python) or using the `dir()` function in an interactive terminal. + +### Further Reading + +The [InvenTree Python Interface](https://github.com/inventree/inventree-python) is open source, and well documented. The best way to learn is to read through the source code and try for yourself! diff --git a/docs/docs/api/schema.md b/docs/docs/api/schema.md new file mode 100644 index 000000000000..441e977e2e9a --- /dev/null +++ b/docs/docs/api/schema.md @@ -0,0 +1,40 @@ +--- +title: InvenTree API Schema +--- + +The InvenTree API is implemented using the [Django REST framework](https://www.django-rest-framework.org). +The API schema as documented below is generated using the [drf-spectactular](https://github.com/tfranzel/drf-spectacular/) extension. + +## API Version + +This documentation is for API version: `171` + +!!! 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/). + +## API Schema File + +The API schema file is available for download, and can be used for generating client libraries, or for testing API endpoints. + +## API Schema Documentation + +API schema documentation is split into the following categories: + +| Category | Description | +| --- | --- | +| [Authorization and Authentication](./schema/auth.md) | Authorization and Authentication | +| [Background Task Management](./schema/background-task.md) | Background Task Management | +| [Barcode Scanning](./schema/barcode.md) | Barcode Scanning | +| [Bill of Materials](./schema/bom.md) | Bill of Materials | +| [Build Order Management](./schema/build.md) | Build Order Management | +| [Company Management](./schema/company.md) | Company Management | +| [Label Printing](./schema/label.md) | Label Printing | +| [External Machine Management](./schema/machine.md) | External Machine Management | +| [External Order Management](./schema/order.md) | External Order Management | +| [Parts and Part Categories](./schema/part.md) | Parts and Part Categories | +| [Plugin Functionality](./schema/plugins.md) | Plugin Functionality | +| [Report Generation](./schema/report.md) | Report Generation | +| [Settings Management](./schema/settings.md) | Settings Management | +| [Stock and Stock Locations](./schema/stock.md) | Stock and Stock Locations | +| [User Management](./schema/user.md) | User Management | +| [General](./schema/general.md) | General API endpoints | diff --git a/docs/docs/api/schema/auth.md b/docs/docs/api/schema/auth.md new file mode 100644 index 000000000000..62c8b50103ed --- /dev/null +++ b/docs/docs/api/schema/auth.md @@ -0,0 +1,7 @@ +--- +title: Authorization and Authentication +--- + +The *Authorization and Authentication* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/auth.yml)] diff --git a/docs/docs/api/schema/background-task.md b/docs/docs/api/schema/background-task.md new file mode 100644 index 000000000000..b1d5ad0b9269 --- /dev/null +++ b/docs/docs/api/schema/background-task.md @@ -0,0 +1,7 @@ +--- +title: Background Task Management +--- + +The *Background Task Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/background-task.yml)] diff --git a/docs/docs/api/schema/barcode.md b/docs/docs/api/schema/barcode.md new file mode 100644 index 000000000000..c0f5cab2bf2a --- /dev/null +++ b/docs/docs/api/schema/barcode.md @@ -0,0 +1,7 @@ +--- +title: Barcode Scanning +--- + +The *Barcode Scanning* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/barcode.yml)] diff --git a/docs/docs/api/schema/bom.md b/docs/docs/api/schema/bom.md new file mode 100644 index 000000000000..cdfd1ff9c2ac --- /dev/null +++ b/docs/docs/api/schema/bom.md @@ -0,0 +1,7 @@ +--- +title: Bill of Materials +--- + +The *Bill of Materials* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/bom.yml)] diff --git a/docs/docs/api/schema/build.md b/docs/docs/api/schema/build.md new file mode 100644 index 000000000000..3de0e521c604 --- /dev/null +++ b/docs/docs/api/schema/build.md @@ -0,0 +1,7 @@ +--- +title: Build Order Management +--- + +The *Build Order Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/build.yml)] diff --git a/docs/docs/api/schema/company.md b/docs/docs/api/schema/company.md new file mode 100644 index 000000000000..924d899ad42d --- /dev/null +++ b/docs/docs/api/schema/company.md @@ -0,0 +1,7 @@ +--- +title: Company Management +--- + +The *Company Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/company.yml)] diff --git a/docs/docs/api/schema/general.md b/docs/docs/api/schema/general.md new file mode 100644 index 000000000000..5da17b815ddc --- /dev/null +++ b/docs/docs/api/schema/general.md @@ -0,0 +1,7 @@ +--- +title: General API Endpoints +--- + +The *General API Endpoints* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/general.yml)] diff --git a/docs/docs/api/schema/label.md b/docs/docs/api/schema/label.md new file mode 100644 index 000000000000..d4bc47e57c1c --- /dev/null +++ b/docs/docs/api/schema/label.md @@ -0,0 +1,7 @@ +--- +title: Label Printing +--- + +The *Label Printing* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/label.yml)] diff --git a/docs/docs/api/schema/machine.md b/docs/docs/api/schema/machine.md new file mode 100644 index 000000000000..2fbadd41e61e --- /dev/null +++ b/docs/docs/api/schema/machine.md @@ -0,0 +1,7 @@ +--- +title: External Machine Management +--- + +The *External Machine Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/machine.yml)] diff --git a/docs/docs/api/schema/order.md b/docs/docs/api/schema/order.md new file mode 100644 index 000000000000..7f6c8fdfd776 --- /dev/null +++ b/docs/docs/api/schema/order.md @@ -0,0 +1,7 @@ +--- +title: External Order Management +--- + +The *External Order Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/order.yml)] diff --git a/docs/docs/api/schema/part.md b/docs/docs/api/schema/part.md new file mode 100644 index 000000000000..67c73eb0fb4a --- /dev/null +++ b/docs/docs/api/schema/part.md @@ -0,0 +1,7 @@ +--- +title: Parts and Part Categories +--- + +The *Parts and Part Categories* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/part.yml)] diff --git a/docs/docs/api/schema/plugins.md b/docs/docs/api/schema/plugins.md new file mode 100644 index 000000000000..ee0263cffafe --- /dev/null +++ b/docs/docs/api/schema/plugins.md @@ -0,0 +1,7 @@ +--- +title: Plugin Functionality +--- + +The *Plugin Functionality* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/plugins.yml)] diff --git a/docs/docs/api/schema/report.md b/docs/docs/api/schema/report.md new file mode 100644 index 000000000000..dfad6d74befe --- /dev/null +++ b/docs/docs/api/schema/report.md @@ -0,0 +1,7 @@ +--- +title: Report Generation +--- + +The *Report Generation* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/report.yml)] diff --git a/docs/docs/api/schema/settings.md b/docs/docs/api/schema/settings.md new file mode 100644 index 000000000000..4a6d4f4337ea --- /dev/null +++ b/docs/docs/api/schema/settings.md @@ -0,0 +1,7 @@ +--- +title: Settings Management +--- + +The *Settings Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/settings.yml)] diff --git a/docs/docs/api/schema/stock.md b/docs/docs/api/schema/stock.md new file mode 100644 index 000000000000..7b961e4b5b88 --- /dev/null +++ b/docs/docs/api/schema/stock.md @@ -0,0 +1,7 @@ +--- +title: Stock and Stock Locations +--- + +The *Stock and Stock Locations* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/stock.yml)] diff --git a/docs/docs/api/schema/user.md b/docs/docs/api/schema/user.md new file mode 100644 index 000000000000..e0ebba2770d0 --- /dev/null +++ b/docs/docs/api/schema/user.md @@ -0,0 +1,7 @@ +--- +title: User Management +--- + +The *User Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/user.yml)] diff --git a/docs/docs/app/app.md b/docs/docs/app/app.md new file mode 100644 index 000000000000..749395298ca1 --- /dev/null +++ b/docs/docs/app/app.md @@ -0,0 +1,33 @@ +--- +title: InvenTree Mobile App +--- + +{% with directory="appgallery", per_page=2 %} +{% include "carousel.html" %} +{% endwith %} + +----- + +The InvenTree Mobile App brings stock control to your pocket. Integrating seamlessly with the [InvenTree API](../api/api.md), the app provides immediate access to inventory data without requiring physical access to a computer. + +Native barcode support provides a multitude of context-sensitive stock control actions, allowing streamlined inventory management at your fingertips. The app has been optimized for speed, providing instant access to stock knowledge and handy on-site functionality. + +## Features + +- View and edit part and stock information with a blazingly fast interface +- Perform stock control actions on the go +- Barcode integrations simply stock operations +- Receive purchase orders and check in stock items +- And many more! + +## Download + +The InvenTree app can be downloaded from either the Android or Apple app stores, or accessed via the links below: + +### Android + + [Android Play Store](https://play.google.com/store/apps/details?id=inventree.inventree_app). + +### iOS + + [Apple App Store](https://apps.apple.com/au/app/inventree/id1581731101#?platform=iphone) diff --git a/docs/docs/app/barcode.md b/docs/docs/app/barcode.md new file mode 100644 index 000000000000..98a6c60c3600 --- /dev/null +++ b/docs/docs/app/barcode.md @@ -0,0 +1,126 @@ +--- +title: App Barcode Support +--- + +## Barcode Support + +One of the key elements of functionality provided by the InvenTree app is the native support for context-sensitive barcode scanning. + +Barcode integration allows extremely efficient stock control, for information lookup and also performing various actions. + +### Supported Codes + +The following code types are known to be supported + +**1D Codes** + +- Code-39 +- Code-93 +- Code-128 +- ITF + +**2D Codes** + +- QR Code +- Data Matrix +- Aztec + +## Barcode Input Methods + +Barcodes can be scanned using the following methods: + +### Camera Input + +The camera input method allows you to scan barcodes using the device's internal camera. Both the forward and rear-facing cameras are supported. + +### Keyboard Input + +The keyboard wedge input method allows you to scan barcodes using any scanner which presents barcode data as keyboard input. This works with external bluetooth scanners, and also provides support for integrated barcode scanner devices which run Android natively. + +Note that if using keyboard wedge input mode, the scanner must be configured to append an enter (`\n`) character to the end of the barcode data. + +## Barcode Actions + +The InvenTree app uses barcodes where possible to provide efficient stock control operations. Some pages in the app will provide context-sensitive barcode actions. These actions are available from the *Barcode Actions* menu, which is displayed in the bottom right corner of the screen. + +### Global Scan + +Available from the global bottom menu, the *Scan Barcode* provides quick access for scanning a barcode already associated with an InvenTree database item (such as a stock item or location). + +If a match is found, the app will navigate to the relevant page. + +### Stock Location Actions + +From the [Stock Location detail page](./stock.md#stock-location-view), multiple barcode actions may be available: + +{% with id="location-actions", url="app/barcode_stock_location_actions.png", maxheight="240px", description="Stock location barcode actions" %} +{% include 'img.html' %} +{% endwith %} + +#### Assign Barcode + +Assign a custom barcode to the selected location. Scanning a barcode (which is not already associated with an item in the database) will result in that barcode being assigned to the selected location. + +#### Transfer Stock Location + +Transfer the currently selected stock location into another location. Scanning a valid barcode associated with a stock location will result in the current location being *moved* to the scanned location. + +#### Scan Received Parts + +Receive incoming purchase order items into the selected location. Scanning a *new* barcode which is associated with an item in an incoming purchase order will receive the item into the selected location. + +#### Scan Items Into Location + +the *Scan Items Into Location* action allows you to scan items into the selected location. Scanning a valid barcode associated with a stock item (already in the database) will result in that item being transferred to the selected location. + +### Stock Item Actions + +From the [Stock Item detail page](./stock.md#stock-item-detail-view), the following barcode actions may be available: + +{% with id="item-actions", url="app/barcode_stock_item_actions.png", maxheight="240px", description="Stock item barcode actions" %} +{% include 'img.html' %} +{% endwith %} + +#### Assign Barcode + +Assign a custom barcode to the selected stock item. Scanning a barcode (which is not already associated with an item in the database) will result in that barcode being assigned to the selected stock item. + +#### Scan Into Location + +Scan the selected stock item into a stock location. Scanning a valid barcode associated with a stock location will result in the selected stock item being transferred to the scanned location. + +### Part Actions + +From the [Part detail page](./part.md#part-detail-view), the following barcode actions are available: + +{% with id="part-actions", url="app/barcode_part_actions.png", maxheight="240px", description="Part barcode actions" %} +{% include 'img.html' %} +{% endwith %} + +#### Assign Barcode + +Assign a custom barcode to the selected part. Scanning a barcode (which is not already associated with an item in the database) will result in that barcode being assigned to the selected part. + +### Purchase Order Actions + +From the [Purchase Order detail page](./po.md#purchase-order-detail) page, the following barcode actions are available: + +{% with id="po-actions", url="app/barcode_po_actions.png", maxheight="240px", description="Purchase order barcode actions" %} +{% include 'img.html' %} +{% endwith %} + +#### Scan Received Parts + +Receive incoming purchase order items against the selected purchase order. Scanning a *new* barcode which is associated with an item in an incoming purchase order will receive the item into stock. + +### Sales Order Actions + +The following barcode actions are available for [Sales Orders](./so.md): + +#### Add Line Item + +Add a new line item to the selected order by scanning a *Part* barcode + +#### Assign Stock + +Allocate stock items to the selected sales order by scanning a *StockItem* barcode diff --git a/docs/docs/app/connect.md b/docs/docs/app/connect.md new file mode 100644 index 000000000000..44db61a749b3 --- /dev/null +++ b/docs/docs/app/connect.md @@ -0,0 +1,68 @@ +--- +title: Connect to Server +--- + +## Connect to InvenTree + +Use of the InvenTree app assumes that you (the user) have access to an InvenTree server. + +When first running the app, no profile has been configured. The *server* icon in the top-right corner of the home screen is red, indicating that there is no connection to an InvenTree server: + +{% with id="no_server", url="app/initial.png", maxheight="240px", description="No server configured" %} +{% include "img.html" %} +{% endwith %} + +Press on the server icon to navigate to the server selection view: + +{% with id="no_profiles", url="app/no_profiles.png", maxheight="240px", description="No server configured" %} +{% include "img.html" %} +{% endwith %} + + +### Create Server + +!!! success "Server Profiles" + The app supports multiple server profiles, providing simple switching between different InvenTree servers and/or account profiles. + +Press the button in the bottom-right corner of the screen to create a new server profile. + +{% with id="add_profile", url="app/add_server_profile.png", maxheight="240px", description="Add server" %} +{% include 'img.html' %} +{% endwith %} + +Enter the required server details: + +| Parameter | Description | +| --- | --- | +| **Name** | Name for the server profile (can be any value, simply for reference) | +| **Server** | InvenTree server address (including port, if required). e.g. `http://inventree.myserver.com:8080` | +| **Username** | Your account username (case sensitive) | +| **Password** | Your account password (case sensitive) | + +### Connect to Server + +Once the server profile is created, you need to connect to the server. Simply short press on the server profile to connect. + +Alternatively, long press on the server profile to activate the context menu, then select *Connect to Server*. + +When the app successfully connects to the server, a success message is briefly displayed at the bottom of the screen. A green icon next to the server profile indicate that the profile is currently *selected* and also the connection was successful. + +{% with id="connected", url="app/connected.png", maxheight="240px", description="Connected to server" %} +{% include 'img.html' %} +{% endwith %} + +### Connection Failure + +If (for whatever reason) the app does not successfully connect to the InvenTree server, a failure message is displayed, and a red icon is displayed next to the server profile. + +{% with id="failed", url="app/unauthorized.png", maxheight="240px", description="Connection failure" %} +{% include 'img.html' %} +{% endwith %} + +In this case, the error message displayed at the bottom of the screen provides context as to why the app could not successfully connect to the server. + +To edit the server profile details, long press on the server profile, and select *Edit Server Profile*: + +{% with id="edit", url="app/edit_server.png", maxheight="240px", description="Edit server profile" %} +{% include 'img.html' %} +{% endwith %} diff --git a/docs/docs/app/issues.md b/docs/docs/app/issues.md new file mode 100644 index 000000000000..945a934f9392 --- /dev/null +++ b/docs/docs/app/issues.md @@ -0,0 +1,9 @@ +--- +title: App Suggestions / Issues +--- + +## Suggestions / Issues + +To suggest an improvement or new feature for the InvenTree app, or to report an issue, refer to the [InvenTree GitHub page](https://github.com/inventree/inventree-app/issues). + +General feedback on the app is also welcomed - if you have any ideas on how to make the app more functional or effective, please let us know! diff --git a/docs/docs/app/navigation.md b/docs/docs/app/navigation.md new file mode 100644 index 000000000000..c86e4a01d941 --- /dev/null +++ b/docs/docs/app/navigation.md @@ -0,0 +1,62 @@ +--- +title: App Navigation +--- + + +## Home Screen + +The app *home screen* provides quick-access buttons for stock view and actions: + +{% with id="home", url="app/home.png", maxheight="240px", description="Home screen" %} +{% include 'img.html' %} +{% endwith %} + +## Tab Display + +Some screens provide multiple tabbed views, which are displayed at the top of the screen: + +{% with id="global_nav", url="app/app_tabs.png", maxheight="240px", description="App tabs" %} +{% include 'img.html' %} +{% endwith %} + +Tabs can be navigated by pressing on the text of each tab, or by scrolling the screen left or right. + +## Global Actions + +The *Global Action* buttons are visible on most screens, displayed in the bottom left corner of the screen: + +{% with id="global_nav", url="app/app_global_navigation.png", maxheight="240px", description="Global navigation actions" %} +{% include 'img.html' %} +{% endwith %} + +### Open Drawer Menu + +The action opens the *Drawer Menu*, which is a quick-access menu for global navigation: + +{% with id="drawer", url="app/drawer.png", maxheight="240px", description="Open drawer menu" %} +{% include 'img.html' %} +{% endwith %} + +The *Drawer Menu* can be accessed in the following ways: + +- From the *Home Screen* select the *Drawer* icon in the top-left corner of the screen +- From any other screen, long-press the *Back* button in the top-left corner of the screen + +### Search + +The action opens the [Search](./search.md) screen + +### Scan Barcode + +The action opens the [barcode scan](./barcode.md#global-scan) window, which allows quick access to the barcode scanning functionality. + +## Context Actions + +Within a given view, certain context actions may be available. If there are contextual actions which can be performed, they are displayed in the bottom right corner: + +{% with id="drawer", url="app/context_actions.png", maxheight="240px", description="Context actions" %} +{% include 'img.html' %} +{% endwith %} + +!!! tip "Barcode Actions" + Available barcode actions are displayed in a separate context action menu diff --git a/docs/docs/app/part.md b/docs/docs/app/part.md new file mode 100644 index 000000000000..5d6d6a1d5c2e --- /dev/null +++ b/docs/docs/app/part.md @@ -0,0 +1,157 @@ +--- +title: Part Views +--- + +## Part Category View + +From the *home screen*, select *Parts* to open the top-level part category view. + +### Details Tab + +The *Details* tab shows information about the selected part category. In particular, it shows the name and description of the category, a link to the parent category (if available) and a list of subcategories. + +{% with id="part-category", url="part_category_detail.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Parent Category + +If the current category has a parent category (i.e. it is not a top-level category) then a link is provided to the parent category. Tap the *parent category* tile to navigate to the category detail page for the parent category. + +#### Subcategories + +If the current category has any subcategories, these are listed here. Select any of the subcategories to navigate to it. + +### Parts Tab + +The *Parts* tab displays all the parts available in this category. Tap a displayed part to navigate to the part detail view. + +{% with id="cat-parts", url="category_parts_tab.png" %} +{% include "app_img.html" %} +{% endwith %} + +The list of available parts can be filtered using the input box at the top of the screen: + +{% with id="cat-parts-filter", url="category_parts_filter.png" %} +{% include "app_img.html" %} +{% endwith %} + +### Context Actions + +The following *Context Actions* are available for the selected category: + +{% with id="cat-actions", url="category_actions_tab.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### New Category + +Create a new subcategory under the current category: + +{% with id="cat-new-cat", url="new_category.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +#### New Part + +Create a new part within the current category: + +{% with id="cat-new-part", url="new_part.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +### Edit Category + +Select the *Edit* button in the top right corner of the screen to edit the details for the selected part category: + +{% with id="cat-edit", url="part_category_edit.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +!!! info "Permission Required" + If the user does not have permission to edit part details, this button will be hidden + +In the part category display screen, there are three tabs of information available: + +## Part Detail View + +The *Part Detail* view displays information about a single part: + +{% with id="part-details", url="part_details.png" %} +{% include "app_img.html" %} +{% endwith %} + +### Details Tab + +The *details* tab shows information about the selected part. Some of the displayed tiles provide further information when selected: + +#### Category + +Tap on the displayed part category to navigate to a detail view for that category. + +#### Stock + +The *stock* tile shows the total quantity of stock available for the part. Tap on this tile to navigate to the *Stock Tab* view for this part. + +#### Notes + +Tap on the *notes* tile to view (and edit) the notes for this part: + +{% with id="part-notes", url="part_notes.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +#### Attachments + +Tap on the *attachments* tile to view the file attachments for this part: + +{% with id="part-attachments", url="part_attachments.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +New attachments can be uploaded by tapping on the icons in the top right of the screen. + +Select a particular attachment file to downloaded it to the local device. + +### Stock Tab + +The *Stock* tab displays all the stock items available for this part. Tap on a particular stock item to navigate to a detail view for that item. + +{% with id="part-stock", url="part_stock.png" %} +{% include "app_img.html" %} +{% endwith %} + +The list of available stock items can be filtered using the input box at the top of the screen. + +### Actions Tab + +The *Actions* tab displays the available actions for the selected part: + +#### New Stock Item + +Create a new stock item for this part: + +{% with id="part-stock-new", url="new_stock_item.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +### Edit Part + +To edit the part details, select the *Edit* button in the top right corner of the screen: + +{% with id="part-edit", url="part_edit.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +!!! info "Permission Required" + If the user does not have permission to edit part details, this button will be hidden + +### Part Image View + +Tap the image of the part (displayed at the top left of the screen) to launch the part image view: + +{% with id="part-image", url="part_image.jpg" %} +{% include "app_img.html" %} +{% endwith %} + +A full-screen view of the image is displayed. The user can also upload a new image for the part, either selecting an image from the device, or taking a new picture with the device's camera. diff --git a/docs/docs/app/po.md b/docs/docs/app/po.md new file mode 100644 index 000000000000..8d7a8bdbb2e2 --- /dev/null +++ b/docs/docs/app/po.md @@ -0,0 +1,49 @@ +--- +title: Purchase Orders +--- + +## Purchase Order List + +The purchase order list display lists all purchase orders: + +{% with id="po_list", url="app/po_list.png", maxheight="240px", description="Purchase order list" %} +{% include "img.html" %} +{% endwith %} + +Select an individual purchase order to display the detail view for that order. + +### Filtering + +Displayed purchase orders can be subsequently filtered using the search input at the top of the screen + +## Purchase Order Detail + +{% with id="po_detail", url="app/po_detail.png", maxheight="240px", description="Purchase order details" %} +{% include "img.html" %} +{% endwith %} + +### Edit Order Details + +From the detail view, select the *Edit* button in the top-right of the screen. This opens the purchase order editing display: + +{% with id="edit_po", url="app/po_edit.png", maxheight="240px", description="Edit purchase order" %} +{% include "img.html" %} +{% endwith %} + +### Line Items + +The *Line Items* tab shows the line items associated with this purchase order: + +{% with id="po_lines", url="app/po_lines.png", maxheight="240px", description="Purchase order line items" %} +{% include "img.html" %} +{% endwith %} + +Long press on a particular line item to receive the item into stock. + +### Stock Items + +Once items have been received into stock against a particular purchase order, they are displayed in the *Stock Items* tab: + +{% with id="po_stock", url="app/po_stock.png", maxheight="240px", description="Purchase order stock items" %} +{% include "img.html" %} +{% endwith %} diff --git a/docs/docs/app/privacy.md b/docs/docs/app/privacy.md new file mode 100644 index 000000000000..79ac7ad81c1a --- /dev/null +++ b/docs/docs/app/privacy.md @@ -0,0 +1,59 @@ +--- +title: Privacy Statement +--- + +## InvenTree App Privacy Policy + +The InvenTree mobile app requires some extra permissions for complete functionality. Additionally, some user information is stored locally on the device where the app is installed. + +## Data Collection + +### User Profiles + +For each *profile* configured in the app, the following information is stored locally on the device: + +- Server name (e.g. "InvenTree Demo") +- Server address (e.g. "https://demo.inventree.org) +- *API token* + +#### User Authentication + +The InvenTree app uses an API token for user authentication. This token is requested once from the server, and then stored locally on the device. + +To initially request the token, the user will be required to enter their username and password. + +!!! info "Password Storage" + The user's username and password are not stored locally, or used for any purpose other than requesting an API token + +#### Token Handling + +A separate API token is stored locally for each profile. This token can be deleted at any time from within the app settings - this will force the user to enter their login credentials again to request a new token. + +Additionally, the stored token may be revoked by the server, or expire. Either situation will again require the user to re-enter their username and password. + +### Camera Permissions + +The InvenTree app requires permission to access the device camera for the following purposes: + +- Scanning barcode data +- Taking pictures with the device camera for upload to connected InvenTree server + +Pictures taken in the InvenTree app are not stored or distributed to any other services. + +## Personal Information + +The InvenTree app does not collect any information which could be used to personally identify the user(s) of the device onto which the app is installed. + +## Third Party Access + +The InvenTree app does not share any personal information on users of the app with any third parties. + +## Error Logs + +The InvenTree app makes use of the [sentry.io](https://sentry.io/) service to monitor the app for bugs and run-time errors. When an error occurs in the app, log data is uploaded to the sentry server, where InvenTree developers can use this information to improve the quality of the app. + +!!! question "Identifying Information" + The uploaded error reports contain information on the nature of the error / bug; i.e. "where" in the app code the failures occurred. The uploaded data does not contain any information which can be used to identify users or extract user data. + +!!! tip "Disable Error Reporting" + If desired, users can disable error reporting entirely, from within the [app settings](./settings.md). This prevents any error logs from being uploaded to the sentry server. diff --git a/docs/docs/app/search.md b/docs/docs/app/search.md new file mode 100644 index 000000000000..e258698b5e13 --- /dev/null +++ b/docs/docs/app/search.md @@ -0,0 +1,15 @@ +--- +title: App Search +--- + +## Search Screen + +The global search screen provides quick search functionality across the connected InvenTree database. Entering a search term will return multiple search results, as shown in the examples below: + +{% with id="search_1", url="app/search_1.png", maxheight="240px", description="Search results" %} +{% include 'img.html' %} +{% endwith %} + +{% with id="search_2", url="app/search_2.png", maxheight="240px", description="Search results" %} +{% include 'img.html' %} +{% endwith %} diff --git a/docs/docs/app/settings.md b/docs/docs/app/settings.md new file mode 100644 index 000000000000..807616eeb215 --- /dev/null +++ b/docs/docs/app/settings.md @@ -0,0 +1,92 @@ +--- +title: App Settings +--- + +## Settings + +The *Settings* view provides access to user configurable settings, in addition to information about the app itself. + +The main settings view is shown below, and provides the following options: + +| Option | Description | +| --- | --- | +| [Server](./connect.md) | Select server profile and configure settings | +| [App Settings](#app-settings) | Configure app settings | +| [Barcode Settings](#barcode-settings) | Configure barcode scanning settings | +| [Home Screen](#home-screen) | Configure home screen options | +| [Part](#part-settings) | Configure part management options | +| About | Display app version information | + + +{% with id="settings_view", url="app/settings.png", maxheight="240px", description="Settings view" %} +{% include 'img.html' %} +{% endwith %} + +## App Settings + +The *App Settings* view provides configuration options for the InvenTree app: + +{% with id="app_settings", url="app/app_settings.png", maxheight="240px", description="App Settings" %} +{% include 'img.html' %} +{% endwith %} + +### App Settings + +| Option | Description | +| --- | --- | +| Dark Mode | Enable "dark mode" display for the app. | +| Screen Orientation | Select [screen orientation mode](#screen-orientation) | +| Use Strict HTTPS | Enforce strict checking of HTTPs certificates. Enabling this option may prevent you from connecting to the server if there are certificate issues. | +| Language | Select app language. By default, will use the system language of the device the app is installed on. | +| Upload Error Reports | Enable uploading of anonymous error / crash reports. These reports are used to improve the quality of the app. | + +#### Screen Orientation + +By default, the screen orientation follows your system preference. However if desired, the screen orientation can be locked in either portrait or landscape mode. + +### Sounds + +Configure audible app notifications: + +| Option | Description | +| --- | --- | +| Server Error | Play an audible tone when a server error occurs | +| Barcode Tones | Play audible tones when scanning barcodes | + +## Barcode Settings + +The *Barcode Settings* view allows you to configure options relating to [barcode scanning](./barcode.md): + +{% with id="barcode_settings", url="app/barcode_settings.png", maxheight="240px", description="Barcode Settings" %} +{% include 'img.html' %} +{% endwith %} + +| Option | Description | +| --- | --- | +| Scanner Input | Select barcode capture mode | +| Barcode Scan Delay | Delay between successive scans | + +## Home Screen + +The *Home Screen* view allows you to configure display options for the app 'home screen': + +{% with id="home_settings", url="app/home_settings.png", maxheight="240px", description="Home Screen Settings" %} +{% include 'img.html' %} +{% endwith %} + +| Option | Description | +| --- | --- | +| Subscribed Parts | Show a list of subscribed parts on the home page | +| Show Purchase Orders | Display a link to purchase orders on the home page | +| Show Suppliers | Display a link to suppliers on the home page | + +## Part Settings + +The *Part Settings* view allows you to configure various options governing what part features are available: + +| Option | Description | +| --- | --- | +| Parameters | Enable display of part parameters in the part detail view | +| BOM | Enable bill of materials display in the part detail view | +| Stock History | Enable display of stock history in the stock detail view | +| Test Results | Enable display of test results in the stock detail view | diff --git a/docs/docs/app/so.md b/docs/docs/app/so.md new file mode 100644 index 000000000000..a259877eb698 --- /dev/null +++ b/docs/docs/app/so.md @@ -0,0 +1,37 @@ +--- +title: Sales Orders +--- + +## Sales Order List + +The sales order list display shows all sales orders: + +{% with id="so_list", url="app/so_list.png", maxheight="240px", description="Sales order list" %} +{% include "img.html" %} +{% endwith %} + +Select an individual sales order to display the detail view for that order. + +### Filtering + +Displayed sales orders can be subsequently filtered using the search input at the top of the screen + +## Sales Order Detail + +Select an individual order to show the detailed view for that order: + +{% with id="so_detail", url="app/so_detail.png", maxheight="240px", description="Sales order details" %} +{% include "img.html" %} +{% endwith %} + +### Edit Order Details + +From the detail view, select the *Edit* button in the top-right of the screen. This opens the sales order editing display. + +### Line Items + +View the line items associated with the selected order: + +{% with id="so_lines", url="app/so_lines.png", maxheight="240px", description="Sales order lines" %} +{% include "img.html" %} +{% endwith %} diff --git a/docs/docs/app/stock.md b/docs/docs/app/stock.md new file mode 100644 index 000000000000..a4163503434d --- /dev/null +++ b/docs/docs/app/stock.md @@ -0,0 +1,171 @@ +--- +title: Stock Views +--- + +## Stock Location View + +From the *home screen*, select *Stock* to open the top-level stock location view. + +### Details Tab + +The *Details* tab shows information about the selected stock location. + +{% with id="loc-detail", url="location_detail.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Parent Location + +If the current location has a parent location (i.e. it is not a top-level location) then a link is provided to the parent location. Tap the *parent location* tile to navigate to the location detail page for the parent location. + +#### Sublocations + +If the current stock location has any sublocations, they are listed here. Select any of the displayed sublocations to navigate to the detail view. + +### Stock Tab + +The *Stock* tab displays all the stock items available in this location. Tap a displayed stock item to navigate to the stock item detail view. + +{% with id="loc-stock", url="location_stock.png" %} +{% include "app_img.html" %} +{% endwith %} + + +The list of available stock items can be filtered using the input box at the top of the screen: + +{% with id="loc-filter", url="location_stock_filter.jpg" %} +{% include "app_img.html" %} +{% endwith %} + + +### Context Actions + +The following *Context Actions* are available for the selected location: + +{% with id="loc-actions", url="location_actions.png" %} +{% include "app_img.html" %} +{% endwith %} + + +#### New Location + +Create a new location under the current location: + +{% with id="loc-new", url="new_location.jpg" %} +{% include "app_img.html" %} +{% endwith %} + + +#### New Stock Item + +Create a new stock item in the current location: + +{% with id="loc-new-stock", url="new_stock_item_from_location.jpg" %} +{% include "app_img.html" %} +{% endwith %} + + +#### Scan Stock Items Into Location + +Use the barcode scanner to scan a stock item into the current location. + + +## Stock Item Detail View + +The *Stock Item Detail* view displays information about a single stock item: + +{% with id="stock-detail", url="stock_detail.png" %} +{% include "app_img.html" %} +{% endwith %} + + +### Details Tab + +The *details* tab shows information about the selected stock item. Some of the displayed tiles provide further information when selected: + +#### Part Tile + +Part information is displayed at the top of the screen. Tap on this tile to navigate to the detail view for the linked part + +#### Location + +Tap on the location tile to navigate to the location detail view + +#### Notes + +Tap on the notes tile to display and edit the notes for this stock item + +### Actions Tab + +The *actions* tab displays the available actions for the selected stock item: + +{% with id="stock-actions", url="stock_actions.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Count Stock + +Select the *Count Stock* action to validate the current number of items in stock. Use this option to perform a quick stocktake! + +{% with id="stock-count", url="stock_count.png" %} +{% include "app_img.html" %} +{% endwith %} + +!!! info "Serialized Stock" + The *count stock* action is not available for serialized stock items, as they have a fixed quantity of 1 + +#### Remove Stock + +Select this action to remove a certain quantity from the selected stock item. For example, if there are 12 items available, and you take 3 items, the listed quantity will be reduced to 9 itemes. + +{% with id="stock-remove", url="stock_remove.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Add Stock + +Select this action to add a certain quantity to the selected stock item. For example, if there are 12 items available, and you add 3 items, the listed quantity will be increased to 15 items. + +{% with id="stock-add", url="stock_add.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Transfer Stock + +Transfer (move) the stock item to a new location: + +{% with id="stock-transfer", url="stock_transfer.png" %} +{% include "app_img.html" %} +{% endwith %} + +#### Scan Into Location + +Transfer the stock item into a new location by scanning the barcode for that location. If a *valid* stock location barcode is scanned, the stock item will be automatically relocated to that location + +#### Assign Barcode + +If a stock item has a third-party barcode (i.e. it has been received from a supplier with a barcode already printed) then this barcode can be used to track the stock item in InvenTree. + +Select the *assign barcode* action to scan this third-party barcode and assign it to this stock item. + +This barcode can then be used to track the stock item. + +#### Print Label + +If the server supports [label printing plugins](../extend/plugins/label.md), then an option to print a label for the selected stock item: + +{% with id="label_print_1", url="stock_print_label_1.png", description="Print label via plugin" %} +{% include 'app_img.html' %} +{% endwith %} + +{% with id="label_print_2", url="stock_print_label_2.png", description="Print label via plugin" %} +{% include 'app_img.html' %} +{% endwith %} + +### Edit Stock Item + +To edit the stock item details, select the *Edit* button in the top right corner of the screen: + +{% with id="stock-edit", url="stock_edit.jpg" %} +{% include "app_img.html" %} +{% endwith %} diff --git a/docs/docs/app/translation.md b/docs/docs/app/translation.md new file mode 100644 index 000000000000..fc51d37b1a0d --- /dev/null +++ b/docs/docs/app/translation.md @@ -0,0 +1,15 @@ +--- +title: App Translations +--- + +## Translation Support + +The InvenTree app is designed to support multiple language translations. + +As with the web application, translations are community contributed - if the app does not support your native language, contributions are very welcome! + +## Contributing + +Translation for the InvenTree mobile app is provided by the [crowdin](https://crowdin.com/project/inventree) service. Contributions are welcomed and encouraged, and the process of providing or improving translated strings is extremely simple! + +Full translation efforts, while appreciated, are not required. Please feel free to contribute as much as you can! diff --git a/docs/docs/assets/favicon.ico b/docs/docs/assets/favicon.ico new file mode 100644 index 000000000000..3efcfaf7dcdf Binary files /dev/null and b/docs/docs/assets/favicon.ico differ diff --git a/docs/docs/assets/images/admin/admin.png b/docs/docs/assets/images/admin/admin.png new file mode 100644 index 000000000000..e99e2e8c6137 Binary files /dev/null and b/docs/docs/assets/images/admin/admin.png differ diff --git a/docs/docs/assets/images/admin/admin_errors.png b/docs/docs/assets/images/admin/admin_errors.png new file mode 100644 index 000000000000..8dfcd41b147e Binary files /dev/null and b/docs/docs/assets/images/admin/admin_errors.png differ diff --git a/docs/docs/assets/images/admin/admin_errors_link.png b/docs/docs/assets/images/admin/admin_errors_link.png new file mode 100644 index 000000000000..5727ea7b306a Binary files /dev/null and b/docs/docs/assets/images/admin/admin_errors_link.png differ diff --git a/docs/docs/assets/images/admin/edit_part.png b/docs/docs/assets/images/admin/edit_part.png new file mode 100644 index 000000000000..96c01338f03e Binary files /dev/null and b/docs/docs/assets/images/admin/edit_part.png differ diff --git a/docs/docs/assets/images/admin/export.png b/docs/docs/assets/images/admin/export.png new file mode 100644 index 000000000000..1180684c11f5 Binary files /dev/null and b/docs/docs/assets/images/admin/export.png differ diff --git a/docs/docs/assets/images/admin/filter.png b/docs/docs/assets/images/admin/filter.png new file mode 100644 index 000000000000..d3a075633b11 Binary files /dev/null and b/docs/docs/assets/images/admin/filter.png differ diff --git a/docs/docs/assets/images/admin/formats.png b/docs/docs/assets/images/admin/formats.png new file mode 100644 index 000000000000..0941ebeb5513 Binary files /dev/null and b/docs/docs/assets/images/admin/formats.png differ diff --git a/docs/docs/assets/images/admin/import.png b/docs/docs/assets/images/admin/import.png new file mode 100644 index 000000000000..74901c3b256d Binary files /dev/null and b/docs/docs/assets/images/admin/import.png differ diff --git a/docs/docs/assets/images/admin/import_error.png b/docs/docs/assets/images/admin/import_error.png new file mode 100644 index 000000000000..8c83a5302725 Binary files /dev/null and b/docs/docs/assets/images/admin/import_error.png differ diff --git a/docs/docs/assets/images/admin/import_preview.png b/docs/docs/assets/images/admin/import_preview.png new file mode 100644 index 000000000000..dfa7b6cf4368 Binary files /dev/null and b/docs/docs/assets/images/admin/import_preview.png differ diff --git a/docs/docs/assets/images/admin/import_upload.png b/docs/docs/assets/images/admin/import_upload.png new file mode 100644 index 000000000000..1f93b67f73fb Binary files /dev/null and b/docs/docs/assets/images/admin/import_upload.png differ diff --git a/docs/docs/assets/images/admin/part_cats.png b/docs/docs/assets/images/admin/part_cats.png new file mode 100644 index 000000000000..2b1f8a3b4e88 Binary files /dev/null and b/docs/docs/assets/images/admin/part_cats.png differ diff --git a/docs/docs/assets/images/admin/roles.png b/docs/docs/assets/images/admin/roles.png new file mode 100644 index 000000000000..3fb2b63e3aca Binary files /dev/null and b/docs/docs/assets/images/admin/roles.png differ diff --git a/docs/docs/assets/images/admin/shell.png b/docs/docs/assets/images/admin/shell.png new file mode 100644 index 000000000000..016fd38f01f3 Binary files /dev/null and b/docs/docs/assets/images/admin/shell.png differ diff --git a/docs/docs/assets/images/admin/test_report_add.png b/docs/docs/assets/images/admin/test_report_add.png new file mode 100644 index 000000000000..64682ab24c35 Binary files /dev/null and b/docs/docs/assets/images/admin/test_report_add.png differ diff --git a/docs/docs/assets/images/admin/users_groups.png b/docs/docs/assets/images/admin/users_groups.png new file mode 100644 index 000000000000..b9ccaa8e9ee0 Binary files /dev/null and b/docs/docs/assets/images/admin/users_groups.png differ diff --git a/docs/docs/assets/images/api/api_browse.png b/docs/docs/assets/images/api/api_browse.png new file mode 100644 index 000000000000..fdb56513cd6c Binary files /dev/null and b/docs/docs/assets/images/api/api_browse.png differ diff --git a/docs/docs/assets/images/api/api_category_options.png b/docs/docs/assets/images/api/api_category_options.png new file mode 100644 index 000000000000..b8dc4e595e28 Binary files /dev/null and b/docs/docs/assets/images/api/api_category_options.png differ diff --git a/docs/docs/assets/images/api/api_detail.png b/docs/docs/assets/images/api/api_detail.png new file mode 100644 index 000000000000..14fe46c8f0f5 Binary files /dev/null and b/docs/docs/assets/images/api/api_detail.png differ diff --git a/docs/docs/assets/images/api/api_doc.png b/docs/docs/assets/images/api/api_doc.png new file mode 100644 index 000000000000..cfbf6b602aa4 Binary files /dev/null and b/docs/docs/assets/images/api/api_doc.png differ diff --git a/docs/docs/assets/images/api/api_english.png b/docs/docs/assets/images/api/api_english.png new file mode 100644 index 000000000000..6f5ac5cbf309 Binary files /dev/null and b/docs/docs/assets/images/api/api_english.png differ diff --git a/docs/docs/assets/images/api/api_filters.png b/docs/docs/assets/images/api/api_filters.png new file mode 100644 index 000000000000..32903d32d167 Binary files /dev/null and b/docs/docs/assets/images/api/api_filters.png differ diff --git a/docs/docs/assets/images/api/api_german.png b/docs/docs/assets/images/api/api_german.png new file mode 100644 index 000000000000..96744dcfaa3c Binary files /dev/null and b/docs/docs/assets/images/api/api_german.png differ diff --git a/docs/docs/assets/images/api/api_metadata_fields.png b/docs/docs/assets/images/api/api_metadata_fields.png new file mode 100644 index 000000000000..dc1466437bc9 Binary files /dev/null and b/docs/docs/assets/images/api/api_metadata_fields.png differ diff --git a/docs/docs/assets/images/api/api_roles.png b/docs/docs/assets/images/api/api_roles.png new file mode 100644 index 000000000000..647ff0de5c5b Binary files /dev/null and b/docs/docs/assets/images/api/api_roles.png differ diff --git a/docs/docs/assets/images/api/api_roles_2.png b/docs/docs/assets/images/api/api_roles_2.png new file mode 100644 index 000000000000..c13b646fa016 Binary files /dev/null and b/docs/docs/assets/images/api/api_roles_2.png differ diff --git a/docs/docs/assets/images/app/add_server_profile.png b/docs/docs/assets/images/app/add_server_profile.png new file mode 100644 index 000000000000..21d48f32a762 Binary files /dev/null and b/docs/docs/assets/images/app/add_server_profile.png differ diff --git a/docs/docs/assets/images/app/app_global_navigation.png b/docs/docs/assets/images/app/app_global_navigation.png new file mode 100644 index 000000000000..20515922d8e3 Binary files /dev/null and b/docs/docs/assets/images/app/app_global_navigation.png differ diff --git a/docs/docs/assets/images/app/app_settings.png b/docs/docs/assets/images/app/app_settings.png new file mode 100644 index 000000000000..e96fba01f19a Binary files /dev/null and b/docs/docs/assets/images/app/app_settings.png differ diff --git a/docs/docs/assets/images/app/app_tabs.png b/docs/docs/assets/images/app/app_tabs.png new file mode 100644 index 000000000000..409c8db39bd7 Binary files /dev/null and b/docs/docs/assets/images/app/app_tabs.png differ diff --git a/docs/docs/assets/images/app/barcode_part_actions.png b/docs/docs/assets/images/app/barcode_part_actions.png new file mode 100644 index 000000000000..4f4134b60cb0 Binary files /dev/null and b/docs/docs/assets/images/app/barcode_part_actions.png differ diff --git a/docs/docs/assets/images/app/barcode_po_actions.png b/docs/docs/assets/images/app/barcode_po_actions.png new file mode 100644 index 000000000000..15b7e93fde9c Binary files /dev/null and b/docs/docs/assets/images/app/barcode_po_actions.png differ diff --git a/docs/docs/assets/images/app/barcode_settings.png b/docs/docs/assets/images/app/barcode_settings.png new file mode 100644 index 000000000000..8d069f2fc34e Binary files /dev/null and b/docs/docs/assets/images/app/barcode_settings.png differ diff --git a/docs/docs/assets/images/app/barcode_stock_item_actions.png b/docs/docs/assets/images/app/barcode_stock_item_actions.png new file mode 100644 index 000000000000..5628700f22ae Binary files /dev/null and b/docs/docs/assets/images/app/barcode_stock_item_actions.png differ diff --git a/docs/docs/assets/images/app/barcode_stock_location_actions.png b/docs/docs/assets/images/app/barcode_stock_location_actions.png new file mode 100644 index 000000000000..1d41f4202868 Binary files /dev/null and b/docs/docs/assets/images/app/barcode_stock_location_actions.png differ diff --git a/docs/docs/assets/images/app/category_actions_tab.png b/docs/docs/assets/images/app/category_actions_tab.png new file mode 100644 index 000000000000..6d3f40d28645 Binary files /dev/null and b/docs/docs/assets/images/app/category_actions_tab.png differ diff --git a/docs/docs/assets/images/app/category_parts_filter.png b/docs/docs/assets/images/app/category_parts_filter.png new file mode 100644 index 000000000000..c419e026e585 Binary files /dev/null and b/docs/docs/assets/images/app/category_parts_filter.png differ diff --git a/docs/docs/assets/images/app/category_parts_tab.png b/docs/docs/assets/images/app/category_parts_tab.png new file mode 100644 index 000000000000..32505e11623e Binary files /dev/null and b/docs/docs/assets/images/app/category_parts_tab.png differ diff --git a/docs/docs/assets/images/app/connected.png b/docs/docs/assets/images/app/connected.png new file mode 100644 index 000000000000..689a123108cd Binary files /dev/null and b/docs/docs/assets/images/app/connected.png differ diff --git a/docs/docs/assets/images/app/context_actions.png b/docs/docs/assets/images/app/context_actions.png new file mode 100644 index 000000000000..e3da9e1356d9 Binary files /dev/null and b/docs/docs/assets/images/app/context_actions.png differ diff --git a/docs/docs/assets/images/app/details.jpg b/docs/docs/assets/images/app/details.jpg new file mode 100644 index 000000000000..82fdfac92bfb Binary files /dev/null and b/docs/docs/assets/images/app/details.jpg differ diff --git a/docs/docs/assets/images/app/drawer.png b/docs/docs/assets/images/app/drawer.png new file mode 100644 index 000000000000..7744a0bac204 Binary files /dev/null and b/docs/docs/assets/images/app/drawer.png differ diff --git a/docs/docs/assets/images/app/edit_server.png b/docs/docs/assets/images/app/edit_server.png new file mode 100644 index 000000000000..8b8e21f24b47 Binary files /dev/null and b/docs/docs/assets/images/app/edit_server.png differ diff --git a/docs/docs/assets/images/app/home.png b/docs/docs/assets/images/app/home.png new file mode 100644 index 000000000000..9fd60ced6cdb Binary files /dev/null and b/docs/docs/assets/images/app/home.png differ diff --git a/docs/docs/assets/images/app/home_settings.png b/docs/docs/assets/images/app/home_settings.png new file mode 100644 index 000000000000..c9dbb7a83896 Binary files /dev/null and b/docs/docs/assets/images/app/home_settings.png differ diff --git a/docs/docs/assets/images/app/initial.png b/docs/docs/assets/images/app/initial.png new file mode 100644 index 000000000000..851e83a66a5f Binary files /dev/null and b/docs/docs/assets/images/app/initial.png differ diff --git a/docs/docs/assets/images/app/location_actions.png b/docs/docs/assets/images/app/location_actions.png new file mode 100644 index 000000000000..cddc4dba1f94 Binary files /dev/null and b/docs/docs/assets/images/app/location_actions.png differ diff --git a/docs/docs/assets/images/app/location_detail.png b/docs/docs/assets/images/app/location_detail.png new file mode 100644 index 000000000000..5bf5706a82e0 Binary files /dev/null and b/docs/docs/assets/images/app/location_detail.png differ diff --git a/docs/docs/assets/images/app/location_stock.png b/docs/docs/assets/images/app/location_stock.png new file mode 100644 index 000000000000..cc248f80b31e Binary files /dev/null and b/docs/docs/assets/images/app/location_stock.png differ diff --git a/docs/docs/assets/images/app/location_stock_filter.jpg b/docs/docs/assets/images/app/location_stock_filter.jpg new file mode 100644 index 000000000000..98a91f473fe7 Binary files /dev/null and b/docs/docs/assets/images/app/location_stock_filter.jpg differ diff --git a/docs/docs/assets/images/app/new_category.jpg b/docs/docs/assets/images/app/new_category.jpg new file mode 100644 index 000000000000..27dcd8fdbd70 Binary files /dev/null and b/docs/docs/assets/images/app/new_category.jpg differ diff --git a/docs/docs/assets/images/app/new_location.jpg b/docs/docs/assets/images/app/new_location.jpg new file mode 100644 index 000000000000..cee3a899e212 Binary files /dev/null and b/docs/docs/assets/images/app/new_location.jpg differ diff --git a/docs/docs/assets/images/app/new_part.jpg b/docs/docs/assets/images/app/new_part.jpg new file mode 100644 index 000000000000..fa6935dbdd0b Binary files /dev/null and b/docs/docs/assets/images/app/new_part.jpg differ diff --git a/docs/docs/assets/images/app/new_stock_item.jpg b/docs/docs/assets/images/app/new_stock_item.jpg new file mode 100644 index 000000000000..5dfe1b225167 Binary files /dev/null and b/docs/docs/assets/images/app/new_stock_item.jpg differ diff --git a/docs/docs/assets/images/app/new_stock_item_from_location.jpg b/docs/docs/assets/images/app/new_stock_item_from_location.jpg new file mode 100644 index 000000000000..52aac3d8bf20 Binary files /dev/null and b/docs/docs/assets/images/app/new_stock_item_from_location.jpg differ diff --git a/docs/docs/assets/images/app/no_profiles.png b/docs/docs/assets/images/app/no_profiles.png new file mode 100644 index 000000000000..cf226bb4aa2d Binary files /dev/null and b/docs/docs/assets/images/app/no_profiles.png differ diff --git a/docs/docs/assets/images/app/part_attachments.jpg b/docs/docs/assets/images/app/part_attachments.jpg new file mode 100644 index 000000000000..0db36a39ef2f Binary files /dev/null and b/docs/docs/assets/images/app/part_attachments.jpg differ diff --git a/docs/docs/assets/images/app/part_category_detail.png b/docs/docs/assets/images/app/part_category_detail.png new file mode 100644 index 000000000000..f78f625de1ad Binary files /dev/null and b/docs/docs/assets/images/app/part_category_detail.png differ diff --git a/docs/docs/assets/images/app/part_category_edit.jpg b/docs/docs/assets/images/app/part_category_edit.jpg new file mode 100644 index 000000000000..c07a880520b4 Binary files /dev/null and b/docs/docs/assets/images/app/part_category_edit.jpg differ diff --git a/docs/docs/assets/images/app/part_details.png b/docs/docs/assets/images/app/part_details.png new file mode 100644 index 000000000000..5c71f463ea62 Binary files /dev/null and b/docs/docs/assets/images/app/part_details.png differ diff --git a/docs/docs/assets/images/app/part_edit.jpg b/docs/docs/assets/images/app/part_edit.jpg new file mode 100644 index 000000000000..4df294091912 Binary files /dev/null and b/docs/docs/assets/images/app/part_edit.jpg differ diff --git a/docs/docs/assets/images/app/part_image.jpg b/docs/docs/assets/images/app/part_image.jpg new file mode 100644 index 000000000000..bb36d2e8c9f0 Binary files /dev/null and b/docs/docs/assets/images/app/part_image.jpg differ diff --git a/docs/docs/assets/images/app/part_notes.jpg b/docs/docs/assets/images/app/part_notes.jpg new file mode 100644 index 000000000000..1007c5a84769 Binary files /dev/null and b/docs/docs/assets/images/app/part_notes.jpg differ diff --git a/docs/docs/assets/images/app/part_stock.png b/docs/docs/assets/images/app/part_stock.png new file mode 100644 index 000000000000..b7fd4b056824 Binary files /dev/null and b/docs/docs/assets/images/app/part_stock.png differ diff --git a/docs/docs/assets/images/app/po_detail.png b/docs/docs/assets/images/app/po_detail.png new file mode 100644 index 000000000000..be2c9805aac5 Binary files /dev/null and b/docs/docs/assets/images/app/po_detail.png differ diff --git a/docs/docs/assets/images/app/po_edit.png b/docs/docs/assets/images/app/po_edit.png new file mode 100644 index 000000000000..a07cc042636d Binary files /dev/null and b/docs/docs/assets/images/app/po_edit.png differ diff --git a/docs/docs/assets/images/app/po_lines.png b/docs/docs/assets/images/app/po_lines.png new file mode 100644 index 000000000000..7a0ff16ee560 Binary files /dev/null and b/docs/docs/assets/images/app/po_lines.png differ diff --git a/docs/docs/assets/images/app/po_list.png b/docs/docs/assets/images/app/po_list.png new file mode 100644 index 000000000000..95cc382b14a6 Binary files /dev/null and b/docs/docs/assets/images/app/po_list.png differ diff --git a/docs/docs/assets/images/app/po_stock.png b/docs/docs/assets/images/app/po_stock.png new file mode 100644 index 000000000000..ecc1d0b1580f Binary files /dev/null and b/docs/docs/assets/images/app/po_stock.png differ diff --git a/docs/docs/assets/images/app/search_1.png b/docs/docs/assets/images/app/search_1.png new file mode 100644 index 000000000000..53eab14502f4 Binary files /dev/null and b/docs/docs/assets/images/app/search_1.png differ diff --git a/docs/docs/assets/images/app/search_2.png b/docs/docs/assets/images/app/search_2.png new file mode 100644 index 000000000000..61479ab24cb7 Binary files /dev/null and b/docs/docs/assets/images/app/search_2.png differ diff --git a/docs/docs/assets/images/app/select_server.jpg b/docs/docs/assets/images/app/select_server.jpg new file mode 100644 index 000000000000..ac69893370f7 Binary files /dev/null and b/docs/docs/assets/images/app/select_server.jpg differ diff --git a/docs/docs/assets/images/app/settings.png b/docs/docs/assets/images/app/settings.png new file mode 100644 index 000000000000..64cd22a6fcfe Binary files /dev/null and b/docs/docs/assets/images/app/settings.png differ diff --git a/docs/docs/assets/images/app/so_detail.png b/docs/docs/assets/images/app/so_detail.png new file mode 100644 index 000000000000..68c93e26b995 Binary files /dev/null and b/docs/docs/assets/images/app/so_detail.png differ diff --git a/docs/docs/assets/images/app/so_lines.png b/docs/docs/assets/images/app/so_lines.png new file mode 100644 index 000000000000..1ae52ce55957 Binary files /dev/null and b/docs/docs/assets/images/app/so_lines.png differ diff --git a/docs/docs/assets/images/app/so_list.png b/docs/docs/assets/images/app/so_list.png new file mode 100644 index 000000000000..58b703e80381 Binary files /dev/null and b/docs/docs/assets/images/app/so_list.png differ diff --git a/docs/docs/assets/images/app/stock_actions.png b/docs/docs/assets/images/app/stock_actions.png new file mode 100644 index 000000000000..2f371025616d Binary files /dev/null and b/docs/docs/assets/images/app/stock_actions.png differ diff --git a/docs/docs/assets/images/app/stock_add.png b/docs/docs/assets/images/app/stock_add.png new file mode 100644 index 000000000000..70001431d3ba Binary files /dev/null and b/docs/docs/assets/images/app/stock_add.png differ diff --git a/docs/docs/assets/images/app/stock_count.png b/docs/docs/assets/images/app/stock_count.png new file mode 100644 index 000000000000..ee7c4a0b1bdb Binary files /dev/null and b/docs/docs/assets/images/app/stock_count.png differ diff --git a/docs/docs/assets/images/app/stock_detail.png b/docs/docs/assets/images/app/stock_detail.png new file mode 100644 index 000000000000..ee34ac1e2a95 Binary files /dev/null and b/docs/docs/assets/images/app/stock_detail.png differ diff --git a/docs/docs/assets/images/app/stock_edit.jpg b/docs/docs/assets/images/app/stock_edit.jpg new file mode 100644 index 000000000000..39f0ca27c3cc Binary files /dev/null and b/docs/docs/assets/images/app/stock_edit.jpg differ diff --git a/docs/docs/assets/images/app/stock_print_label_1.png b/docs/docs/assets/images/app/stock_print_label_1.png new file mode 100644 index 000000000000..ae7e9ae17d68 Binary files /dev/null and b/docs/docs/assets/images/app/stock_print_label_1.png differ diff --git a/docs/docs/assets/images/app/stock_print_label_2.png b/docs/docs/assets/images/app/stock_print_label_2.png new file mode 100644 index 000000000000..981f9ecfb3cf Binary files /dev/null and b/docs/docs/assets/images/app/stock_print_label_2.png differ diff --git a/docs/docs/assets/images/app/stock_remove.png b/docs/docs/assets/images/app/stock_remove.png new file mode 100644 index 000000000000..4941e849106e Binary files /dev/null and b/docs/docs/assets/images/app/stock_remove.png differ diff --git a/docs/docs/assets/images/app/stock_transfer.png b/docs/docs/assets/images/app/stock_transfer.png new file mode 100644 index 000000000000..3d43fab098a0 Binary files /dev/null and b/docs/docs/assets/images/app/stock_transfer.png differ diff --git a/docs/docs/assets/images/app/unauthorized.png b/docs/docs/assets/images/app/unauthorized.png new file mode 100644 index 000000000000..5e854c85e39a Binary files /dev/null and b/docs/docs/assets/images/app/unauthorized.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915372.png b/docs/docs/assets/images/appgallery/Screenshot_1681915372.png new file mode 100644 index 000000000000..c5ed8b0b5cd0 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915372.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915404.png b/docs/docs/assets/images/appgallery/Screenshot_1681915404.png new file mode 100644 index 000000000000..bc4479ea1f36 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915404.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915412.png b/docs/docs/assets/images/appgallery/Screenshot_1681915412.png new file mode 100644 index 000000000000..24de24b415a9 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915412.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915508.png b/docs/docs/assets/images/appgallery/Screenshot_1681915508.png new file mode 100644 index 000000000000..4a862e1f1257 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915508.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915510.png b/docs/docs/assets/images/appgallery/Screenshot_1681915510.png new file mode 100644 index 000000000000..c0309d23835a Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915510.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915518.png b/docs/docs/assets/images/appgallery/Screenshot_1681915518.png new file mode 100644 index 000000000000..4566644ccd35 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915518.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915536.png b/docs/docs/assets/images/appgallery/Screenshot_1681915536.png new file mode 100644 index 000000000000..1be7e29514db Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915536.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915545.png b/docs/docs/assets/images/appgallery/Screenshot_1681915545.png new file mode 100644 index 000000000000..a9941be23233 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915545.png differ diff --git a/docs/docs/assets/images/appgallery/Screenshot_1681915557.png b/docs/docs/assets/images/appgallery/Screenshot_1681915557.png new file mode 100644 index 000000000000..a208e1ee0976 Binary files /dev/null and b/docs/docs/assets/images/appgallery/Screenshot_1681915557.png differ diff --git a/docs/docs/assets/images/barcode/barcode_link_1.png b/docs/docs/assets/images/barcode/barcode_link_1.png new file mode 100644 index 000000000000..cb3fabd922f3 Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_link_1.png differ diff --git a/docs/docs/assets/images/barcode/barcode_link_2.png b/docs/docs/assets/images/barcode/barcode_link_2.png new file mode 100644 index 000000000000..0272ea911fff Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_link_2.png differ diff --git a/docs/docs/assets/images/barcode/barcode_no_match.png b/docs/docs/assets/images/barcode/barcode_no_match.png new file mode 100644 index 000000000000..1e1c2330556b Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_no_match.png differ diff --git a/docs/docs/assets/images/barcode/barcode_scan.png b/docs/docs/assets/images/barcode/barcode_scan.png new file mode 100644 index 000000000000..be28755da844 Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_scan.png differ diff --git a/docs/docs/assets/images/barcode/barcode_settings.png b/docs/docs/assets/images/barcode/barcode_settings.png new file mode 100644 index 000000000000..8ca8356d9029 Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_settings.png differ diff --git a/docs/docs/assets/images/barcode/barcode_unlink.png b/docs/docs/assets/images/barcode/barcode_unlink.png new file mode 100644 index 000000000000..e70e44348e37 Binary files /dev/null and b/docs/docs/assets/images/barcode/barcode_unlink.png differ diff --git a/docs/docs/assets/images/build/allocated_stock_table.png b/docs/docs/assets/images/build/allocated_stock_table.png deleted file mode 100644 index 676f4492f9a9..000000000000 Binary files a/docs/docs/assets/images/build/allocated_stock_table.png and /dev/null differ diff --git a/docs/docs/assets/images/build/auto_allocate_dialog.png b/docs/docs/assets/images/build/auto_allocate_dialog.png new file mode 100644 index 000000000000..66c8775aade9 Binary files /dev/null and b/docs/docs/assets/images/build/auto_allocate_dialog.png differ diff --git a/docs/docs/assets/images/build/bom_add_item.png b/docs/docs/assets/images/build/bom_add_item.png new file mode 100644 index 000000000000..f912d374048c Binary files /dev/null and b/docs/docs/assets/images/build/bom_add_item.png differ diff --git a/docs/docs/assets/images/build/bom_consumable_item.png b/docs/docs/assets/images/build/bom_consumable_item.png new file mode 100644 index 000000000000..065f6ee70969 Binary files /dev/null and b/docs/docs/assets/images/build/bom_consumable_item.png differ diff --git a/docs/docs/assets/images/build/bom_expanded.png b/docs/docs/assets/images/build/bom_expanded.png new file mode 100644 index 000000000000..8bda75c21a25 Binary files /dev/null and b/docs/docs/assets/images/build/bom_expanded.png differ diff --git a/docs/docs/assets/images/build/bom_export.png b/docs/docs/assets/images/build/bom_export.png new file mode 100644 index 000000000000..bc247f339c39 Binary files /dev/null and b/docs/docs/assets/images/build/bom_export.png differ diff --git a/docs/docs/assets/images/build/bom_flat.png b/docs/docs/assets/images/build/bom_flat.png new file mode 100644 index 000000000000..ce46c8591d9b Binary files /dev/null and b/docs/docs/assets/images/build/bom_flat.png differ diff --git a/docs/docs/assets/images/build/bom_invalid.png b/docs/docs/assets/images/build/bom_invalid.png new file mode 100644 index 000000000000..831fba9aa5e6 Binary files /dev/null and b/docs/docs/assets/images/build/bom_invalid.png differ diff --git a/docs/docs/assets/images/build/bom_select_fields.png b/docs/docs/assets/images/build/bom_select_fields.png new file mode 100644 index 000000000000..67d8e8a5060a Binary files /dev/null and b/docs/docs/assets/images/build/bom_select_fields.png differ diff --git a/docs/docs/assets/images/build/bom_select_parts.png b/docs/docs/assets/images/build/bom_select_parts.png new file mode 100644 index 000000000000..447bdfdb0f7d Binary files /dev/null and b/docs/docs/assets/images/build/bom_select_parts.png differ diff --git a/docs/docs/assets/images/build/bom_substitute_item.png b/docs/docs/assets/images/build/bom_substitute_item.png new file mode 100644 index 000000000000..c46178ae3669 Binary files /dev/null and b/docs/docs/assets/images/build/bom_substitute_item.png differ diff --git a/docs/docs/assets/images/build/bom_upload_file.png b/docs/docs/assets/images/build/bom_upload_file.png new file mode 100644 index 000000000000..916e6e18895c Binary files /dev/null and b/docs/docs/assets/images/build/bom_upload_file.png differ diff --git a/docs/docs/assets/images/build/bom_valid.png b/docs/docs/assets/images/build/bom_valid.png new file mode 100644 index 000000000000..c53532b5020e Binary files /dev/null and b/docs/docs/assets/images/build/bom_valid.png differ diff --git a/docs/docs/assets/images/build/build_allocate.png b/docs/docs/assets/images/build/build_allocate.png new file mode 100644 index 000000000000..ee379464e07c Binary files /dev/null and b/docs/docs/assets/images/build/build_allocate.png differ diff --git a/docs/docs/assets/images/build/build_allocate_detail.png b/docs/docs/assets/images/build/build_allocate_detail.png new file mode 100644 index 000000000000..35d278507b50 Binary files /dev/null and b/docs/docs/assets/images/build/build_allocate_detail.png differ diff --git a/docs/docs/assets/images/build/build_allocate_tracked_parts.png b/docs/docs/assets/images/build/build_allocate_tracked_parts.png new file mode 100644 index 000000000000..598c67d58285 Binary files /dev/null and b/docs/docs/assets/images/build/build_allocate_tracked_parts.png differ diff --git a/docs/docs/assets/images/build/build_allocation_expand.png b/docs/docs/assets/images/build/build_allocation_expand.png new file mode 100644 index 000000000000..45dafdc83c40 Binary files /dev/null and b/docs/docs/assets/images/build/build_allocation_expand.png differ diff --git a/docs/docs/assets/images/build/build_attachments.png b/docs/docs/assets/images/build/build_attachments.png new file mode 100644 index 000000000000..a7a70ea660ed Binary files /dev/null and b/docs/docs/assets/images/build/build_attachments.png differ diff --git a/docs/docs/assets/images/build/build_auto_allocate.png b/docs/docs/assets/images/build/build_auto_allocate.png new file mode 100644 index 000000000000..1e4d0486e14b Binary files /dev/null and b/docs/docs/assets/images/build/build_auto_allocate.png differ diff --git a/docs/docs/assets/images/build/build_childs.png b/docs/docs/assets/images/build/build_childs.png new file mode 100644 index 000000000000..479011a796f3 Binary files /dev/null and b/docs/docs/assets/images/build/build_childs.png differ diff --git a/docs/docs/assets/images/build/build_complete.png b/docs/docs/assets/images/build/build_complete.png new file mode 100644 index 000000000000..b83237c0395d Binary files /dev/null and b/docs/docs/assets/images/build/build_complete.png differ diff --git a/docs/docs/assets/images/build/build_consumable_item.png b/docs/docs/assets/images/build/build_consumable_item.png new file mode 100644 index 000000000000..3a378e4732ae Binary files /dev/null and b/docs/docs/assets/images/build/build_consumable_item.png differ diff --git a/docs/docs/assets/images/build/build_create_from_part.png b/docs/docs/assets/images/build/build_create_from_part.png new file mode 100644 index 000000000000..fce8f05a9d68 Binary files /dev/null and b/docs/docs/assets/images/build/build_create_from_part.png differ diff --git a/docs/docs/assets/images/build/build_details.png b/docs/docs/assets/images/build/build_details.png new file mode 100644 index 000000000000..b0afd9ad8b90 Binary files /dev/null and b/docs/docs/assets/images/build/build_details.png differ diff --git a/docs/docs/assets/images/build/build_display.png b/docs/docs/assets/images/build/build_display.png new file mode 100644 index 000000000000..c8d01916b35f Binary files /dev/null and b/docs/docs/assets/images/build/build_display.png differ diff --git a/docs/docs/assets/images/build/build_example_allocate_untracked.png b/docs/docs/assets/images/build/build_example_allocate_untracked.png new file mode 100644 index 000000000000..95cd85fa77cc Binary files /dev/null and b/docs/docs/assets/images/build/build_example_allocate_untracked.png differ diff --git a/docs/docs/assets/images/build/build_example_allocated_tracked.png b/docs/docs/assets/images/build/build_example_allocated_tracked.png new file mode 100644 index 000000000000..9f2b2dae7e07 Binary files /dev/null and b/docs/docs/assets/images/build/build_example_allocated_tracked.png differ diff --git a/docs/docs/assets/images/build/build_example_complete_outputs.png b/docs/docs/assets/images/build/build_example_complete_outputs.png new file mode 100644 index 000000000000..7a3382af9a77 Binary files /dev/null and b/docs/docs/assets/images/build/build_example_complete_outputs.png differ diff --git a/docs/docs/assets/images/build/build_example_create.png b/docs/docs/assets/images/build/build_example_create.png new file mode 100644 index 000000000000..e62d438543aa Binary files /dev/null and b/docs/docs/assets/images/build/build_example_create.png differ diff --git a/docs/docs/assets/images/build/build_example_create_outputs.png b/docs/docs/assets/images/build/build_example_create_outputs.png new file mode 100644 index 000000000000..160672803937 Binary files /dev/null and b/docs/docs/assets/images/build/build_example_create_outputs.png differ diff --git a/docs/docs/assets/images/build/build_example_incomplete_list.png b/docs/docs/assets/images/build/build_example_incomplete_list.png new file mode 100644 index 000000000000..a6fbd37d5bb6 Binary files /dev/null and b/docs/docs/assets/images/build/build_example_incomplete_list.png differ diff --git a/docs/docs/assets/images/build/build_list.png b/docs/docs/assets/images/build/build_list.png new file mode 100644 index 000000000000..d9003a6729a9 Binary files /dev/null and b/docs/docs/assets/images/build/build_list.png differ diff --git a/docs/docs/assets/images/build/build_notes.png b/docs/docs/assets/images/build/build_notes.png new file mode 100644 index 000000000000..b3c530466956 Binary files /dev/null and b/docs/docs/assets/images/build/build_notes.png differ diff --git a/docs/docs/assets/images/build/build_output_complete.png b/docs/docs/assets/images/build/build_output_complete.png new file mode 100644 index 000000000000..6583cbddf218 Binary files /dev/null and b/docs/docs/assets/images/build/build_output_complete.png differ diff --git a/docs/docs/assets/images/build/build_output_create.png b/docs/docs/assets/images/build/build_output_create.png new file mode 100644 index 000000000000..5b29ceb26efb Binary files /dev/null and b/docs/docs/assets/images/build/build_output_create.png differ diff --git a/docs/docs/assets/images/build/build_output_delete.png b/docs/docs/assets/images/build/build_output_delete.png new file mode 100644 index 000000000000..523ace3a2b3d Binary files /dev/null and b/docs/docs/assets/images/build/build_output_delete.png differ diff --git a/docs/docs/assets/images/build/build_output_scrap.png b/docs/docs/assets/images/build/build_output_scrap.png new file mode 100644 index 000000000000..91ab653f8936 Binary files /dev/null and b/docs/docs/assets/images/build/build_output_scrap.png differ diff --git a/docs/docs/assets/images/build/build_outputs.png b/docs/docs/assets/images/build/build_outputs.png new file mode 100644 index 000000000000..3e0be757f9b3 Binary files /dev/null and b/docs/docs/assets/images/build/build_outputs.png differ diff --git a/docs/docs/assets/images/build/build_outputs_complete.png b/docs/docs/assets/images/build/build_outputs_complete.png new file mode 100644 index 000000000000..a35866e9484e Binary files /dev/null and b/docs/docs/assets/images/build/build_outputs_complete.png differ diff --git a/docs/docs/assets/images/build/build_outputs_incomplete.png b/docs/docs/assets/images/build/build_outputs_incomplete.png new file mode 100644 index 000000000000..746206ed9a22 Binary files /dev/null and b/docs/docs/assets/images/build/build_outputs_incomplete.png differ diff --git a/docs/docs/assets/images/build/build_panel_allocated_stock.png b/docs/docs/assets/images/build/build_panel_allocated_stock.png deleted file mode 100644 index 33ab5bba0b5b..000000000000 Binary files a/docs/docs/assets/images/build/build_panel_allocated_stock.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_panel_details.png b/docs/docs/assets/images/build/build_panel_details.png deleted file mode 100644 index aa37b138d5a4..000000000000 Binary files a/docs/docs/assets/images/build/build_panel_details.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_panel_line_items.png b/docs/docs/assets/images/build/build_panel_line_items.png deleted file mode 100644 index 859e0f34b851..000000000000 Binary files a/docs/docs/assets/images/build/build_panel_line_items.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_panel_test_results.png b/docs/docs/assets/images/build/build_panel_test_results.png deleted file mode 100644 index c6cee645316b..000000000000 Binary files a/docs/docs/assets/images/build/build_panel_test_results.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_panel_test_statistics.png b/docs/docs/assets/images/build/build_panel_test_statistics.png deleted file mode 100644 index a71edb7ab5e1..000000000000 Binary files a/docs/docs/assets/images/build/build_panel_test_statistics.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_tree.png b/docs/docs/assets/images/build/build_tree.png new file mode 100644 index 000000000000..7e708dc4a56b Binary files /dev/null and b/docs/docs/assets/images/build/build_tree.png differ diff --git a/docs/docs/assets/images/build/complete_build.png b/docs/docs/assets/images/build/complete_build.png new file mode 100644 index 000000000000..230acca8f464 Binary files /dev/null and b/docs/docs/assets/images/build/complete_build.png differ diff --git a/docs/docs/assets/images/build/inherited_bom.drawio b/docs/docs/assets/images/build/inherited_bom.drawio new file mode 100644 index 000000000000..3ce4e4e91be6 --- /dev/null +++ b/docs/docs/assets/images/build/inherited_bom.drawio @@ -0,0 +1 @@ +7Vpbb5swFP41SNvDJrCB0MeGdFukVevUqVufJhc7gQ5w5Di3/vqZYK4mlFYk7BKpUvHx/fs++5zjVoNutP3I0MK/ppiEGtDxVoMTDQDDBEBLfnS8Sy0jy0wNcxZg2agw3AZPRBp1aV0FmCwrDTmlIQ8WVaNH45h4vGJDjNFNtdmMhtVZF2hOFMOth0LV+j3A3E+tjqUX9k8kmPvZzIYuayKUNZaGpY8w3ZRM8EqDLqOUp1/R1iVhAl6GS9rvw4HafGGMxLxLh/vHn77r2uPp56/R4+Qp8qZw/U6OskbhSm74G4kWIeJEWG8Q4+LXpVw/32WgMLqKMUnGNTQ43vgBJ7cL5CW1GyEDYfN5FMpqOQNhnGwPLt3IARFKIjQinO1EE9kBOhJDKaKsuCkYMTKY/RIbtrQhKYJ5PnKBk/iQUL0ANqDApgE7FLOOcbAWn/Pk8w6xAMUJguOsVkxWajA4rqCGK9CHBhYqwBYouoPjZf5xeJkteE0Gx6uuLwiGxstuOLg1kEiMLxPHIUpeiJbLwKviQrYB/yG+9ffAksX7UtUk2bueFXZZIRarT3tZWfG+XFd025eyfunqCFacVI0CsQO6Yh55/qrniM0Jf+5uUyktUWY1MJbZGBHOI1hXl9tEo5zhhgZ7sWYnTK8qxoQ1JaTblL3K3q4+kFWTnlMbKMVBGWivqnzbrxfaqE+hjf5JocGz0HoQmtOn0LrrrEe9gI56Mc966UEvF4pexl+uhWHKSZQE+wIZ/c009gkT0QF+2xJD6M/HELMgDF0aUrbvCzEiziwR35Iz+ouUamzPIQ+zfqIOC1QRbsoW7AalgGMFHVku254uVGnIWzywIl14YRLRgaAjwG0YHYO84+GtZrUNeOcaTxK0+hHoH+lBjkLORVsA3nRrHo+bJn915kY7kEyelhvVN/yn3Ni1Ow003Wkn5QZ0utMqfIwVV34Kj1LnyyIONpv4csADtO0jnSU4OF/gzNcL/JI1OF9tL49XLRAP85JmmkO/pAH16VFBacjEc6hEEcILsZvWDK9rqqgOldN+omQRWOeIoPnGajyAp72xmt6yzx7mEF+jwflqehJu58s1TsNQD3grEXNXB3U8vDtlmhW8J38P3oZZi6C6/k38FXiLYvFvCqlrKf7ZA179Bg== diff --git a/docs/docs/assets/images/build/inherited_bom.png b/docs/docs/assets/images/build/inherited_bom.png new file mode 100644 index 000000000000..95475a390302 Binary files /dev/null and b/docs/docs/assets/images/build/inherited_bom.png differ diff --git a/docs/docs/assets/images/build/report-61.png b/docs/docs/assets/images/build/report-61.png new file mode 100644 index 000000000000..483433d076de Binary files /dev/null and b/docs/docs/assets/images/build/report-61.png differ diff --git a/docs/docs/assets/images/indexgallery/bom_add_item.png b/docs/docs/assets/images/indexgallery/bom_add_item.png new file mode 100644 index 000000000000..05c837703900 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/bom_add_item.png differ diff --git a/docs/docs/assets/images/indexgallery/build_details.png b/docs/docs/assets/images/indexgallery/build_details.png new file mode 100644 index 000000000000..625e6ba76038 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/build_details.png differ diff --git a/docs/docs/assets/images/indexgallery/build_outputs.png b/docs/docs/assets/images/indexgallery/build_outputs.png new file mode 100644 index 000000000000..fa77dd3755f9 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/build_outputs.png differ diff --git a/docs/docs/assets/images/indexgallery/category_params.png b/docs/docs/assets/images/indexgallery/category_params.png new file mode 100644 index 000000000000..9e91b8fbd15f Binary files /dev/null and b/docs/docs/assets/images/indexgallery/category_params.png differ diff --git a/docs/docs/assets/images/indexgallery/category_subcats.png b/docs/docs/assets/images/indexgallery/category_subcats.png new file mode 100644 index 000000000000..948b7cfc0d2c Binary files /dev/null and b/docs/docs/assets/images/indexgallery/category_subcats.png differ diff --git a/docs/docs/assets/images/indexgallery/manufacturers.png b/docs/docs/assets/images/indexgallery/manufacturers.png new file mode 100644 index 000000000000..fbe153dc1189 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/manufacturers.png differ diff --git a/docs/docs/assets/images/indexgallery/part_admin.png b/docs/docs/assets/images/indexgallery/part_admin.png new file mode 100644 index 000000000000..2c1bbc62c61c Binary files /dev/null and b/docs/docs/assets/images/indexgallery/part_admin.png differ diff --git a/docs/docs/assets/images/indexgallery/part_category.png b/docs/docs/assets/images/indexgallery/part_category.png new file mode 100644 index 000000000000..f9d9de032bf1 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/part_category.png differ diff --git a/docs/docs/assets/images/indexgallery/part_stock.png b/docs/docs/assets/images/indexgallery/part_stock.png new file mode 100644 index 000000000000..5d48a42d75d8 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/part_stock.png differ diff --git a/docs/docs/assets/images/indexgallery/part_suppliers.png b/docs/docs/assets/images/indexgallery/part_suppliers.png new file mode 100644 index 000000000000..ca09aeca6d21 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/part_suppliers.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_item.png b/docs/docs/assets/images/indexgallery/stock_item.png new file mode 100644 index 000000000000..b316b9282197 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/stock_item.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_item_2.png b/docs/docs/assets/images/indexgallery/stock_item_2.png new file mode 100644 index 000000000000..7ad6386328b8 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/stock_item_2.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_location.png b/docs/docs/assets/images/indexgallery/stock_location.png new file mode 100644 index 000000000000..9d117e35cdcc Binary files /dev/null and b/docs/docs/assets/images/indexgallery/stock_location.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_location_2.png b/docs/docs/assets/images/indexgallery/stock_location_2.png new file mode 100644 index 000000000000..a8e44aaf91f5 Binary files /dev/null and b/docs/docs/assets/images/indexgallery/stock_location_2.png differ diff --git a/docs/docs/assets/images/indexgallery/suppliers.png b/docs/docs/assets/images/indexgallery/suppliers.png new file mode 100644 index 000000000000..e90ef9899bab Binary files /dev/null and b/docs/docs/assets/images/indexgallery/suppliers.png differ diff --git a/docs/docs/assets/images/order/assign_project_code.png b/docs/docs/assets/images/order/assign_project_code.png new file mode 100644 index 000000000000..07b1af9bfe3d Binary files /dev/null and b/docs/docs/assets/images/order/assign_project_code.png differ diff --git a/docs/docs/assets/images/order/company_disable.png b/docs/docs/assets/images/order/company_disable.png new file mode 100644 index 000000000000..2c3ab4f49f07 Binary files /dev/null and b/docs/docs/assets/images/order/company_disable.png differ diff --git a/docs/docs/assets/images/order/complete_shipment.png b/docs/docs/assets/images/order/complete_shipment.png new file mode 100644 index 000000000000..f94341f3436f Binary files /dev/null and b/docs/docs/assets/images/order/complete_shipment.png differ diff --git a/docs/docs/assets/images/order/complete_shipment_action.png b/docs/docs/assets/images/order/complete_shipment_action.png new file mode 100644 index 000000000000..989c3e3ff88c Binary files /dev/null and b/docs/docs/assets/images/order/complete_shipment_action.png differ diff --git a/docs/docs/assets/images/order/completed_shipments.png b/docs/docs/assets/images/order/completed_shipments.png new file mode 100644 index 000000000000..4a1f7dba1ef7 Binary files /dev/null and b/docs/docs/assets/images/order/completed_shipments.png differ diff --git a/docs/docs/assets/images/order/contact_list.png b/docs/docs/assets/images/order/contact_list.png new file mode 100644 index 000000000000..cf168489cea8 Binary files /dev/null and b/docs/docs/assets/images/order/contact_list.png differ diff --git a/docs/docs/assets/images/order/disable_supplier_part.png b/docs/docs/assets/images/order/disable_supplier_part.png new file mode 100644 index 000000000000..a0e5f9bde824 Binary files /dev/null and b/docs/docs/assets/images/order/disable_supplier_part.png differ diff --git a/docs/docs/assets/images/order/disable_supplier_part_edit.png b/docs/docs/assets/images/order/disable_supplier_part_edit.png new file mode 100644 index 000000000000..2592f5ed91cc Binary files /dev/null and b/docs/docs/assets/images/order/disable_supplier_part_edit.png differ diff --git a/docs/docs/assets/images/order/edit_shipment.png b/docs/docs/assets/images/order/edit_shipment.png new file mode 100644 index 000000000000..693dfdea7886 Binary files /dev/null and b/docs/docs/assets/images/order/edit_shipment.png differ diff --git a/docs/docs/assets/images/order/filter_by_project.png b/docs/docs/assets/images/order/filter_by_project.png new file mode 100644 index 000000000000..4e31eeed368b Binary files /dev/null and b/docs/docs/assets/images/order/filter_by_project.png differ diff --git a/docs/docs/assets/images/order/manufacturer_list.png b/docs/docs/assets/images/order/manufacturer_list.png new file mode 100644 index 000000000000..f8378d4a32f5 Binary files /dev/null and b/docs/docs/assets/images/order/manufacturer_list.png differ diff --git a/docs/docs/assets/images/order/pending_shipments.png b/docs/docs/assets/images/order/pending_shipments.png new file mode 100644 index 000000000000..80d0a102969d Binary files /dev/null and b/docs/docs/assets/images/order/pending_shipments.png differ diff --git a/docs/docs/assets/images/order/po_duplicate.png b/docs/docs/assets/images/order/po_duplicate.png new file mode 100644 index 000000000000..adb402eda3a4 Binary files /dev/null and b/docs/docs/assets/images/order/po_duplicate.png differ diff --git a/docs/docs/assets/images/order/po_duplicate_2.png b/docs/docs/assets/images/order/po_duplicate_2.png new file mode 100644 index 000000000000..834b885e9cb8 Binary files /dev/null and b/docs/docs/assets/images/order/po_duplicate_2.png differ diff --git a/docs/docs/assets/images/order/po_duplicate_3.png b/docs/docs/assets/images/order/po_duplicate_3.png new file mode 100644 index 000000000000..2c9f1d266aa4 Binary files /dev/null and b/docs/docs/assets/images/order/po_duplicate_3.png differ diff --git a/docs/docs/assets/images/order/po_list.png b/docs/docs/assets/images/order/po_list.png new file mode 100644 index 000000000000..6b1b5349e3a0 Binary files /dev/null and b/docs/docs/assets/images/order/po_list.png differ diff --git a/docs/docs/assets/images/order/return_order_create.png b/docs/docs/assets/images/order/return_order_create.png new file mode 100644 index 000000000000..b5f899da2fc7 Binary files /dev/null and b/docs/docs/assets/images/order/return_order_create.png differ diff --git a/docs/docs/assets/images/order/return_order_detail.png b/docs/docs/assets/images/order/return_order_detail.png new file mode 100644 index 000000000000..64082dd20bc8 Binary files /dev/null and b/docs/docs/assets/images/order/return_order_detail.png differ diff --git a/docs/docs/assets/images/order/return_order_enable.png b/docs/docs/assets/images/order/return_order_enable.png new file mode 100644 index 000000000000..571ab319aa7c Binary files /dev/null and b/docs/docs/assets/images/order/return_order_enable.png differ diff --git a/docs/docs/assets/images/order/return_order_index.png b/docs/docs/assets/images/order/return_order_index.png new file mode 100644 index 000000000000..5e650d99f099 Binary files /dev/null and b/docs/docs/assets/images/order/return_order_index.png differ diff --git a/docs/docs/assets/images/order/return_order_navbar.png b/docs/docs/assets/images/order/return_order_navbar.png new file mode 100644 index 000000000000..91604cda3c87 Binary files /dev/null and b/docs/docs/assets/images/order/return_order_navbar.png differ diff --git a/docs/docs/assets/images/order/so_list.png b/docs/docs/assets/images/order/so_list.png new file mode 100644 index 000000000000..9104a2148309 Binary files /dev/null and b/docs/docs/assets/images/order/so_list.png differ diff --git a/docs/docs/assets/images/order/supplier_list.png b/docs/docs/assets/images/order/supplier_list.png new file mode 100644 index 000000000000..77515471aa5f Binary files /dev/null and b/docs/docs/assets/images/order/supplier_list.png differ diff --git a/docs/docs/assets/images/order/supplier_part_availability.png b/docs/docs/assets/images/order/supplier_part_availability.png new file mode 100644 index 000000000000..56a21963a540 Binary files /dev/null and b/docs/docs/assets/images/order/supplier_part_availability.png differ diff --git a/docs/docs/assets/images/order/update_availability.png b/docs/docs/assets/images/order/update_availability.png new file mode 100644 index 000000000000..54836c92221d Binary files /dev/null and b/docs/docs/assets/images/order/update_availability.png differ diff --git a/docs/docs/assets/images/paper_splash.jpg b/docs/docs/assets/images/paper_splash.jpg new file mode 100644 index 000000000000..e466708f3ff1 Binary files /dev/null and b/docs/docs/assets/images/paper_splash.jpg differ diff --git a/docs/docs/assets/images/part/cat_subs.png b/docs/docs/assets/images/part/cat_subs.png new file mode 100644 index 000000000000..271b33e1194a Binary files /dev/null and b/docs/docs/assets/images/part/cat_subs.png differ diff --git a/docs/docs/assets/images/part/category_notification.png b/docs/docs/assets/images/part/category_notification.png new file mode 100644 index 000000000000..3de3a74d19e1 Binary files /dev/null and b/docs/docs/assets/images/part/category_notification.png differ diff --git a/docs/docs/assets/images/part/create_initial_stock_option.png b/docs/docs/assets/images/part/create_initial_stock_option.png new file mode 100644 index 000000000000..febba69df450 Binary files /dev/null and b/docs/docs/assets/images/part/create_initial_stock_option.png differ diff --git a/docs/docs/assets/images/part/create_part_parameter.png b/docs/docs/assets/images/part/create_part_parameter.png new file mode 100644 index 000000000000..0021b65df4d7 Binary files /dev/null and b/docs/docs/assets/images/part/create_part_parameter.png differ diff --git a/docs/docs/assets/images/part/create_part_variant.png b/docs/docs/assets/images/part/create_part_variant.png new file mode 100644 index 000000000000..b885b350505c Binary files /dev/null and b/docs/docs/assets/images/part/create_part_variant.png differ diff --git a/docs/docs/assets/images/part/enable_template_part.png b/docs/docs/assets/images/part/enable_template_part.png new file mode 100644 index 000000000000..d09ef52c8150 Binary files /dev/null and b/docs/docs/assets/images/part/enable_template_part.png differ diff --git a/docs/docs/assets/images/part/new_part.png b/docs/docs/assets/images/part/new_part.png new file mode 100644 index 000000000000..7408659f3704 Binary files /dev/null and b/docs/docs/assets/images/part/new_part.png differ diff --git a/docs/docs/assets/images/part/notification_flyout.png b/docs/docs/assets/images/part/notification_flyout.png new file mode 100644 index 000000000000..9a12441a9369 Binary files /dev/null and b/docs/docs/assets/images/part/notification_flyout.png differ diff --git a/docs/docs/assets/images/part/notification_header.png b/docs/docs/assets/images/part/notification_header.png new file mode 100644 index 000000000000..b089eb727d2c Binary files /dev/null and b/docs/docs/assets/images/part/notification_header.png differ diff --git a/docs/docs/assets/images/part/notification_history.png b/docs/docs/assets/images/part/notification_history.png new file mode 100644 index 000000000000..e31289925a52 Binary files /dev/null and b/docs/docs/assets/images/part/notification_history.png differ diff --git a/docs/docs/assets/images/part/notification_inbox.png b/docs/docs/assets/images/part/notification_inbox.png new file mode 100644 index 000000000000..06e96629dbc8 Binary files /dev/null and b/docs/docs/assets/images/part/notification_inbox.png differ diff --git a/docs/docs/assets/images/part/parameter_template_edit.png b/docs/docs/assets/images/part/parameter_template_edit.png new file mode 100644 index 000000000000..c91cca4c1e09 Binary files /dev/null and b/docs/docs/assets/images/part/parameter_template_edit.png differ diff --git a/docs/docs/assets/images/part/parametric_table_example.png b/docs/docs/assets/images/part/parametric_table_example.png new file mode 100644 index 000000000000..78720dedbcfa Binary files /dev/null and b/docs/docs/assets/images/part/parametric_table_example.png differ diff --git a/docs/docs/assets/images/part/parametric_table_tab.png b/docs/docs/assets/images/part/parametric_table_tab.png new file mode 100644 index 000000000000..b23115f07d2d Binary files /dev/null and b/docs/docs/assets/images/part/parametric_table_tab.png differ diff --git a/docs/docs/assets/images/part/part_category.png b/docs/docs/assets/images/part/part_category.png new file mode 100644 index 000000000000..5c3a8a7346f2 Binary files /dev/null and b/docs/docs/assets/images/part/part_category.png differ diff --git a/docs/docs/assets/images/part/part_create_form.png b/docs/docs/assets/images/part/part_create_form.png new file mode 100644 index 000000000000..de5e133bff73 Binary files /dev/null and b/docs/docs/assets/images/part/part_create_form.png differ diff --git a/docs/docs/assets/images/part/part_create_revision.png b/docs/docs/assets/images/part/part_create_revision.png deleted file mode 100644 index a3a901d3c64e..000000000000 Binary files a/docs/docs/assets/images/part/part_create_revision.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_create_supplier.png b/docs/docs/assets/images/part/part_create_supplier.png new file mode 100644 index 000000000000..03c2e28c9b8f Binary files /dev/null and b/docs/docs/assets/images/part/part_create_supplier.png differ diff --git a/docs/docs/assets/images/part/part_image_example.png b/docs/docs/assets/images/part/part_image_example.png new file mode 100644 index 000000000000..e559ba8bb20d Binary files /dev/null and b/docs/docs/assets/images/part/part_image_example.png differ diff --git a/docs/docs/assets/images/part/part_image_upload.png b/docs/docs/assets/images/part/part_image_upload.png new file mode 100644 index 000000000000..ff001c17ecce Binary files /dev/null and b/docs/docs/assets/images/part/part_image_upload.png differ diff --git a/docs/docs/assets/images/part/part_initial_stock.png b/docs/docs/assets/images/part/part_initial_stock.png new file mode 100644 index 000000000000..f250bcfb5bb8 Binary files /dev/null and b/docs/docs/assets/images/part/part_initial_stock.png differ diff --git a/docs/docs/assets/images/part/part_invalid_units.png b/docs/docs/assets/images/part/part_invalid_units.png new file mode 100644 index 000000000000..014fe4b93e21 Binary files /dev/null and b/docs/docs/assets/images/part/part_invalid_units.png differ diff --git a/docs/docs/assets/images/part/part_ipn_editing.png b/docs/docs/assets/images/part/part_ipn_editing.png new file mode 100644 index 000000000000..33e381559af9 Binary files /dev/null and b/docs/docs/assets/images/part/part_ipn_editing.png differ diff --git a/docs/docs/assets/images/part/part_list_hover.png b/docs/docs/assets/images/part/part_list_hover.png new file mode 100644 index 000000000000..4b32af06b9bd Binary files /dev/null and b/docs/docs/assets/images/part/part_list_hover.png differ diff --git a/docs/docs/assets/images/part/part_manufacturers_suppliers.png b/docs/docs/assets/images/part/part_manufacturers_suppliers.png new file mode 100644 index 000000000000..c40253688917 Binary files /dev/null and b/docs/docs/assets/images/part/part_manufacturers_suppliers.png differ diff --git a/docs/docs/assets/images/part/part_new_suppliers.png b/docs/docs/assets/images/part/part_new_suppliers.png new file mode 100644 index 000000000000..edc6866fc67d Binary files /dev/null and b/docs/docs/assets/images/part/part_new_suppliers.png differ diff --git a/docs/docs/assets/images/part/part_overview.png b/docs/docs/assets/images/part/part_overview.png new file mode 100644 index 000000000000..4f3fba307e58 Binary files /dev/null and b/docs/docs/assets/images/part/part_overview.png differ diff --git a/docs/docs/assets/images/part/part_parameters_enforce.png b/docs/docs/assets/images/part/part_parameters_enforce.png new file mode 100644 index 000000000000..2ce41ad2f342 Binary files /dev/null and b/docs/docs/assets/images/part/part_parameters_enforce.png differ diff --git a/docs/docs/assets/images/part/part_parameters_example.png b/docs/docs/assets/images/part/part_parameters_example.png new file mode 100644 index 000000000000..b50aa2834da1 Binary files /dev/null and b/docs/docs/assets/images/part/part_parameters_example.png differ diff --git a/docs/docs/assets/images/part/part_related.png b/docs/docs/assets/images/part/part_related.png new file mode 100644 index 000000000000..27fc93d78f33 Binary files /dev/null and b/docs/docs/assets/images/part/part_related.png differ diff --git a/docs/docs/assets/images/part/part_related_setting.png b/docs/docs/assets/images/part/part_related_setting.png new file mode 100644 index 000000000000..ed2e19c45a0c Binary files /dev/null and b/docs/docs/assets/images/part/part_related_setting.png differ diff --git a/docs/docs/assets/images/part/part_revision_b.png b/docs/docs/assets/images/part/part_revision_b.png deleted file mode 100644 index 501d638a0412..000000000000 Binary files a/docs/docs/assets/images/part/part_revision_b.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_revision_select.png b/docs/docs/assets/images/part/part_revision_select.png deleted file mode 100644 index 48da57a3b364..000000000000 Binary files a/docs/docs/assets/images/part/part_revision_select.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_revision_settings.png b/docs/docs/assets/images/part/part_revision_settings.png deleted file mode 100644 index 31940f53dd7d..000000000000 Binary files a/docs/docs/assets/images/part/part_revision_settings.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_sort_by_param.png b/docs/docs/assets/images/part/part_sort_by_param.png new file mode 100644 index 000000000000..7f89cdc719b9 Binary files /dev/null and b/docs/docs/assets/images/part/part_sort_by_param.png differ diff --git a/docs/docs/assets/images/part/part_sorting_units.png b/docs/docs/assets/images/part/part_sorting_units.png new file mode 100644 index 000000000000..1564a9732a1d Binary files /dev/null and b/docs/docs/assets/images/part/part_sorting_units.png differ diff --git a/docs/docs/assets/images/part/part_stock.png b/docs/docs/assets/images/part/part_stock.png new file mode 100644 index 000000000000..1ef8670ff96f Binary files /dev/null and b/docs/docs/assets/images/part/part_stock.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_enable_tab.png b/docs/docs/assets/images/part/part_stocktake_enable_tab.png new file mode 100644 index 000000000000..6e530e6d006e Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_enable_tab.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_from_category.png b/docs/docs/assets/images/part/part_stocktake_from_category.png new file mode 100644 index 000000000000..680a5412585e Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_from_category.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_from_location.png b/docs/docs/assets/images/part/part_stocktake_from_location.png new file mode 100644 index 000000000000..14bacefb1738 Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_from_location.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_from_part.png b/docs/docs/assets/images/part/part_stocktake_from_part.png new file mode 100644 index 000000000000..d2ecb36ec7f0 Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_from_part.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_generate.png b/docs/docs/assets/images/part/part_stocktake_generate.png new file mode 100644 index 000000000000..7cfc96bc85a1 Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_generate.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_report_table.png b/docs/docs/assets/images/part/part_stocktake_report_table.png new file mode 100644 index 000000000000..e1c5d0dd17aa Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_report_table.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_settings.png b/docs/docs/assets/images/part/part_stocktake_settings.png new file mode 100644 index 000000000000..ffa20e0ab174 Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_settings.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_tab.png b/docs/docs/assets/images/part/part_stocktake_tab.png new file mode 100644 index 000000000000..d8ac13e1d3fc Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_tab.png differ diff --git a/docs/docs/assets/images/part/part_subscribe_off.png b/docs/docs/assets/images/part/part_subscribe_off.png new file mode 100644 index 000000000000..6f3437fba157 Binary files /dev/null and b/docs/docs/assets/images/part/part_subscribe_off.png differ diff --git a/docs/docs/assets/images/part/part_subscribe_on.png b/docs/docs/assets/images/part/part_subscribe_on.png new file mode 100644 index 000000000000..de6e1538e209 Binary files /dev/null and b/docs/docs/assets/images/part/part_subscribe_on.png differ diff --git a/docs/docs/assets/images/part/part_tabs.png b/docs/docs/assets/images/part/part_tabs.png new file mode 100644 index 000000000000..ea3ec737b594 Binary files /dev/null and b/docs/docs/assets/images/part/part_tabs.png differ diff --git a/docs/docs/assets/images/part/part_test_templates.png b/docs/docs/assets/images/part/part_test_templates.png new file mode 100644 index 000000000000..d3c527d0c397 Binary files /dev/null and b/docs/docs/assets/images/part/part_test_templates.png differ diff --git a/docs/docs/assets/images/part/part_units.png b/docs/docs/assets/images/part/part_units.png new file mode 100644 index 000000000000..4e952e800449 Binary files /dev/null and b/docs/docs/assets/images/part/part_units.png differ diff --git a/docs/docs/assets/images/part/part_units_invalid.png b/docs/docs/assets/images/part/part_units_invalid.png new file mode 100644 index 000000000000..e7a6f83e60d3 Binary files /dev/null and b/docs/docs/assets/images/part/part_units_invalid.png differ diff --git a/docs/docs/assets/images/part/part_view_intro.png b/docs/docs/assets/images/part/part_view_intro.png new file mode 100644 index 000000000000..4a7145d2db88 Binary files /dev/null and b/docs/docs/assets/images/part/part_view_intro.png differ diff --git a/docs/docs/assets/images/part/pricing_bom.png b/docs/docs/assets/images/part/pricing_bom.png new file mode 100644 index 000000000000..25121d73b829 Binary files /dev/null and b/docs/docs/assets/images/part/pricing_bom.png differ diff --git a/docs/docs/assets/images/part/pricing_internal.png b/docs/docs/assets/images/part/pricing_internal.png new file mode 100644 index 000000000000..c25da349a2d2 Binary files /dev/null and b/docs/docs/assets/images/part/pricing_internal.png differ diff --git a/docs/docs/assets/images/part/pricing_overview.png b/docs/docs/assets/images/part/pricing_overview.png new file mode 100644 index 000000000000..3dc5189bc14e Binary files /dev/null and b/docs/docs/assets/images/part/pricing_overview.png differ diff --git a/docs/docs/assets/images/part/pricing_purchase_history.png b/docs/docs/assets/images/part/pricing_purchase_history.png new file mode 100644 index 000000000000..55e6e2612bec Binary files /dev/null and b/docs/docs/assets/images/part/pricing_purchase_history.png differ diff --git a/docs/docs/assets/images/part/pricing_sale_history.png b/docs/docs/assets/images/part/pricing_sale_history.png new file mode 100644 index 000000000000..d487b186d41c Binary files /dev/null and b/docs/docs/assets/images/part/pricing_sale_history.png differ diff --git a/docs/docs/assets/images/part/pricing_sale_price_breaks.png b/docs/docs/assets/images/part/pricing_sale_price_breaks.png new file mode 100644 index 000000000000..3fe15f3ec6d4 Binary files /dev/null and b/docs/docs/assets/images/part/pricing_sale_price_breaks.png differ diff --git a/docs/docs/assets/images/part/pricing_supplier.png b/docs/docs/assets/images/part/pricing_supplier.png new file mode 100644 index 000000000000..4de0824bc223 Binary files /dev/null and b/docs/docs/assets/images/part/pricing_supplier.png differ diff --git a/docs/docs/assets/images/part/pricing_variants.png b/docs/docs/assets/images/part/pricing_variants.png new file mode 100644 index 000000000000..f1f6b1eb3ad2 Binary files /dev/null and b/docs/docs/assets/images/part/pricing_variants.png differ diff --git a/docs/docs/assets/images/part/scheduling.png b/docs/docs/assets/images/part/scheduling.png new file mode 100644 index 000000000000..ed3c76265e65 Binary files /dev/null and b/docs/docs/assets/images/part/scheduling.png differ diff --git a/docs/docs/assets/images/plugin/app_locate.png b/docs/docs/assets/images/plugin/app_locate.png new file mode 100644 index 000000000000..019dd3198f00 Binary files /dev/null and b/docs/docs/assets/images/plugin/app_locate.png differ diff --git a/docs/docs/assets/images/plugin/buttons.png b/docs/docs/assets/images/plugin/buttons.png new file mode 100644 index 000000000000..72774abaa181 Binary files /dev/null and b/docs/docs/assets/images/plugin/buttons.png differ diff --git a/docs/docs/assets/images/plugin/check_on_startup.png b/docs/docs/assets/images/plugin/check_on_startup.png new file mode 100644 index 000000000000..9d13686fff3e Binary files /dev/null and b/docs/docs/assets/images/plugin/check_on_startup.png differ diff --git a/docs/docs/assets/images/plugin/enable_events.png b/docs/docs/assets/images/plugin/enable_events.png new file mode 100644 index 000000000000..2ec751db23f0 Binary files /dev/null and b/docs/docs/assets/images/plugin/enable_events.png differ diff --git a/docs/docs/assets/images/plugin/enable_schedule.png b/docs/docs/assets/images/plugin/enable_schedule.png new file mode 100644 index 000000000000..3466038cb7b2 Binary files /dev/null and b/docs/docs/assets/images/plugin/enable_schedule.png differ diff --git a/docs/docs/assets/images/plugin/model_metadata_api.png b/docs/docs/assets/images/plugin/model_metadata_api.png new file mode 100644 index 000000000000..a62340bffa2f Binary files /dev/null and b/docs/docs/assets/images/plugin/model_metadata_api.png differ diff --git a/docs/docs/assets/images/plugin/mouser.png b/docs/docs/assets/images/plugin/mouser.png new file mode 100644 index 000000000000..4163d2f775cb Binary files /dev/null and b/docs/docs/assets/images/plugin/mouser.png differ diff --git a/docs/docs/assets/images/plugin/panel_with_dropdown.png b/docs/docs/assets/images/plugin/panel_with_dropdown.png new file mode 100644 index 000000000000..75ef0b5680f3 Binary files /dev/null and b/docs/docs/assets/images/plugin/panel_with_dropdown.png differ diff --git a/docs/docs/assets/images/plugin/panel_with_userinput.png b/docs/docs/assets/images/plugin/panel_with_userinput.png new file mode 100644 index 000000000000..cc5de0a6359e Binary files /dev/null and b/docs/docs/assets/images/plugin/panel_with_userinput.png differ diff --git a/docs/docs/assets/images/plugin/panels.png b/docs/docs/assets/images/plugin/panels.png new file mode 100644 index 000000000000..a16d6b0ed830 Binary files /dev/null and b/docs/docs/assets/images/plugin/panels.png differ diff --git a/docs/docs/assets/images/plugin/plugin_dataflow.png b/docs/docs/assets/images/plugin/plugin_dataflow.png new file mode 100644 index 000000000000..7b14aedba3a1 Binary files /dev/null and b/docs/docs/assets/images/plugin/plugin_dataflow.png differ diff --git a/docs/docs/assets/images/plugin/plugin_install_web.png b/docs/docs/assets/images/plugin/plugin_install_web.png new file mode 100644 index 000000000000..67ecc3bfd75f Binary files /dev/null and b/docs/docs/assets/images/plugin/plugin_install_web.png differ diff --git a/docs/docs/assets/images/plugin/print_label_select_plugin.png b/docs/docs/assets/images/plugin/print_label_select_plugin.png new file mode 100644 index 000000000000..f09fd8b5c963 Binary files /dev/null and b/docs/docs/assets/images/plugin/print_label_select_plugin.png differ diff --git a/docs/docs/assets/images/plugin/web_locate.png b/docs/docs/assets/images/plugin/web_locate.png new file mode 100644 index 000000000000..aba240a78974 Binary files /dev/null and b/docs/docs/assets/images/plugin/web_locate.png differ diff --git a/docs/docs/assets/images/report/add_report_template.png b/docs/docs/assets/images/report/add_report_template.png new file mode 100644 index 000000000000..3268a7ab26ee Binary files /dev/null and b/docs/docs/assets/images/report/add_report_template.png differ diff --git a/docs/docs/assets/images/report/bom_example.png b/docs/docs/assets/images/report/bom_example.png new file mode 100644 index 000000000000..a674631d806b Binary files /dev/null and b/docs/docs/assets/images/report/bom_example.png differ diff --git a/docs/docs/assets/images/report/filename_pattern.png b/docs/docs/assets/images/report/filename_pattern.png new file mode 100644 index 000000000000..ab6d7590ab79 Binary files /dev/null and b/docs/docs/assets/images/report/filename_pattern.png differ diff --git a/docs/docs/assets/images/report/filters_invalid.png b/docs/docs/assets/images/report/filters_invalid.png new file mode 100644 index 000000000000..7d72abefa96d Binary files /dev/null and b/docs/docs/assets/images/report/filters_invalid.png differ diff --git a/docs/docs/assets/images/report/filters_valid.png b/docs/docs/assets/images/report/filters_valid.png new file mode 100644 index 000000000000..777ef96b903e Binary files /dev/null and b/docs/docs/assets/images/report/filters_valid.png differ diff --git a/docs/docs/assets/images/report/label_build_example.png b/docs/docs/assets/images/report/label_build_example.png new file mode 100644 index 000000000000..e0e817f08914 Binary files /dev/null and b/docs/docs/assets/images/report/label_build_example.png differ diff --git a/docs/docs/assets/images/report/label_build_print.png b/docs/docs/assets/images/report/label_build_print.png new file mode 100644 index 000000000000..ec8985e02d63 Binary files /dev/null and b/docs/docs/assets/images/report/label_build_print.png differ diff --git a/docs/docs/assets/images/report/label_example.png b/docs/docs/assets/images/report/label_example.png new file mode 100644 index 000000000000..1f29d93b9b2f Binary files /dev/null and b/docs/docs/assets/images/report/label_example.png differ diff --git a/docs/docs/assets/images/report/label_stock_print_multiple.png b/docs/docs/assets/images/report/label_stock_print_multiple.png new file mode 100644 index 000000000000..fd005699f361 Binary files /dev/null and b/docs/docs/assets/images/report/label_stock_print_multiple.png differ diff --git a/docs/docs/assets/images/report/label_stock_print_single.png b/docs/docs/assets/images/report/label_stock_print_single.png new file mode 100644 index 000000000000..e04ef6cfdba3 Binary files /dev/null and b/docs/docs/assets/images/report/label_stock_print_single.png differ diff --git a/docs/docs/assets/images/report/label_with_parameters.png b/docs/docs/assets/images/report/label_with_parameters.png new file mode 100644 index 000000000000..b127849f1f8c Binary files /dev/null and b/docs/docs/assets/images/report/label_with_parameters.png differ diff --git a/docs/docs/assets/images/report/picklist.png b/docs/docs/assets/images/report/picklist.png new file mode 100644 index 000000000000..ceebf8ec26b7 Binary files /dev/null and b/docs/docs/assets/images/report/picklist.png differ diff --git a/docs/docs/assets/images/report/picklist_with_path.png b/docs/docs/assets/images/report/picklist_with_path.png new file mode 100644 index 000000000000..7b2c86384aff Binary files /dev/null and b/docs/docs/assets/images/report/picklist_with_path.png differ diff --git a/docs/docs/assets/images/report/report.png b/docs/docs/assets/images/report/report.png new file mode 100644 index 000000000000..5c70464e1d0e Binary files /dev/null and b/docs/docs/assets/images/report/report.png differ diff --git a/docs/docs/assets/images/report/report_template_admin.png b/docs/docs/assets/images/report/report_template_admin.png deleted file mode 100644 index 58512fb5e7e9..000000000000 Binary files a/docs/docs/assets/images/report/report_template_admin.png and /dev/null differ diff --git a/docs/docs/assets/images/report/template-editor.png b/docs/docs/assets/images/report/template-editor.png new file mode 100644 index 000000000000..20b8e8bbfecd Binary files /dev/null and b/docs/docs/assets/images/report/template-editor.png differ diff --git a/docs/docs/assets/images/report/template-table.png b/docs/docs/assets/images/report/template-table.png new file mode 100644 index 000000000000..36ec1164fdb2 Binary files /dev/null and b/docs/docs/assets/images/report/template-table.png differ diff --git a/docs/docs/assets/images/report/test_report_example.png b/docs/docs/assets/images/report/test_report_example.png new file mode 100644 index 000000000000..967704351211 Binary files /dev/null and b/docs/docs/assets/images/report/test_report_example.png differ diff --git a/docs/docs/assets/images/report/test_report_filters.png b/docs/docs/assets/images/report/test_report_filters.png new file mode 100644 index 000000000000..07802f9e7054 Binary files /dev/null and b/docs/docs/assets/images/report/test_report_filters.png differ diff --git a/docs/docs/assets/images/settings/currency.png b/docs/docs/assets/images/settings/currency.png new file mode 100644 index 000000000000..71da2ff37a53 Binary files /dev/null and b/docs/docs/assets/images/settings/currency.png differ diff --git a/docs/docs/assets/images/settings/project_codes.png b/docs/docs/assets/images/settings/project_codes.png new file mode 100644 index 000000000000..01546019e0a1 Binary files /dev/null and b/docs/docs/assets/images/settings/project_codes.png differ diff --git a/docs/docs/assets/images/settings/social_account_add.png b/docs/docs/assets/images/settings/social_account_add.png new file mode 100644 index 000000000000..145e507026ed Binary files /dev/null and b/docs/docs/assets/images/settings/social_account_add.png differ diff --git a/docs/docs/assets/images/settings/social_application_configure.png b/docs/docs/assets/images/settings/social_application_configure.png new file mode 100644 index 000000000000..6eeb02676108 Binary files /dev/null and b/docs/docs/assets/images/settings/social_application_configure.png differ diff --git a/docs/docs/assets/images/settings/sso_config.png b/docs/docs/assets/images/settings/sso_config.png new file mode 100644 index 000000000000..a10652c2ae0c Binary files /dev/null and b/docs/docs/assets/images/settings/sso_config.png differ diff --git a/docs/docs/assets/images/settings/sso_settings.png b/docs/docs/assets/images/settings/sso_settings.png new file mode 100644 index 000000000000..d13b2b2da8db Binary files /dev/null and b/docs/docs/assets/images/settings/sso_settings.png differ diff --git a/docs/docs/assets/images/settings/theme_dark.png b/docs/docs/assets/images/settings/theme_dark.png new file mode 100644 index 000000000000..09d9abb7f3e6 Binary files /dev/null and b/docs/docs/assets/images/settings/theme_dark.png differ diff --git a/docs/docs/assets/images/settings/theme_default.png b/docs/docs/assets/images/settings/theme_default.png new file mode 100644 index 000000000000..71eda3275076 Binary files /dev/null and b/docs/docs/assets/images/settings/theme_default.png differ diff --git a/docs/docs/assets/images/settings/user_account.png b/docs/docs/assets/images/settings/user_account.png new file mode 100644 index 000000000000..1f088a745a39 Binary files /dev/null and b/docs/docs/assets/images/settings/user_account.png differ diff --git a/docs/docs/assets/images/settings/user_display.png b/docs/docs/assets/images/settings/user_display.png new file mode 100644 index 000000000000..c0646323f529 Binary files /dev/null and b/docs/docs/assets/images/settings/user_display.png differ diff --git a/docs/docs/assets/images/settings/user_home.png b/docs/docs/assets/images/settings/user_home.png new file mode 100644 index 000000000000..9651100784bf Binary files /dev/null and b/docs/docs/assets/images/settings/user_home.png differ diff --git a/docs/docs/assets/images/settings/user_notifications.png b/docs/docs/assets/images/settings/user_notifications.png new file mode 100644 index 000000000000..ef1b8294f0f0 Binary files /dev/null and b/docs/docs/assets/images/settings/user_notifications.png differ diff --git a/docs/docs/assets/images/settings/user_reporting.png b/docs/docs/assets/images/settings/user_reporting.png new file mode 100644 index 000000000000..0b08c7914b10 Binary files /dev/null and b/docs/docs/assets/images/settings/user_reporting.png differ diff --git a/docs/docs/assets/images/settings/user_search.png b/docs/docs/assets/images/settings/user_search.png new file mode 100644 index 000000000000..399ebe7d24b8 Binary files /dev/null and b/docs/docs/assets/images/settings/user_search.png differ diff --git a/docs/docs/assets/images/start/auto-backup.png b/docs/docs/assets/images/start/auto-backup.png new file mode 100644 index 000000000000..2352538c3956 Binary files /dev/null and b/docs/docs/assets/images/start/auto-backup.png differ diff --git a/docs/docs/assets/images/stock/batch_and_serial.png b/docs/docs/assets/images/stock/batch_and_serial.png new file mode 100644 index 000000000000..0172a8747981 Binary files /dev/null and b/docs/docs/assets/images/stock/batch_and_serial.png differ diff --git a/docs/docs/assets/images/stock/batch_code_template.png b/docs/docs/assets/images/stock/batch_code_template.png new file mode 100644 index 000000000000..9c18860d3759 Binary files /dev/null and b/docs/docs/assets/images/stock/batch_code_template.png differ diff --git a/docs/docs/assets/images/stock/enable_stock_expiry.png b/docs/docs/assets/images/stock/enable_stock_expiry.png new file mode 100644 index 000000000000..98f4d574cbf7 Binary files /dev/null and b/docs/docs/assets/images/stock/enable_stock_expiry.png differ diff --git a/docs/docs/assets/images/stock/enable_stock_owner.png b/docs/docs/assets/images/stock/enable_stock_owner.png new file mode 100644 index 000000000000..8a43a955263a Binary files /dev/null and b/docs/docs/assets/images/stock/enable_stock_owner.png differ diff --git a/docs/docs/assets/images/stock/expiry_date_create.png b/docs/docs/assets/images/stock/expiry_date_create.png new file mode 100644 index 000000000000..143a260ea8a6 Binary files /dev/null and b/docs/docs/assets/images/stock/expiry_date_create.png differ diff --git a/docs/docs/assets/images/stock/expiry_date_edit.png b/docs/docs/assets/images/stock/expiry_date_edit.png new file mode 100644 index 000000000000..b090d8f2d922 Binary files /dev/null and b/docs/docs/assets/images/stock/expiry_date_edit.png differ diff --git a/docs/docs/assets/images/stock/item_expired.png b/docs/docs/assets/images/stock/item_expired.png new file mode 100644 index 000000000000..404844b1fe11 Binary files /dev/null and b/docs/docs/assets/images/stock/item_expired.png differ diff --git a/docs/docs/assets/images/stock/part_expiry.png b/docs/docs/assets/images/stock/part_expiry.png new file mode 100644 index 000000000000..002309b07a45 Binary files /dev/null and b/docs/docs/assets/images/stock/part_expiry.png differ diff --git a/docs/docs/assets/images/stock/part_expiry_display.png b/docs/docs/assets/images/stock/part_expiry_display.png new file mode 100644 index 000000000000..cf5a294bf8b9 Binary files /dev/null and b/docs/docs/assets/images/stock/part_expiry_display.png differ diff --git a/docs/docs/assets/images/stock/sell_build_expired_stock.png b/docs/docs/assets/images/stock/sell_build_expired_stock.png new file mode 100644 index 000000000000..095e0388f982 Binary files /dev/null and b/docs/docs/assets/images/stock/sell_build_expired_stock.png differ diff --git a/docs/docs/assets/images/stock/serial_error_quantity.png b/docs/docs/assets/images/stock/serial_error_quantity.png new file mode 100644 index 000000000000..cf1985f34ba2 Binary files /dev/null and b/docs/docs/assets/images/stock/serial_error_quantity.png differ diff --git a/docs/docs/assets/images/stock/serial_error_unique.png b/docs/docs/assets/images/stock/serial_error_unique.png new file mode 100644 index 000000000000..b38135379afb Binary files /dev/null and b/docs/docs/assets/images/stock/serial_error_unique.png differ diff --git a/docs/docs/assets/images/stock/serial_next.png b/docs/docs/assets/images/stock/serial_next.png new file mode 100644 index 000000000000..33311d6b63b7 Binary files /dev/null and b/docs/docs/assets/images/stock/serial_next.png differ diff --git a/docs/docs/assets/images/stock/serial_numbers_unique.png b/docs/docs/assets/images/stock/serial_numbers_unique.png new file mode 100644 index 000000000000..a794eae4b123 Binary files /dev/null and b/docs/docs/assets/images/stock/serial_numbers_unique.png differ diff --git a/docs/docs/assets/images/stock/stock_add.png b/docs/docs/assets/images/stock/stock_add.png new file mode 100644 index 000000000000..83353baf1fde Binary files /dev/null and b/docs/docs/assets/images/stock/stock_add.png differ diff --git a/docs/docs/assets/images/stock/stock_count.png b/docs/docs/assets/images/stock/stock_count.png new file mode 100644 index 000000000000..1de7f1dbfe4a Binary files /dev/null and b/docs/docs/assets/images/stock/stock_count.png differ diff --git a/docs/docs/assets/images/stock/stock_item_merge.png b/docs/docs/assets/images/stock/stock_item_merge.png new file mode 100644 index 000000000000..edd8a6f63faa Binary files /dev/null and b/docs/docs/assets/images/stock/stock_item_merge.png differ diff --git a/docs/docs/assets/images/stock/stock_item_owner.png b/docs/docs/assets/images/stock/stock_item_owner.png new file mode 100644 index 000000000000..250d6afe8571 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_item_owner.png differ diff --git a/docs/docs/assets/images/stock/stock_location_owner.png b/docs/docs/assets/images/stock/stock_location_owner.png new file mode 100644 index 000000000000..fc87415aef39 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_location_owner.png differ diff --git a/docs/docs/assets/images/stock/stock_move.png b/docs/docs/assets/images/stock/stock_move.png new file mode 100644 index 000000000000..a6b62ed5e67a Binary files /dev/null and b/docs/docs/assets/images/stock/stock_move.png differ diff --git a/docs/docs/assets/images/stock/stock_options.png b/docs/docs/assets/images/stock/stock_options.png new file mode 100644 index 000000000000..025032719368 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_options.png differ diff --git a/docs/docs/assets/images/stock/stock_owner_type.png b/docs/docs/assets/images/stock/stock_owner_type.png new file mode 100644 index 000000000000..e5de517291ec Binary files /dev/null and b/docs/docs/assets/images/stock/stock_owner_type.png differ diff --git a/docs/docs/assets/images/stock/stock_remove.png b/docs/docs/assets/images/stock/stock_remove.png new file mode 100644 index 000000000000..5fc27b5f02fb Binary files /dev/null and b/docs/docs/assets/images/stock/stock_remove.png differ diff --git a/docs/docs/assets/images/stock/stock_status_edit.png b/docs/docs/assets/images/stock/stock_status_edit.png new file mode 100644 index 000000000000..0c4793437b06 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_status_edit.png differ diff --git a/docs/docs/assets/images/stock/stock_status_edit_multiple.png b/docs/docs/assets/images/stock/stock_status_edit_multiple.png new file mode 100644 index 000000000000..d7d108c2e513 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_status_edit_multiple.png differ diff --git a/docs/docs/assets/images/stock/stock_status_label.png b/docs/docs/assets/images/stock/stock_status_label.png new file mode 100644 index 000000000000..41026949720f Binary files /dev/null and b/docs/docs/assets/images/stock/stock_status_label.png differ diff --git a/docs/docs/assets/images/stock/stock_table_expiry.png b/docs/docs/assets/images/stock/stock_table_expiry.png new file mode 100644 index 000000000000..b21fc80beca6 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_table_expiry.png differ diff --git a/docs/docs/assets/images/stock/test_results.png b/docs/docs/assets/images/stock/test_results.png new file mode 100644 index 000000000000..fe497d0c1809 Binary files /dev/null and b/docs/docs/assets/images/stock/test_results.png differ diff --git a/docs/docs/assets/logo.png b/docs/docs/assets/logo.png new file mode 100644 index 000000000000..e4626e0abeb6 Binary files /dev/null and b/docs/docs/assets/logo.png differ diff --git a/docs/docs/assets/open-in-new-custom.svg b/docs/docs/assets/open-in-new-custom.svg new file mode 100644 index 000000000000..06a967f61985 --- /dev/null +++ b/docs/docs/assets/open-in-new-custom.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/docs/assets/paypal-logo-small-min-300x136.png b/docs/docs/assets/paypal-logo-small-min-300x136.png new file mode 100644 index 000000000000..9a71b50863f7 Binary files /dev/null and b/docs/docs/assets/paypal-logo-small-min-300x136.png differ diff --git a/docs/docs/barcodes/barcodes.md b/docs/docs/barcodes/barcodes.md new file mode 100644 index 000000000000..22c07cc37fb4 --- /dev/null +++ b/docs/docs/barcodes/barcodes.md @@ -0,0 +1,58 @@ +--- +title: Barcodes +--- + +## Barcode Support + +InvenTree has native support for barcodes, which provides powerful functionality "out of the box", and can be easily extended: + +- Barcodes can be scanned [via the API](../api/api.md) +- The web interface supports barcode scanning +- Barcodes integrate natively [with the mobile app](../app/barcode.md) +- Custom barcodes can be assigned to items +- Barcodes can be embedded in [labels or reports](../report/barcodes.md) +- Barcode functionality can be [extended via plugins](../extend/plugins/barcode.md) + +### Barcode Data Types + +Barcodes can be linked with the following data model types: + +- [Part](../part/part.md#part) +- [Stock Item](../stock/stock.md#stock-item) +- [Stock Location](../stock/stock.md#stock-location) +- [Supplier Part](../order/company.md#supplier-parts) + +## Web Integration + +Barcode scanning can be enabled within the web interface. Barcode scanning in the web interface supports scanning via: + +- Keyboard style scanners (e.g. USB connected) +- Webcam (image processing) + +### Configuration + +Barcode scanning may need to be enabled for the web interface: + +{% with id="barcode_config", url="barcode/barcode_settings.png", description="Barcode settings" %} +{% include 'img.html' %} +{% endwith %} + +### Scanning + +When enabled, select the barcode icon in the top-right of the menu bar to scan a barcode. If the barcode is recognized by the system, the web browser will automatically navigate to the correct item: + +{% with id="barcode_scan", url="barcode/barcode_scan.png", description="Barcode scan" %} +{% include 'img.html' %} +{% endwith %} + +#### No Match Found + +If no match is found for the scanned barcode, the following error message is displayed: + +{% with id="barcode_no_match", url="barcode/barcode_no_match.png", description="No match for barcode" %} +{% include 'img.html' %} +{% endwith %} + +## App Integration + +Barcode scanning is a key feature of the [companion mobile app](../app/barcode.md). diff --git a/docs/docs/barcodes/custom.md b/docs/docs/barcodes/custom.md new file mode 100644 index 000000000000..52f5b062cdc2 --- /dev/null +++ b/docs/docs/barcodes/custom.md @@ -0,0 +1,41 @@ +--- +title: Custom Barcodes +--- + +## Custom Barcode Functionality + +With the provision of [internal](./internal.md) and [external](./external.md) barcode support, a lot of potential use-cases are already supported directly by InvenTree. + +However, if further customization is required, or a bespoke barcode workflow which is not supported already, then this can easily be implemented using the [plugin system](../extend/plugins/barcode.md). + +A custom barcode plugin can be used to (for example) perform a particular action when a barcode is scanned. + +### Scanning a Barcode + +To scan (process) a barcode, the barcode data is sent via a `POST` request to the `/api/barcode/` API endpoint. + +### Barcode Scanning Priority + +When a barcode is scanned (sent to the `/barcode/scan/` endpoint), each available "plugin" is checked to see if it returns a valid result for the provided barcode data. The first plugin to return a result prevents any further plugins from being checked. + +The barcode is tested as follows, in decreasing order of priority: + +- [Internal Barcode Plugin](./internal.md) +- [External Barcode Plugin](./external.md) +- [Custom Barcode Plugins](../extend/plugins/barcode.md) + +!!! tip "Plugin Loading Order" + The first custom plugin to return a result "wins". As the loading order of custom plugins is not defined (or configurable), take special care if you are running multiple plugins which support barcode actions. + +## Builtin Supplier Barcode Plugins + +InvenTree comes with a few builtin supplier plugins, which handle their respective barcode formats. + +Scanning a supplier barcode for a supplied part will link to the corresponding supplier part if the [SKU](../report/context_variables.md#supplierpart) from the barcode could be matched. + +The following suppliers (and barcode formats) are currently supported: + +- DigiKey (2D Data Matrix code) +- Mouser (2D Data Matrix code) +- LCSC (QR code) +- TME (QR code & 2D Data Matrix code) diff --git a/docs/docs/barcodes/external.md b/docs/docs/barcodes/external.md new file mode 100644 index 000000000000..fb837d3fff81 --- /dev/null +++ b/docs/docs/barcodes/external.md @@ -0,0 +1,45 @@ +--- +title: External Barcodes +--- + +## External Barcodes + +In addition to defining an [internal barcode format](./internal.md), models which have associated barcode information also allow arbitrary external (third party) barcodes to be assigned or "linked" to items in the database. + +For example, you have just purchased a reel of capacitors from a supplier, which comes provided with a sufficiently unique barcode or qr-code. Instead of printing an *internal* barcode, the existing barcode can be scanned and *linked* to the specific reel (which is a [Stock Item](../stock/stock.md#stock-item)). + +Linking to external barcodes allows an alternative barcode workflow, which may be especially useful when dealing with in-feed components which are received from external suppliers. + +!!! tip "Dealer's Choice" + The use of external barcodes is entirely up to the user, if it is deemed to be convenient. + +## Linking Barcodes + +### Via the API + +Facility for barcode linking (and un-linking) is provided via the [API](../api/api.md). + +- The `/api/barcode/link/` API endpoint is used to link a barcode with an existing database item +- The `/api/barcode/unlink/` API endpoint is used to unlink a barcode from an existing database item + +### Via the Web Interface + +To link an arbitrary barcode, select the *Link Barcode* action as shown below: + +{% with id="barcode_link_1", url="barcode/barcode_link_1.png", description="Link barcode" %} +{% include 'img.html' %} +{% endwith %} + +{% with id="barcode_link_2", url="barcode/barcode_link_2.png", description="Link barcode" %} +{% include 'img.html' %} +{% endwith %} + +If an item already has a linked barcode, it can be un-linked by selecting the *Unlink Barcode* action: + +{% with id="barcode_unlink", url="barcode/barcode_unlink.png", description="Unlink barcode" %} +{% include 'img.html' %} +{% endwith %} + +### Via the App + +External barcodes can be linked to (or unlinked from) database items via the [mobile app](../app/barcode.md) diff --git a/docs/docs/barcodes/internal.md b/docs/docs/barcodes/internal.md new file mode 100644 index 000000000000..04dcd6e6c36a --- /dev/null +++ b/docs/docs/barcodes/internal.md @@ -0,0 +1,36 @@ +--- +title: Internal Barcodes +--- + +## Internal Barcodes + +InvenTree defines an internal format for generating barcodes for various items. This format uses a simple JSON-style string to uniquely identify an item in the database. + +Some simple examples of this format are shown below: + +| Model Type | Example Barcode | +| --- | --- | +| Part | `{% raw %}{"part": 10}{% endraw %}` | +| Stock Item | `{% raw %}{"stockitem": 123}{% endraw %}` | +| Supplier Part | `{% raw %}{"supplierpart": 99}{% endraw %}` | + +The numerical ID value used is the *Primary Key* (PK) of the particular object in the database. + +## Report Integration + +This barcode format can be used to generate 1D or 2D barcodes (e.g. for [labels and reports](../report/barcodes.md)) + +To access the raw barcode information string within a template, use the `.barcode` attribute, and pass it into a barcode generation method. + +### Example: QR Code + +For example, to render a QR-Code image for a part instance: + +```html +{% raw %} + +{% endraw %} +``` + +!!! info "Barcode Formatting" + Refer to the [report documentation](../report/barcodes.md) for further information on formatting barcode data diff --git a/docs/docs/build/allocate.md b/docs/docs/build/allocate.md new file mode 100644 index 000000000000..06512b4c1fc1 --- /dev/null +++ b/docs/docs/build/allocate.md @@ -0,0 +1,154 @@ +--- +title: Build Allocation +--- + +## Build Allocation + +Allocating stock items to a build order signals an intent that those stock items will be removed from the InvenTree database once the build order is completed. + +Depending on the particular requirements of the build, and your stock control setup, allocating stock items to a build can be a complex task. In this regard, InvenTree provides an allocation interface which attempts to keep the number of user interactions required to a minimum. + +!!! warning "Build Completion" + Marking a build as *complete* will remove allocated items from stock. This operation cannot be reversed, so take care! + +### Untracked vs Tracked Stock + +Before continuing, it is important that the difference between *untracked* and *tracked* parts, as they impose different requirements when it comes to stock allocation. + +#### Untracked Stock + +*Untracked* stock items are consumed against the build order, once the order is completed. When a build order is completed, any allocated stock items which are not [trackable](../part/trackable.md) are marked as *consumed*. These items remain in the InvenTree database, but are unavailable for use in any stock operations. + +!!! info "Example: Untracked Parts" + You require 15 x 47K resistors to make a batch of PCBs. You have a reel of 1,000 resistors which you allocate to the build. At completion of the build, the available stock quantity is reduced to 985. + +#### Tracked Stock + +[Tracked](../part/trackable.md) stock items, on the other hand, require special attention. These are parts which we wish to track against specific [build outputs](./output.md). When the build order is completed, *tracked* stock items are installed *within* the assembled build output. + +!!! info "Example: Tracked Parts" + The assembled PCB (in the example above) is a *trackable* part, and is given a serial number #001. The PCB is then used to make a larger assembly in a subsequent build order. At the completion of that build order, the tracked PCB is *installed* in the assembly. + +#### BOM Considerations + +A [Bill of Materials](./bom.md) to generate an assembly may consist of a mixture of *untracked* and *tracked* components. The build order process can facilitate this, as documentated in the sections below. + +### Tracked Build Outputs + +If a Build Order is created for an assembled part which is itself designed as *trackable*, some extra restrictions apply: + +- Build outputs must be single quantity +- Build outputs must be serialized as they are created + +## Allocating Untracked Stock + +Untracked stock items are allocated against the *Build Order* itself. We do not need to track which *Build Output* these items will be installed into, and so the allocation process can be simplified. + +Navigate to the *Allocate Stock* tab to view the stock allocation table: + +{% with id="build_allocate_detail", url="build/build_allocate_detail.png", description="Allocate stock" %} +{% include "img.html" %} +{% endwith %} + +In this example, there are two BOM line items which have been partially allocated to the build. Each line has a progress bar indicating how much of the required stock has been allocated. + +In each row, pressing the icon expands the row, showing a list of stock items which have been allocated against this build. + +!!! info "Multiple Allocations" + Note that multiple stock items can be allocated to the given BOM line, if a single stock item does not have sufficient stock + +{% with id="build_allocation_expand", url="build/build_allocation_expand.png", description="Allocate expand" %} +{% include "img.html" %} +{% endwith %} + +## Manual Stock Allocation + +For each line in the BOM, stock will be automatically allocated if one (and only one) stock item (for the referenced part) is found (within the specified *source location* for the build): + +Selecting *Allocate Stock* opens a dialog window which displays the stock items which will be allocated to the build during the auto allocation process: + +{% with id="build_auto", url="build/build_auto_allocate.png", description="Auto allocate" %} +{% include "img.html" %} +{% endwith %} + +Note here that there are two parts in the BOM which can be automatically allocated, as they only have a single corresponding StockItem available. +However the other BOM line item exists in multiple locations, and thus cannot be automatically allocated. These will need to be manually selected by the user. + +### Row Allocation + +Stock can be manually allocated to the build as required, using the *Allocate stock* button available in each row of the allocation table + +### Edit Allocations + +Stock allocations can be manually adjusted or deleted using the action buttons available in each row of the allocation table. + +### Deallocate Stock + +The *Deallocate Stock* button can be used to remove all allocations of untracked stock items against the build order. + +## Automatic Stock Allocation + +To speed up the allocation process, the *Auto Allocate* button can be used to allocate untracked stock items to the build. Automatic allocation of stock items does not work in every situation, as a number of criteria must be met. + +The *Automatic Allocation* dialog is presented as shown below: + +{% with id="auto_allocate_dialog", url="build/auto_allocate_dialog.png", description="Automatic allocation dialog" %} +{% include "img.html" %} +{% endwith %} + +**Source Location** + +Select the master location where stock items are to be allocated from. Leave this input blank to allocate stock items from any available location. + +**Interchangeable Stock** + +Set this option to *True* to signal that stock items can be used interchangeably. This means that in the case where multiple stock items are available, the auto-allocation routine does not care which stock item it uses. + +!!! warning "Take Care" + If the *Interchangeable Stock* option is enabled, and there are multiple stock items available, the results of the automatic allocation algorithm may somewhat unexpected. + +!!! info "Example" + Let's say that we have 5 reels of our *C_100nF_0603* capacitor, each with 4,000 parts available. If we do not mind which of these reels the stock should be taken from, we enable the *Interchangeable Stock* option in the dialog above. In this case, the stock will be allocated from one of these reels, and eventually subtracted from stock when the build is completed. + +**Substitute Stock** + +Set this option to *True* to allow substitute parts (as specified by the BOM) to be allocated, if the primary parts are not available. + +## Allocating Tracked Stock + +Allocation of tracked stock items is slightly more complex. Instead of being allocated against the *Build Order*, tracked stock items must be allocated against an individual *Build Output*. + +Allocating tracked stock items to particular build outputs is performed in the *Pending Items* 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: + +{% with id="build_allocate_tracked_parts", url="build/build_allocate_tracked_parts.png", description="Allocate tracked parts" %} +{% include "img.html" %} +{% endwith %} + +Here we can see that the incomplete build outputs (serial numbers 15 and 14) now have a progress bar indicating the status of tracked stock item allocation: + +- Serial number 15 has been fully allocated, and can be completed +- Serial number 14 has not been fully allocated, and cannot yet be completed + +### Allocated Stock + +*Tracked* stock items which are allocated against the selected build output will be removed from stock, and installed "inside" the output assembly. The allocated stock items will still exist in the InvenTree database, however will no longer be available for regular stock actions. + +!!! 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 + +## Completing a Build + +!!! warning "Complete Build Outputs" + A build order cannot be completed if there are outstanding build outputs. Ensure that all [build outputs](./output.md) are completed first. + +Once all build outputs have been completed, the build order itself can be completed by selecting the *Complete Build* button: + +{% with id="build_complete", url="build/complete_build.png", description="Complete build order" %} +{% include "img.html" %} +{% endwith %} + +### Allocated Stock + +All *untracked* stock items which are allocated against this build will be removed from stock, and *consumed* by the build order. These consumed items can be later viewed in the [consumed stock tab](./build.md#consumed-stock). diff --git a/docs/docs/build/bom.md b/docs/docs/build/bom.md new file mode 100644 index 000000000000..281e801d41bb --- /dev/null +++ b/docs/docs/build/bom.md @@ -0,0 +1,147 @@ +--- +title: Bill of Materials +--- + +## Bill of Materials + +A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create builds](./build.md) and allocate inventory. + +A part which can be built from other sub components is called an *Assembly*. + +## BOM Line Items + +A BOM for a particular assembly is comprised of a number (zero or more) of BOM "Line Items", each of which has the following properties: + +| Property | Description | +| --- | --- | +| Part | A reference to another *Part* object which is required to build this assembly | +| Quantity | The quantity of *Part* required for the assembly | +| Reference | Optional reference field to describe the BOM Line Item, e.g. part designator | +| Overage | Estimated losses for a build. Can be expressed as absolute values (e.g. 1, 7, etc) or as a percentage (e.g. 2%) | +| Consumable | A boolean field which indicates whether this BOM Line Item is *consumable* | +| Inherited | A boolean field which indicates whether this BOM Line Item will be "inherited" by BOMs for parts which are a variant (or sub-variant) of the part for which this BOM is defined. | +| Optional | A boolean field which indicates if this BOM Line Item is "optional" | +| Note | Optional note field for additional information + +### Consumable BOM Line Items + +If a BOM line item is marked as *consumable*, this means that while the part and quantity information is tracked in the BOM, this line item does not get allocated to a [Build Order](./build.md). This may be useful for certain items that the user does not wish to track through the build process, as they may be low value, in abundant stock, or otherwise complicated to track. + +In the example below, see that the *Wood Screw* line item is marked as consumable. It is clear that 12 screws are required for each assembled *Table*, but the screws will not be tracked through the build process, as this line item is marked as *consumable* + +{% with id="bom_item_consumable", url="build/bom_consumable_item.png", description="Consumable BOM Item" %} +{% include 'img.html' %} +{% endwith %} + +Further, in the [Build Order](./build.md) stock allocation table, we see that this line item cannot be allocated, as it is *consumable*: + +{% with id="build_item_consumable", url="build/build_consumable_item.png", description="Consumable Build Item" %} +{% include 'img.html' %} +{% endwith %} + +### Substitute BOM Line Items + +Where alternative parts can be used when building an assembly, these parts are assigned as *Substitute* parts in the Bill of Materials. A particular line item may have multiple substitute parts assigned to it. When allocating stock to a [Build Order](./build.md), stock items associated with any of the substitute parts may be allocated against the particular line item. + +!!! tip "Available Quantity" + When calculating the *available quantity* of a particular line item in a BOM, stock quantities associated with substitute parts are included in the calculation. + +### Inherited BOM Line Items + +When using the InvenTree [template / variant](../part/template.md) feature, it may be useful to make use of the *inheritance* capability of BOM Line Items. + +If a BOM Line Item is designed as *Inherited*, it will be automatically included in the BOM of any part which is a variant (or sub-variant) of the part for which the BOM Line Item is defined. + +This is particularly useful if a template part is defined with the "common" BOM items which exist for all variants of that template. + +Consider the example diagram below: + +{% with id="inherited_bom", url="build/inherited_bom.png", description="Inherited BOM Line Items" %} +{% include 'img.html' %} +{% endwith %} + +**Template Part A** has two BOM line items defined: *A1* and *A2*. + +- *A1* is inherited by all variant parts underneath *Template Part A* +- *A2* is not inherited, and is only included in the BOM for *Template Part A* + +**Variant B** has two line items: + +- *A1* is inherited from parent part *A* +- *B1* is defined for part *B* (and is also defined as an inherited BOM Line Item) + +**Variant C** + +- *A1* inherited from *A* +- *C1* defined for *C* + +**Variant D** + +- *A1* inherited from *A* +- *B1* inherited from *B* +- *D1* defined for *D* + +**Variant E** + +- Well, you get the idea. + +Note that inherited BOM Line Items only flow "downwards" in the variant inheritance chain. Parts which are higher up the variant chain cannot inherit BOM items from child parts. + +!!! info "Editing Inherited Items" + When editing an inherited BOM Line Item for a template part, the changes are automatically reflected in the BOM of any variant parts. + +## BOM Creation + +BOMs can be created manually, by adjusting individual line items, or by upload an existing BOM file. + +### Add BOM Item + +To manually add a BOM item, navigate to the part/assembly detail page then click on the "BOM" tab. On top of the tab view, click on the icon then, after the page reloads, click on the icon. + +The `Create BOM Item` form will be displayed: +{% with id="bom_add_item", url="build/bom_add_item.png", description="Create BOM Item Form" %} +{% include 'img.html' %} +{% endwith %} + +Fill-out the `Quantity` (required), `Reference`, `Overage` and `Note` (optional) fields then click on Submit to add the BOM item to this part's BOM. + +### Add Substitute for BOM Item + +To manually add a substitute for a BOM item, click on the icon in the *Actions* columns. + +The `Edit BOM Item Substitutes` form will be displayed: +{% with id="bom_substitute_item", url="build/bom_substitute_item.png", description="Edit BOM Item Substitutes" %} +{% include 'img.html' %} +{% endwith %} + +Select a part in the list and click on "Add Substitute" button to confirm. + + +### Validate BOM + +After [adding BOM items manually](#add-bom-item) or [uploading a BOM file](./bom_import.md), you should see the following view: +{% with id="bom_invalid", url="build/bom_invalid.png", description="Invalid BOM View" %} +{% include 'img.html' %} +{% endwith %} + +The first message in the red box `The BOM for PCBA TEST has changed, and must be validated.` points out that InvenTree BOM needs to be "validated". BOM validation is a way to ensure a BOM does not have duplicate items/parts. + +To process with BOM validation, click on the icon and the `Validate BOM` form will be displayed. Click one the "Validate" switch then click on Submit + +{% with id="bom_valid", url="build/bom_valid.png", description="Valid BOM View" %} +{% include 'img.html' %} +{% endwith %} + +## Multi Level BOMs + +Multi-level (hierarchical) BOMs are natively supported by InvenTree. A Bill of Materials (BOM) can contain sub-assemblies which themselves have a defined BOM. This can continue for an unlimited number of levels. + +When viewing a BOM table, sub-assemblies are not loaded by default, but can be loaded "on demand" by pressing the icon associated with the particular subassembly: + +{% with id="bom_flat", url="build/bom_flat.png", description="Flat BOM Table" %} +{% include 'img.html' %} +{% endwith %} + +{% with id="bom_expanded", url="build/bom_expanded.png", description="Expanded BOM Table" %} +{% include 'img.html' %} +{% endwith %} diff --git a/docs/docs/build/bom_export.md b/docs/docs/build/bom_export.md new file mode 100644 index 000000000000..541b48128606 --- /dev/null +++ b/docs/docs/build/bom_export.md @@ -0,0 +1,44 @@ +--- +title: BOM Export +--- + +## Exporting BOM Data + + +BOM data can be exported for any given assembly by selecting the *Export BOM* action from the BOM actions menu. + +You will be presented with the *Export BOM* options dialog, shown below: + +{% with id="bom_export", url="build/bom_export.png", description="Export BOM Data" %} +{% include 'img.html' %} +{% endwith %} + +### BOM Export Options + +**Format** + +Select the file format for the exported BOM data + +**Multi Level BOM** + +If selected, BOM data will be included for any subassemblies. If not selected, only top level (flat) BOM data will be exported. + +**Levels** + +Define the maximum level of data to export for subassemblies. If set to zero, all levels of subassembly data will be exported. + +**Include Parameter Data** + +Include part parameter data in the exported dataset. + +**Include Stock Data** + +Include part stock level information in the exported dataset. + +**Include Manufacturer Data** + +Include part manufacturer information in the exported dataset. + +**Include Supplier Data** + +Include part supplier information in the exported dataset. diff --git a/docs/docs/build/bom_import.md b/docs/docs/build/bom_import.md new file mode 100644 index 000000000000..95c4cd572e26 --- /dev/null +++ b/docs/docs/build/bom_import.md @@ -0,0 +1,49 @@ +--- +title: BOM Import +--- + +## Importing BOM Data + +Uploading a BOM to InvenTree is a three steps process: + +1. Upload BOM file +0. Select matching InvenTree fields +0. Select matching InvenTree parts. + +To upload a BOM file, navigate to the part/assembly detail page then click on the "BOM" tab. On top of the tab view, click on the icon then, after the page reloads, click on the icon. + +The following view will load: +{% with id="bom_upload_file", url="build/bom_upload_file.png", description="BOM Upload View" %} +{% include 'img.html' %} +{% endwith %} + +#### Upload BOM File + +Click on the "Choose File" button, select your BOM file when prompted then click on the "Upload File" button. + +!!! info "BOM Formats" + The following BOM file formats are supported: CSV, TSV, XLS, XLSX, JSON and YAML + +#### Select Fields + +Once the BOM file is uploaded, the following view will load: +{% with id="bom_select_fields", url="build/bom_select_fields.png", description="Select Fields View" %} +{% include 'img.html' %} +{% endwith %} + +InvenTree will attempt to automatically match the BOM file columns with InvenTree part fields. `Part_Name` is a **required** field for the upload process and moving on to the next step. Specifying the `Part_IPN` field matching is very powerful as it allows to create direct pointers to InvenTree parts. + +Once you have selected the corresponding InvenTree fields, click on the "Submit Selections" button to move on to the next step. + +#### Select Parts + +Once the BOM file columns and InvenTree fields are correctly matched, the following view will load: +{% with id="bom_select_parts", url="build/bom_select_parts.png", description="Select Parts View" %} +{% include 'img.html' %} +{% endwith %} + +InvenTree automatically tries to match parts from the BOM file with parts in its database. For parts that are found in InvenTree's database, the `Select Part` field selection will automatically point to the matching database part. + +In this view, you can also edit the parts `Reference` and `Quantity` fields. + +Once you have selected the corresponding InvenTree parts, click on the "Submit BOM" button to complete the BOM upload process. diff --git a/docs/docs/build/build.md b/docs/docs/build/build.md new file mode 100644 index 000000000000..5c889cc80842 --- /dev/null +++ b/docs/docs/build/build.md @@ -0,0 +1,236 @@ +--- +title: Build Orders +--- + +## Build Orders + +A *Build Order* is used to create new stock by assembling component parts, according to a [Bill of Materials](./bom.md) (BOM). + +A BOM can be specified for any [Part](../part/part.md) which is designated as an *Assembly*. The BOM consists of other Parts which are designated as *Components*. + +A *Build Order* uses the BOM to allocate stock items to the assembly process. As the *Build Order* is completed, the required stock quantities are subtracted from allocated stock items. + +### View Build Orders + +To navigate to the Build Order display, select *Build* from the main navigation menu: + +{% with id="build_display", url="build/build_display.png", description="Display Builds" %} +{% include "img.html" %} +{% endwith %} + +#### Table View + +*Table View* provides a table of Build Orders, which can be filtered to only show the orders you are interested in. + +{% with id="build_list", url="build/build_list.png", description="Build List" %} +{% include "img.html" %} +{% endwith %} + +#### Tree View + +*Tree View* also provides a tabulated view of Build Orders. Orders are displayed in a hierarchical manner, showing any parent / child relationships between different build orders. + +{% with id="build_tree", url="build/build_tree.png", description="Build Tree" %} +{% include "img.html" %} +{% endwith %} + +#### Calendar View + +*Calendar View* shows a calendar display with upcoming build orders, based on the various dates specified for each build. + +## Build Order Details + +### Build Order Reference + +Each Build Order is uniquely identified by its *Reference* field. Read more about [reference fields](../settings/reference.md). + +### Build Parameters + +The following parameters are available for each Build Order, and can be edited by the user: + +| Parameter | Description | +| --- | --- | +| Reference | Build Order reference e.g. '001' | +| Description | Description of the Build Order | +| Part | Link to the *Part* which will be created from the Build Order | +| Quantity | Number of stock items which will be created from this build | +| Sales Order | Link to a *Sales Order* to which the build outputs will be allocated | +| Source Location | Stock location to source stock items from (blank = all locations) | +| Destination Location | Stock location where the build outputs will be located | +| Target Date | Target date for build completion | +| Responsible | User (or group of users) who is responsible for the build | +| External Link | Link to external webpage | +| Notes | Build notes, supports markdown | + +### Build Output + +A *Build Output* creates a new stock instance of the assembly part, of a specified quantity. Each *Build Order* requires at least one build output. Multiple build outputs can be specified if the build is completed in batches. + +Read more about build outputs [here](./output.md). + +### Build Status + +Each *Build Order* has an associated *Status* flag, which indicates the state of the build: + +| Status | Description | +| ----------- | ----------- | +| `Pending` | Build has been created and build is ready for subpart allocation | +| `Production` | One or more build outputs have been created for this build | +| `Cancelled` | Build has been cancelled | +| `Completed` | Build has been completed | + +### Stock Allocations + +When a *Build Order* is created, we then have the ability to *allocate* stock items against that build order. The particular parts we need to allocate against the build are specified by the BOM for the part we are assembling. + +- A *Stock Allocation* links a certain quantity of a given *Stock Item* to the build. +- At least one stock allocation is required for each line in the BOM +- Multiple stock allocations can be made against a BOM line if a particular stock item does not have sufficient quantity for the build + +!!! info "Example - Stock Allocation" + Let's say that to assembly a single "Widget", we require 2 "flanges". So, to complete a build of 10 "Widgets", 20 "flanges" will be required. We *allocate* 20 flanged against this build order. + +Allocating stock to a build does not actually subtrack the stock from the database. Allocations signal an *intent* to take that stock for the purpose of this build. Stock allocations are actioned at the completion of a build. + +!!! info "Part Allocation Information" + Any part which has stock allocated to a build order will indicate this on the part information page. + +For further information, refer to the [stock allocation documentation](./allocate.md). + +## Build Order Display + +The detail view for a single build order provides multiple display tabs, as follows: + +### Build Details + +The *Build Details* tab provides an overview of the Build Order: + +{% with id="build_details", url="build/build_details.png", description="Details tab" %} +{% include "img.html" %} +{% endwith %} + +### Allocate Stock + +The *Allocate Stock* tab provides an interface to allocate required stock (as specified by the BOM) to the build: + +{% with id="build_allocate", url="build/build_allocate.png", description="Allocation tab" %} +{% include "img.html" %} +{% endwith %} + +The allocation table (as shown above) shows the stock allocation progress for this build. In the example above, there are two BOM lines, which have been partially allocated. + +!!! info "Completed Builds" + The *Allocate Stock* tab is not available if the build has been completed! + +### Consumed Stock + +The *Consumed Stock* tab displays all stock items which have been *consumed* by this build order. These stock items remain in the database after the build order has been completed, but are no longer available for use. + +- [Tracked stock items](./allocate.md#tracked-stock) are consumed by specific build outputs +- [Untracked stock items](./allocate.md#untracked-stock) are consumed by the build order + +### Build Outputs + +The *Build Outputs* tab shows the [build outputs](./output.md) (created stock items) associated with this build. + +As shown below, there are separate panels for *incomplete* and *completed* build outputs. + +{% with id="build_outputs", url="build/build_outputs.png", description="Outputs tab" %} +{% include "img.html" %} +{% endwith %} + +!!! info "Example: Build Outputs" + In the example image above, a single output (serial number 2) has been completed, while serial numbers 1 and 4 are still in progress. + +- Build outputs can be created from this screen, by selecting the *Create New Output* button +- Outputs which are "in progress" can be completed or cancelled +- Completed outputs (which are simply *stock items*) can be viewed in the stock table at the bottom of the screen + +### Child Builds + +If there exist any build orders which are *children* of the selected build order, they are displayed in the *Child Builds* tab: + +{% with id="build_childs", url="build/build_childs.png", description="Child builds tab" %} +{% include "img.html" %} +{% endwith %} + +### Attachments + +Files attachments can be uploaded against the build order, and displayed in the *Attachments* tab: + +{% with id="build_attachments", url="build/build_attachments.png", description="Attachments tab" %} +{% include "img.html" %} +{% endwith %} + +### Notes + +Build order notes (which support markdown formatting) are displayed in the *Notes* tab: + +{% with id="build_notes", url="build/build_notes.png", description="Notes tab" %} +{% include "img.html" %} +{% endwith %} + +## Create Build Order + +To create a build order for your part, you have two options: + +### Part Detail Page + +- Navigate to the detail page for the assembly part you wish to create +- Select the *Build Orders* tab +- Select *Start new Build* + +{% with id="build_create_from_part", url="build/build_create_from_part.png", description="Create build from Part view" %} +{% include "img.html" %} +{% endwith %} + +### Build Order Page + +- Navigate to the Build Order overview page +- Click on *New Build Order* + +Fill-out the form as required, then click the "Submit" button to create the build. + +## Complete Build Order + +To complete a build, click on icon on the build detail page, the `Complete Build` form will be displayed. + +The form will validate the build order is ready to be completed, and will prevent you from continuing if any of the below conditions are present unless you select one of the presented options to override the validation and accept completion of the build anyway. + +!!! info "Incomplete Build" + If the warning message `Required build quantity has not been completed` is shown, you have build outputs that have not yet been completed. + + In the unlikely event that you wish to proceed despite this, you can toggle the `Accept Incomplete` option to true to override the error and allow completion without the required number of build outputs. + +!!! info "Incomplete Allocation" + If the warning message `Require stock has not been fully allocated` is shown, make sure to allocate stock matching all BOM items to the build before proceeding with build completion. + + If you wish to complete the build despite the missing parts, toggle the `Accept Unallocated` option to true to override the warning and allow completion with unallocated parts. + +!!! info "Overallocated Stock Items" + If the warning message `Some stock items have been overallocated` is shown, you have more stock than required by the BOM for the part being built allocated to the build order. By default the `Not permissted` option is selected and you will need to return to the allocation screen and remove the extra items before the build can be completed. + + Alternatively, you can select `Accept as consumed by this build order` to continue with the allocation and remove the extra items from stock (e.g. if they were destroyed during build), or select `Deallocate before completing this build order` if you would like the extra items to be returned to stock for use in future builds. + + +Select a `Location` to store the resulting parts from the build then click on the confirmation switch. +Finally, click on the "Complete Build" button to process the build completion. + +!!! warning "Completed Build" + **A completed build cannot be re-opened**. Make sure to use the confirm only if you are certain that the build is complete. + +## Cancel Build Order + +To cancel a build, click on icon on the build detail page. + +The `Cancel Build` form will be displayed, click on the confirmation switch then click on the "Cancel Build" button to process the build cancellation. + +!!! warning "Cancelled Build" + **A cancelled build cannot be re-opened**. Make sure to use the cancel option only if you are certain that the build won't be processed. + +## Overdue Builds + +Build orders may (optionally) have a target complete date specified. If this date is reached but the build order remains incomplete, then the build is considered *overdue*. + +- Builds can be filtered by overdue status in the build list +- Overdue builds will be displayed on the home page diff --git a/docs/docs/build/example.md b/docs/docs/build/example.md new file mode 100644 index 000000000000..624f83fa959b --- /dev/null +++ b/docs/docs/build/example.md @@ -0,0 +1,57 @@ +--- +title: Build Order Example +--- + +## Build Order Example + +For example, let's say we wish to create 10 new "Widgets". We create a new build for the widget, which signals an *intent* to assemble the "Widget" in quantity 10. As the *Widget* is a serialized part, with tracked subcomponents, the build outputs must themselves be serialized. This means that we need to generate 10 separate build outputs for this build order. + +### Create Build Order + +First, create a new build order for the *Widget* assembly: + +{% with id="build_example_create", url="build/build_example_create.png", description="Create build order" %} +{% include "img.html" %} +{% endwith %} + +### Generate Build Outputs + +Generate build outputs for this build order. As this is a tracked item, with tracked subcomponents, the build outputs must be serialized: + +{% with id="build_example_create_outputs", url="build/build_example_create_outputs.png", description="Create build outputs" %} +{% include "img.html" %} +{% endwith %} + +A list of new build outputs will have now been generated: + +{% with id="build_example_incomplete_list", url="build/build_example_incomplete_list.png", description="Incomplete build outputs" %} +{% include "img.html" %} +{% endwith %} + +### Allocate Untracked Stock + +Untracked stock items are allocated to the build order in the *Allocate Stock* tab: + +{% with id="build_example_allocate_untracked", url="build/build_example_allocate_untracked.png", description="Allocated Untracked Stock" %} +{% include "img.html" %} +{% endwith %} + +### Allocate Tracked Stock + +Tracked stock items are allocated to individual build outputs: + +{% with id="build_example_allocate_tracked", url="build/build_example_allocated_tracked.png", description="Allocated Tracked Stock" %} +{% include "img.html" %} +{% endwith %} + +### Complete Build Outputs + +Mark each build output as complete: + +{% with id="build_example_complete_outputs", url="build/build_example_complete_outputs.png", description="Complete Build Outputs" %} +{% include "img.html" %} +{% endwith %} + +### Complete Build Order + +Once the build outputs have been completed, and all stock has been allocated, the build order can be completed. diff --git a/docs/docs/build/output.md b/docs/docs/build/output.md new file mode 100644 index 000000000000..ebccedc33879 --- /dev/null +++ b/docs/docs/build/output.md @@ -0,0 +1,119 @@ +--- +title: Build Outputs +--- + +## Build Outputs + +With reference to a [build order](./build.md), a *Build Output* is a finished product which is expected to be produced by completing the order. + +- A single build order may have multiple build outputs which are produced at different times or by different operators. +- An individual build output may be a single unit, or a batch of units +- Serial numbers and batch codes can be associated with a build output + +### Incomplete Outputs + +The *Incomplete Outputs* tab displays any outstanding / in-progress build outputs for the current build order. + +{% with id="build-outputs-incomplete", url="build/build_outputs_incomplete.png", description="Incomplete build outputs" %} +{% include "img.html" %} +{% endwith %} + +### Completed Outputs + +The *Completed Outputs* tab displays any [completed](#complete-build-output) or [scrapped](#scrap-build-output) outputs for the current build order. + +{% with id="build-outputs-complete", url="build/build_outputs_complete.png", description="Complete build outputs" %} +{% include "img.html" %} +{% endwith %} + +## Create Build Output + +Create a new build output by pressing the New Build Output button under the [incomplete outputs](#incomplete-outputs) tab: + +{% with id="build_output_create", url="build/build_output_create.png", description="Create build output" %} +{% include "img.html" %} +{% endwith %} + +### Create Options + +The following options are available when creating a new build output: + +| Option | Description | +| --- | --- | +| Quantity | The number of items to create as part of this build output | +| Serial Numbers | If this is a tracked build output, the serial numbers for each of the generated outputs | +| Batch Code | Batch code identifier for the generated output(s) | +| Auto Allocate Serial Numbers | If selected, any available tracked subcomponents which already have serial numbers assigned, will be automatically assigned to matching build outputs | + +### Specifying Serial Numbers + +Refer to the [serial number generation guide](../stock/tracking.md#generating-serial-numbers) for further information on serial number input. + +## Complete Build Output + +*Completing* a build output marks that output as finished, in the context of the given build order. + +An individual build output is completed by selecting the "Complete build output" button associated with that build output: + +{% with id="build_output_complete", url="build/build_output_complete.png", description="Complete build output" %} +{% include "img.html" %} +{% endwith %} + +Here the user can select the destination location for the build output, as well as the stock item status. + +Marking the build output(s) as complete performs the following actions: + +- The completed build quantity is increased by the quantity of the selected build output(s) +- The build output(s) are marked as "completed", and available for stock actions +- Any [tracked BOM items](./allocate.md#allocating-tracked-stock) which are allocated to the build output are *installed* into that build output. + +### Complete Options + +The following options are available when completing a build output: + +| Option | Description | +| --- | --- | +| Status | The [stock status](../stock/status.md) for the completed outputs | +| Location | The [stock location](../stock/stock.md#stock-location) where the outputs will be located | +| Notes | Any additional notes associated with the completion of these outputs | +| Accept Incomplete Allocation | If selected, this option allows [tracked build outputs](./allocate.md#tracked-build-outputs) to be completed in the case where required BOM items have not been fully allocated | + +## Scrap Build Output + +*Scrapping* a build output marks the particular output as rejected, in the context of the given build order. + +An individual build output is completed by selecting the *Scrap build output* button associated with that build output: + +{% with id="build_output_scrap", url="build/build_output_scrap.png", description="Scrap build output" %} +{% include "img.html" %} +{% endwith %} + +Marking the build output(s) as scrapped performs the following actions: + +- The build outputs are marked as "rejected" and removed from the build +- The completed build quantity *does not increase* +- The build outputs are not available for any further stock actions +- Optionally, any [tracked BOM items](./allocate.md#allocating-tracked-stock) which are allocated to the build output are *installed* into the rejected build output + +### Scrap Options + +The following options are available when scrapping a build order: + +| Option | Description | +| --- | --- | +| Location | The stock location where the scrapped build output(s) will be located | +| Notes | Any additional notes associated with the scrapping of these outputs | +| Discard Allocations | If selected, any installed BOM items will be removed first, before marking the build output as scrapped. Use this option if the installed items are recoverable and can be used elsewhere | + +## Delete Build Output + +*Deleting* a build output causes the build output to be cancelled, and removed from the database entirely. Use this option when the build output does not physically exist (or was never built) and should not be tracked in the database. + +{% with id="build_output_delete", url="build/build_output_delete.png", description="Delete build output" %} +{% include "img.html" %} +{% endwith %} + +Marking the build output(s) as deleted performs the following actions: + +- Any allocated stock items are returned to stock +- The build output is removed from the database diff --git a/docs/docs/concepts/custom_states.md b/docs/docs/concepts/custom_states.md deleted file mode 100644 index e72a949fafdb..000000000000 --- a/docs/docs/concepts/custom_states.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Custom States ---- - -## Custom States - -Several models within InvenTree support the use of custom states. The custom states are display only - the business logic is not affected by the state. - -States can be added in the Admin Center under the "Custom States" section. Each state has a name, label and a color that are used to display the state in the user interface. Changes to these settings will only be reflected in the user interface after a full reload of the interface. - -States need to be assigned to a model, state (for example status on a StockItem) and a logical key - that will be used for business logic. These 3 values combined need to be unique throughout the system. - -Custom states can be used in the following models: -- StockItem -- Orders (PurchaseOrder, SalesOrder, ReturnOrder, ReturnOrderLine) diff --git a/docs/docs/concepts/terminology.md b/docs/docs/concepts/terminology.md new file mode 100644 index 000000000000..ba127d9a48fc --- /dev/null +++ b/docs/docs/concepts/terminology.md @@ -0,0 +1,40 @@ +--- +title: Terminology +--- + +## Terminology + +There are different systems in the industry for the management of getting, storing and making parts. An overview what they are for and what the acronyms mean. + +**InvenTree** is mainly focused on [**IMS**](#inventory-management-system-ims) and [**PLM**](#part-library-management-plm) functionality. + +### Inventory Management System *(IMS)* +Evolves around manufacturing of parts out of other parts. It keeps track of stock, part origin, orders, shelf live and more. + +### Part Library Management *(PLM)* +Keeps track of BOMs, part variants, possible substitutions, versions, IPNs and further part parameters. +PLM can also mean product lifecycle management – those systems manage all stages from design through manufacturing up to customer support and recycling. + +A similar system is [Partkeepr](https://partkeepr.org/) (seems mostly inactive - there is a 3rd party importer). + +### Material Resource Planning *(MRP)* + +Material Requirements Planning software, is designed to assist businesses in effectively managing their manufacturing processes. It helps with the planning and control of inventory, production schedules, and procurement activities. MRP software utilizes various algorithms and data inputs, such as sales forecasts, production capacity, and bill of materials, to generate material requirements plans, schedule production orders, and optimize inventory levels. + +### Asset Management *(AM)* +Manages many unique items, which need tracking per part and are assignable to users / groups / locations. These systems often include features like item states, refurbishing / maintenance / reservation, or request-flows. +Often these systems are used for IT-Hardware (then they are called *ITAM*). +A good open-source example would be [Snipe-IT](https://snipeitapp.com/). + +### Enterprise Resource Planning *(ERP)* + +Is the centre of your business. It manages timesheets, warehousing, finances (prices, taxes, …), customer relations and more. InvenTree covers parts of this but aims to keep an intuitive and simple user interface. +Popular, fully fledged ERPs are [ERPNext](https://erpnext.com/) or [odoo](https://www.odoo.com). + +### Customer Relationship Manager *(CRM)* + +Customer relationship management (CRM) is a technology for managing all your company's relationships and interactions with customers and potential customers. + +### Manufacturing Execution System *(MES)* + +A Manufacturing Execution System (MES), oversees, monitors, records, and manages the entire manufacturing process from raw materials to finalized products. diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md new file mode 100644 index 000000000000..7b26ae445fbf --- /dev/null +++ b/docs/docs/concepts/units.md @@ -0,0 +1,77 @@ +--- +title: Physical Units +--- + +## Physical Units + +Support for real-world "physical" units of measure is implemented using the [pint](https://pint.readthedocs.io/en/stable/) Python library. This library provides the following core functions: + +- Ensures consistent use of real units for your inventory management +- Convert between compatible units of measure from suppliers +- Enforce use of compatible units when creating part parameters +- Enable custom units as required + +### Unit Conversion + +InvenTree uses the pint library to convert between compatible units of measure. For example, it is possible to convert between units of mass (e.g. grams, kilograms, pounds, etc) or units of length (e.g. millimeters, inches, etc). This is a powerful feature that ensures that units are used consistently throughout the application. + +### Engineering Notation + +We support the use of engineering notation for units, which allows for easy conversion between units of different orders of magnitude. For example, the following values would all be considered *valid*: + +- `10k3` : `10,300` +- `10M3` : `10,000,000` +- `3n02` : `0.00000000302` + +### Scientific Notation + +Scientific notation is also supported, and can be used to represent very large or very small numbers. For example, the following values would all be considered *valid*: + +- `1E-3` : `0.001` +- `1E3` : `1000` +- `-123.45E-3` : `-0.12345` + +!!! tip "Case Sensitive" + Support for scientific notation is case sensitive. For example, `1E3` is a valid value, but `1e3` is not. + +### Feet and Inches + +Shorthand notation is supported for feet and inches. For example, the following values would all be considered *valid*: + +- `3'`: `3 feet` +- `6"` : `6 inches` + +However, note that compound measurements (e.g. `3'6"`) are not supported. + +### Case Sensitivity + +The pint library is case sensitive, and units must be specified in the correct case. For example, `kg` is a valid unit, but `KG` is not. In particular, you need to pay close attention when using SI prefixes (e.g. `k` for kilo, `M` for mega, `n` for nano, etc). + +## Unit Support + +Physical units are supported by the following InvenTree subsystems: + +### Part + +The [unit of measure](../part/part.md#units-of-measure) field for the [Part](../part/part.md) model uses real-world units. + +### Supplier Part + +The [supplier part](../part/part.md/#supplier-parts) model uses real-world units to convert between supplier part quantities and internal stock quantities. Unit conversion rules ensure that only compatible unit types can be supplied + +### Part Parameter + +The [part parameter template](../part/parameter.md#parameter-templates) model can specify units of measure, and part parameters can be specified against these templates with compatible units + +## Custom Units + +Out of the box, the Pint library provides a wide range of units for use. However, it may not be sufficient for a given application. In such cases, custom units can be easily defined to meet custom requirements. + +Custom units can be defined to provide a new physical quantity, link existing units together, or simply provide an alias for an existing unit. + +!!! tip "More Info" + For further information, refer to the [pint documentation](https://pint.readthedocs.io/en/stable/advanced/defining.html) regarding custom unit definition + +### Create Custom Units + +To view, edit and create custom units, locate the *Physical Units* tab in the [settings panel](../settings/global.md). diff --git a/docs/docs/credits.md b/docs/docs/credits.md new file mode 100644 index 000000000000..5dd87f374f48 --- /dev/null +++ b/docs/docs/credits.md @@ -0,0 +1,77 @@ +--- +title: Credits +--- + +## Python Packages + +InvenTree relies on the following Python libraries: + +| Library | License | Description | +| --- | --- | --- | +| [Django](https://pypi.org/project/Django/) | BSD | Python web framework | +| [invoke](https://www.pyinvoke.org/) | BSD | Task execution tool | +| [wheel](https://wheel.readthedocs.io/en/stable/) | MIT | Python packaging | +| [pillow](https://pypi.org/project/Pillow/) | HPND | Image manipulation | +| [djangorestframework](https://pypi.org/project/djangorestframework/) | BSD | REST API | +| [django-cors-headers](https://pypi.org/project/django-cors-headers/) | MIT | CORS headers | +| [django-filter](https://pypi.org/project/django-filter/) | BSD | Advanced filtering for REST API | +| [django-mptt](https://pypi.org/project/django-mptt/) | MIT | Modified preorder tree traversal | +| [django-sql-utils](https://pypi.org/project/django-sql-utils/) | MIT | Advanced SQL subqueries | +| [django-markdownx](https://pypi.org/project/django-markdownx/) | BSD | Markdown editor | +| [django-markdownify](https://pypi.org/project/django-markdownify/) | MIT | Markdown template filters | +| [coreapi](https://pypi.org/project/coreapi/) | BSD | API auto documentation | +| [pygments](https://pypi.org/project/Pygments/) | BSD | Syntax highlighting | +| [tablib](https://pypi.org/project/tablib/) | MIT | Data import/export | +| [django-crispy-forms](https://pypi.org/project/django-crispy-forms/) | MIT | Advanced form rendering | +| [django-import-export](https://pypi.org/project/django-import-export/) | BSD | Data import/export in admin interface | +| [django-cleanup](https://pypi.org/project/django-cleanup/) | MIT | Automated cleanup of django media files | +| [rapidfuzz](https://pypi.org/project/rapidfuzz/) | MIT | Fuzzy string matching | +| [django-stdimage](https://pypi.org/project/django-stdimage/) | MIT | Advanced image fields for django | +| [django-weasyprint](https://pypi.org/project/django-weasyprint/) | Apache 2.0 | PDF generation | +| [django-money](https://pypi.org/project/django-money/) | BSD | Currency support | +| [certifi](https://pypi.org/project/certifi/) | MPL 2.0 | Web certification | +| [django-error-report](https://pypi.org/project/django-error-report/) | BSD | Error / excepttion management | +| [django-test-migrations](https://pypi.org/project/django-test-migrations/) | MIT | Unit testing for database migrations | +| [python-barcode](https://pypi.org/project/python-barcode/) | MIT | Barcode support | +| [qrcode](https://pypi.org/project/qrcode/) | BSD | QR code support | +| [django-q](https://pypi.org/project/django-q/) | MIT | Background task manager | +| [gunicorn](https://pypi.org/project/gunicorn/) | MIT | Web server | +| [flake8](https://pypi.org/project/flake8/) | MIT | style checking | +| [pep8-naming](https://pypi.org/project/pep8-naming/) | Expat | name checking | +| [coverage](https://pypi.org/project/coverage/) | Apache-2.0 | coverage checking | +| [django-formtools](https://pypi.org/project/django-formtools/) | MIT | better forms / wizards | +| [django-allauth](https://pypi.org/project/django-allauth/) | MIT | SSO for django | +| [pint](https://pint.readthedocs.io/en/stable/) | [licence](https://github.com/hgrecco/pint/blob/master/LICENSE) | Physical unit conversion | + +## Frontend libraries + +InvenTree relies on the following frontend libraries and components: + +| Name | License | Description | +| --- | --- | --- | +| [Bootstrap](https://github.com/twbs/bootstrap/) | MIT | Frontend framework | +| [jquery](https://github.com/jquery/jquery) | MIT | JS framework | +| [Bootstrap table](https://github.com/wenzhixin/bootstrap-table/) | MIT | Table rendering | +| [Font Awesome - Icons](https://fontawesome.com/) | CC BY 4.0 License | Icons | +| [Font Awesome - Code](https://fontawesome.com/) | MIT | Delivery code for icons | +| [Select2](https://github.com/select2/select2/) | MIT | Searchable selection box | +| [fullcalendar](https://github.com/fullcalendar/fullcalendar/) | MIT | Calendar rendering | +| [chart.js](https://github.com/chartjs/Chart.js) | MIT | charts | +| [Moment JS](https://github.com/moment/momentjs.com/) | MIT | Time and date rendering | +| [jquery-treegrid](https://github.com/maxazan/jquery-treegrid/) | MIT | Treegrid rendering | +| [clipboard.js](https://github.com/zenorocha/clipboard.js) | MIT | text copying | +| [qr-scanner](https://github.com/nimiq/qr-scanner) | MIT | Javascript QR Code Scanner | + +## Assets + +### Splash Screen + +The InvenTree splash screen graphic is sourced from [unsplash.com](https://unsplash.com/photos/Ixvv3YZkd7w) and used under the [unsplash license](https://unsplash.com/license). + +## Source Code Contributions + +The InvenTree project relies on the expertise and generosity of its [source code contributors](https://github.com/inventree/InvenTree/graphs/contributors). + +## Translation Contributions + +Translation efforts are supported by the InvenTree community. We appreciate the efforts of our [translation team](https://crowdin.com/project/inventree). diff --git a/docs/docs/demo.md b/docs/docs/demo.md new file mode 100644 index 000000000000..574dd503aa87 --- /dev/null +++ b/docs/docs/demo.md @@ -0,0 +1,7 @@ +--- +title: InvenTree Demo +--- + +## InvenTree Demo + +This page has moved to [https://inventree.org/demo.html](https://inventree.org/demo.html) diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md new file mode 100644 index 000000000000..06df11fabbdf --- /dev/null +++ b/docs/docs/develop/contributing.md @@ -0,0 +1,285 @@ +--- +title: Contribution Guide +--- + + +Please read the contribution guidelines below, before submitting your first pull request to the InvenTree codebase. + +## Quickstart + +The following commands will get you quickly configure and run a development server, complete with a demo dataset to work with: + +### Devcontainer + +The recommended method for getting up and running with an InvenTree development environment is to use our [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) setup in [vscode](https://code.visualstudio.com/). + +!!! success "Devcontainer Guide" + Refer to the [devcontainer guide](./devcontainer.md) for more information! + +### Docker + +To setup a development environment using [docker](../start/docker.md), run the following instructions: + +```bash +git clone https://github.com/inventree/InvenTree.git && cd InvenTree +docker compose run inventree-dev-server invoke install +docker compose run inventree-dev-server invoke setup-test --dev +docker compose up -d +``` + +### Bare Metal + +A "bare metal" development setup can be installed as follows: + +```bash +git clone https://github.com/inventree/InvenTree.git && cd InvenTree +python3 -m venv env && source env/bin/activate +pip install invoke && invoke +pip install invoke && invoke setup-dev --tests +``` + +Read the [InvenTree setup documentation](../start/intro.md) for a complete installation reference guide. + +### Setup Devtools + +Run the following command to set up all toolsets for development. + +```bash +invoke setup-dev +``` + +*We recommend you run this command before starting to contribute. This will install and set up `pre-commit` to run some checks before each commit and help reduce errors.* + +## Branches and Versioning + +InvenTree roughly follow the [GitLab flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html) branching style, to allow simple management of multiple tagged releases, short-lived branches, and development on the main branch. + +### Version Numbering + +InvenTree version numbering follows the [semantic versioning](https://semver.org/) specification. + +### Master Branch + +The HEAD of the "main" or "master" branch of InvenTree represents the current "latest" state of code development. + +- All feature branches are merged into master +- All bug fixes are merged into master + +**No pushing to master:** New features must be submitted as a pull request from a separate branch (one branch per feature). + +### Feature Branches + +Feature branches should be branched *from* the *master* branch. + +- One major feature per branch / pull request +- Feature pull requests are merged back *into* the master branch +- Features *may* also be merged into a release candidate branch + +### Stable Branch + +The HEAD of the "stable" branch represents the latest stable release code. + +- Versioned releases are merged into the "stable" branch +- Bug fix branches are made *from* the "stable" branch + +#### Release Candidate Branches + +- Release candidate branches are made from master, and merged into stable. +- RC branches are targeted at a major/minor version e.g. "0.5" +- When a release candidate branch is merged into *stable*, the release is tagged + +#### Bugfix Branches + +- If a bug is discovered in a tagged release version of InvenTree, a "bugfix" or "hotfix" branch should be made *from* that tagged release +- When approved, the branch is merged back *into* stable, with an incremented PATCH number (e.g. 0.4.1 -> 0.4.2) +- The bugfix *must* also be cherry picked into the *master* branch. + +## API versioning + +The [API version](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/InvenTree/api_version.py) needs to be bumped every time when the API is changed. + +## Environment + +### Software Versions + +The core software modules are targeting the following versions: + +| Name | Minimum version | Note | +|---|---| --- | +| Python | {{ config.extra.min_python_version }} | Minimum required version | +| Invoke | {{ config.extra.min_invoke_version }} | Minimum required version | +| Django | {{ config.extra.django_version }} | Pinned version | +| Node | 18 | Only needed for frontend development | + +Any other software dependencies are handled by the project package config. + +### Auto creating updates + +The following tools can be used to auto-upgrade syntax that was depreciated in new versions: +```bash +pip install pyupgrade +pip install django-upgrade +``` + +To update the codebase run the following script. +```bash +pyupgrade `find . -name "*.py"` +django-upgrade --target-version {{ config.extra.django_version }} `find . -name "*.py"` +``` + +## Credits + +If you add any new dependencies / libraries, they should be added to [the credits page](../credits.md). + +## Migration Files + +Any required migration files **must** be included in the commit, or the pull-request will be rejected. If you change the underlying database schema, make sure you run `invoke migrate` and commit the migration files before submitting the PR. + +*Note: A github action checks for unstaged migration files and will reject the PR if it finds any!* + +## Unit Testing + +Any new code should be covered by unit tests - a submitted PR may not be accepted if the code coverage for any new features is insufficient, or the overall code coverage is decreased. + +The InvenTree code base makes use of [GitHub actions](https://github.com/features/actions) to run a suite of automated tests against the code base every time a new pull request is received. These actions include (but are not limited to): + +- Checking Python and Javascript code against standard style guides +- Running unit test suite +- Automated building and pushing of docker images +- Generating translation files + +The various github actions can be found in the `./github/workflows` directory + +### Run tests locally + +To run test locally, use: +``` +invoke test +``` + +To run only partial tests, for example for a module use: +``` +invoke test --runtest order +``` + +To see all the available options: + +``` +invoke test --help +``` + +## Code Style + +Code style is automatically checked as part of the project's CI pipeline on GitHub. This means that any pull requests which do not conform to the style guidelines will fail CI checks. + +### Backend Code + +Backend code (Python) is checked against the [PEP style guidelines](https://peps.python.org/pep-0008/). Please write docstrings for each function and class - we follow the [google doc-style](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings) for python. + +### Frontend Code + +Frontend code (Javascript) is checked using [eslint](https://eslint.org/). While docstrings are not enforced for front-end code, good code documentation is encouraged! + +### Running Checks Locally + +If you have followed the setup devtools procedure, then code style checking is performend automatically whenever you commit changes to the code. + +### Django templates + +Django are checked by [djlint](https://github.com/Riverside-Healthcare/djlint) through pre-commit. + +The following rules out of the [default set](https://djlint.com/docs/linter/) are not applied: +```bash +D018: (Django) Internal links should use the { % url ... % } pattern +H006: Img tag should have height and width attributes +H008: Attributes should be double quoted +H021: Inline styles should be avoided +H023: Do not use entity references +H025: Tag seems to be an orphan +H030: Consider adding a meta description +H031: Consider adding meta keywords +T002: Double quotes should be used in tags +``` + + +## Documentation + +New features or updates to existing features should be accompanied by user documentation. + +## Translations + +Any user-facing strings *must* be passed through the translation engine. + +- InvenTree code is written in English +- User translatable strings are provided in English as the primary language +- Secondary language translations are provided [via Crowdin](https://crowdin.com/project/inventree) + +*Note: Translation files are updated via GitHub actions - you do not need to compile translations files before submitting a pull request!* + +### Python Code + +For strings exposed via Python code, use the following format: + +```python +from django.utils.translation import gettext_lazy as _ + +user_facing_string = _('This string will be exposed to the translation engine!') +``` + +### Templated Strings + +HTML and javascript files are passed through the django templating engine. Translatable strings are implemented as follows: + +```html +{ % load i18n % } + +{ % trans "This string will be translated" % } - this string will not! +``` + +## Github use + +### Tags + +The tags describe issues and PRs in multiple areas: + +| Area | Name | Description | +| --- | --- | --- | +| Triage Labels | | | +| | triage:not-checked | Item was not checked by the core team | +| | triage:not-approved | Item is not green-light by maintainer | +| Type Labels | | | +| | breaking | Indicates a major update or change which breaks compatibility | +| | bug | Identifies a bug which needs to be addressed | +| | dependency | Relates to a project dependency | +| | duplicate | Duplicate of another issue or PR | +| | enhancement | This is an suggested enhancement, extending the functionality of an existing feature | +| | experimental | This is a new *experimental* feature which needs to be enabled manually | +| | feature | This is a new feature, introducing novel functionality | +| | help wanted | Assistance required | +| | invalid | This issue or PR is considered invalid | +| | inactive | Indicates lack of activity | +| | migration | Database migration, requires special attention | +| | question | This is a question | +| | roadmap | This is a roadmap feature with no immediate plans for implementation | +| | security | Relates to a security issue | +| | starter | Good issue for a developer new to the project | +| | wontfix | No work will be done against this issue or PR | +| Feature Labels | | | +| | API | Relates to the API | +| | barcode | Barcode scanning and integration | +| | build | Build orders | +| | importer | Data importing and processing | +| | order | Purchase order and sales orders | +| | part | Parts | +| | plugin | Plugin ecosystem | +| | pricing | Pricing functionality | +| | report | Report generation | +| | stock | Stock item management | +| | user interface | User interface | +| Ecosystem Labels | | | +| | backport | Tags that the issue will be backported to a stable branch as a bug-fix | +| | demo | Relates to the InvenTree demo server or dataset | +| | docker | Docker / docker-compose | +| | CI | CI / unit testing ecosystem | +| | refactor | Refactoring existing code | +| | setup | Relates to the InvenTree setup / installation process | diff --git a/docs/docs/develop/devcontainer.md b/docs/docs/develop/devcontainer.md new file mode 100644 index 000000000000..093e36b092d3 --- /dev/null +++ b/docs/docs/develop/devcontainer.md @@ -0,0 +1,121 @@ +--- +title: Devcontainer +--- + +## Devcontainer + +[Devcontainers](https://code.visualstudio.com/docs/devcontainers/containers) are the easiest way to get into InvenTree development. You can either run them on your machine in vscode or use github codespaces. + +### Setup in vscode + +#### Prerequisites + +You need to make sure that you have the following tools installed before continuing. + +- [git](https://git-scm.com/downloads) is needed to clone the repository +- [docker](https://www.docker.com/products/docker-desktop/) is needed to run the devcontainer +- [vscode](https://code.visualstudio.com/Download) is needed to edit and debug code + +#### Docker Containers + +The InvenTree devcontainer setup will install two docker containers: + +| Container | Description | +| --- | --- | +| db | InvenTree database (postgresql) | +| inventree | InvenTree server | + +#### Setup/Installation + +1. Clone the repository (If you want to submit changes fork it and use the url to your fork in the next step) + ```bash + git clone https://github.com/inventree/InvenTree.git + ``` +2. Open vscode, navigate to the extensions sidebar and search for `ms-vscode-remote.remote-containers`. Click on install. +3. Open the cloned folder from above by clicking on `file > open folder` +4. vscode should now ask you if you'd like to reopen this folder in a devcontainer. Click `Reopen in Container`. If it does not ask you, open the command palette (CTRL/CMD+Shift+P) and search for `Reopen in Container`. This can take a few minutes until the image is downloaded, build and setup with all dependencies. +5. Open a new terminal from the top menu by clicking `Terminal > New Terminal` +6. The last line in your terminal should now show the text `(venv)` at the start of the line +7. You are done! You now should have a functioning InvenTree development installation + +### Setup in Codespaces + +Open [inventree/InvenTree](https://github.com/inventree/InvenTree) with your browser and click on `Code`, select the `codespaces` tab and click on create codespace on current branch. This may can take a few minutes until your inventree development environment is setup. + +!!! warning "Close the terminal" + The appearing terminal which says `Welcome to codespaces` is not using the virtual env. Close it and use a new terminal that will automatically connect to the venv for using commands. + +### Running tasks + +Tasks can help you executing scripts. You can run them by open the command panel (CMD+Shift+P) and search for `Run Task`. Then choose the desired task. + +#### Setup demo dataset + +If you need some demo test-data, run the `setup-test` task. This will import an `admin` user with the password `inventree`. For more info on what this dataset contains see [inventree/demo-dataset](https://github.com/inventree/demo-dataset). + +#### Setup a superuser + +If you only need a superuser, run the `superuser` task. It should prompt you for credentials. + +#### Run background workers + +If you need to process your queue with background workers, run the `worker` task. This is a foreground task which will execute in the terminal. + +### Running InvenTree + +You can either only run InvenTree or use the integrated debugger for debugging. Goto the `Run and debug` side panel make sure `InvenTree Server` is selected. Click on the play button on the left. + +!!! tip "Debug with 3rd party" + Sometimes you need to debug also some 3rd party packages. Just select `InvenTree Servre - 3rd party` + +You can now set breakpoints and vscode will automatically pause execution if that point is hit. You can see all variables available in that context and evaluate some code with the debugger console at the bottom. Use the play or step buttons to continue execution. + +!!! info "React Frontend development" + +The React frontend requires additional steps to run. Refer to [Platform UI / React](./react-frontend.md) + +### Plugin development + +The easiest way for plugin developing is by using the InvenTree devcontainer. Just mount your plugin repository also into the devcontainer workspace and install it as pip editable package. + +1. To mount your plugin repo into the workspace, add this to your `.devcontainer/devcontainer.json` file. (Make sure that you don't commit it) + ```json + "mounts": [ + "source=/path/to/your/local/inventree-plugin,target=/workspaces/inventree-plugin,type=bind,consistency=cached" + ], + ``` +2. Add `/workspaces/inventree-plugin` to your vscode workspace folders by click on `File > Add folder to workspace…`. +3. Install your plugin as pip editable install by executing the following command in the venv. + ```bash + pip install -e /workspaces/inventree-plugin + ``` +4. Add InvenTree core code to Pylance IntelliSense path by adding the following file to your plugin repo `.vscode/settings.json` (Your path can be different depending on your setup): + ```json + { + "python.analysis.extraPaths": ["/workspaces/InvenTree/InvenTree"] + } + ``` + +Your plugin should now be activateable from the InvenTree settings. You can also use breakpoints for debugging. + +### Troubleshooting + +#### Your ssh-keys are not available in the devcontainer but are loaded to the active `ssh-agent` on macOS + +Make sure you enabled full disk access on macOS for vscode, otherwise your ssh-keys are not available inside the container (Ref: [Automatically add SSH keys to ssh-agent [comment]](https://github.com/microsoft/vscode-remote-release/issues/4024#issuecomment-831671081)). + +#### You're not able to use your gpg-keys inside the devcontainer to sign commits on macOS + +Make sure you have `gnupg` and `pinentry-mac` installed and set up correctly. Read this [medium post](https://medium.com/@jma/setup-gpg-for-git-on-macos-4ad69e8d3733) for more info on how to set it up correctly. + +#### Where are the database, media files, ... stored? + +Backups, Commandhistory, media/static files, venv, plugin.txt, secret_key.txt, ... are stored in the `dev` folder. If you want to start with a clean setup, you can remove that folder, but be aware that this will delete everything you already setup in InvenTree. + +### Performance Improvements + +If you are running a devcontainer in Windows, you may experience some performance issues - particularly related to file system operations. + +For a significant improvement in performance, the source code should be installed into the **WSL 2** filesystem (not on your "Windows" filesystem). This will greatly improve file access performance, and also make the devcontainer much more responsive to file system changes. + +You can also refer to the [Improve disk performance guide](https://code.visualstudio.com/remote/advancedcontainers/improve-performance) for more information. diff --git a/docs/docs/develop/react-frontend.md b/docs/docs/develop/react-frontend.md new file mode 100644 index 000000000000..ead305c91269 --- /dev/null +++ b/docs/docs/develop/react-frontend.md @@ -0,0 +1,79 @@ +--- +title: Platform UI / React +--- + +## Setup + +The new React-based UI will not be available by default. In order to set your development environment up to view the frontend, follow this guide. +The new UI requires a separate frontend server to run to serve data for the new Frontend. + +### Install + +The React frontend requires its own packages that aren't installed via the usual invoke tasks. + +#### Docker + +Run the following command: +`docker compose run inventree-dev-server invoke frontend-compile` +This will install the required packages for running the React frontend on your InvenTree dev server. + +#### Devcontainer +!!! warning "This guide assumes you already have a running devcontainer" +!!! info "All these steps are performed within Visual Studio Code" + +Open a new terminal from the top menu by clicking `Terminal > New Terminal` +Make sure this terminal is running within the virtual env. The start of the last line should display `(venv)` + +Run the command `invoke frontend-compile`. Wait for this to finish + +### Running + +After finishing the install, you need to launch a frontend server to be able to view the new UI. + +Using the previously described ways of running commands, execute the following: +`invoke frontend-dev` in your environment +This command does not run as a background daemon, and will occupy the window it's ran in. + +### Accessing + +When the frontend server is running, it will be available on port 5173. +i.e: https://localhost:5173/ + +!!! note "Backend Server" + The InvenTree backend server must also be running, for the frontend interface to have something to connect to! To launch a backend server, use the `invoke server` command. + +### Debugging + +You can attach the vscode debugger to the frontend server to debug the frontend code. With the frontend server running, open the `Run and Debug` view in vscode and select `InvenTree Frontend - Vite` from the dropdown. Click the play button to start debugging. This will attach the debugger to the running vite server, and allow you to place breakpoints in the frontend code. + +!!! info "Backend Server" + To debug the frontend code, the backend server must be running (in a separate process). Note that you cannot debug the backend server and the frontend server in the same vscode instance. + +### Information + +On Windows, any Docker interaction is run via WSL. Naturally, all containers and devcontainers run through WSL. +The default configuration for the frontend server sets up file polling to enable hot reloading. +This is in itself a huge performance hit. If you're running an older system, it might just be enough to block anything from running in the container. + +If you're having issues running the Frontend server, have a look at your Docker Desktop app. +If you routinely see the container using almost ALL available CPU capacity, you need to turn off file polling. + +!!! warning "Turning off file polling requires you to restart the frontend server process upon each file change" + +Head to the following path: `src/frontend/vite.config.ts` and change: + +`const IS_IN_WSL = platform().includes('WSL') || release().includes('WSL');` +to +`const IS_IN_WSL = false;` + +!!! tip "Make sure to not commit this change!" + +!!! warning "This change will require you to restart the frontend server for every change you make in the frontend code" + +### Caveats + +When running the frontend development server, some features may not work entirely as expected! Please take the time to understand the flow of data when running the frontend development server, and how it interacts with the backend server! + +#### SSO Login + +When logging into the frontend dev server via SSO, the redirect URL may not redirect correctly. diff --git a/docs/docs/extend/how_to_plugin.md b/docs/docs/extend/how_to_plugin.md new file mode 100644 index 000000000000..79803daebba1 --- /dev/null +++ b/docs/docs/extend/how_to_plugin.md @@ -0,0 +1,169 @@ +--- +title: Developing Plugins +--- + +## How to Develop a Plugin + +A short introductory guide for plugin beginners. + +### Should it be a plugin? +First of all figure out what your plugin / code should do. +If you want to change how InvenTree base mechanics and business logic work, a plugin will not be sufficient. Maybe fork the project or better [start a discussion](https://github.com/inventree/InvenTree/discussions) on GitHub. There might be an easier / established way to do what you want. + +If you want to remove parts of the user interface -> remove the permissions for those objects / actions and the users will not see them. + +If you add a lot of code (over ~1000 LOC) maybe split it into multiple plugins to make upgrading and testing simpler. + +### It will be a plugin! +Great. Now please read the [plugin documentation](./plugins.md) to get an overview of the architecture. It is rather short as a the (builtin) mixins come with extensive docstrings. + +### Pick your building blocks +Consider the usecase for your plugin and define the exact function of the plugin, maybe write it down in a short readme. Then pick the mixins you need (they help reduce custom code and keep the system reliable if internal calls change). + +- Is it just a simple REST-endpoint that runs a function ([ActionMixin](./plugins/action.md)) or a parser for a custom barcode format ([BarcodeMixin](./plugins/barcode.md))? +- How does the user interact with the plugin? Is it a UI separate from the main InvenTree UI ([UrlsMixin](./plugins/urls.md)), does it need multiple pages with navigation-links ([NavigationMixin](./plugins/navigation.md)). +- Do you need to extend reporting functionality? Check out the [ReportMixin](./plugins/report.md). +- Will it make calls to external APIs ([APICallMixin](./plugins/api.md) helps there)? +- Do you need to run in the background ([ScheduleMixin](./plugins/schedule.md)) or when things in InvenTree change ([EventMixin](./plugins/event.md))? +- Does the plugin need configuration that should be user changeable ([SettingsMixin](./plugins/settings.md)) or static (just use a yaml in the config dir)? +- You want to receive webhooks? Do not code your own untested function, use the WebhookEndpoint model as a base and override the perform_action method. +- Do you need the full power of Django with custom models and all the complexity that comes with that – welcome to the danger zone and [AppMixin](./plugins/app.md). The plugin will be treated as a app by django and can maybe rack the whole instance. + +### Define the metadata +Do not forget to [declare the metadata](./plugins.md#plugin-options) for your plugin, those will be used in the settings. At least provide a weblink so users can file issues / reach you. + +### Development guidelines +If you want to make your life easier, try to follow these guidelines; break where it makes sense for your use case. + +- keep it simple - more that 1000 LOC are normally to much for a plugin +- use mixins where possible - we try to keep coverage high for them so they are not likely to break +- do not use internal functions - if a functions name starts with `_` it is internal and might change at any time +- keep you imports clean - the APIs for plugins and mixins are young and evolving (see [here](plugins.md#imports)). Use +``` +from plugin import InvenTreePlugin, registry +from plugin.mixins import APICallMixin, SettingsMixin, ScheduleMixin, BarcodeMixin +``` +- deliver as a package (see [below](#packaging)) +- if you need to use a private infrastructure, use the 'Releases' functions in GitHub or Gitlab. Point to the 'latest' release endpoint when installing to make sure the update function works +- tag your GitHub repo with `inventree` and `inventreeplugins` to make discovery easier. A discovery mechanism using these tags is on the roadmap. +- use GitHub actions to test your plugin regularly (you can [schedule actions](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#schedule)) against the 'latest' [docker-build](https://hub.docker.com/r/inventree/inventree) of InvenTree +- if you use the AppMixin pin your plugin against the stable branch of InvenTree, your migrations might get messed up otherwise + +### Packaging + + +!!! tip "Package-Discovery can be tricky" + Most problems with packaging stem from problems with discovery. [This guide](https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#automatic-discovery) by the PyPA contains a lot of information about discovery during packaging. These mechanisms generally apply to most discovery processes in InvenTree and the wider Django ecosystem. + +The recommended way of distribution is as a [PEP 561](https://peps.python.org/pep-0561/) compliant package. If you can use the official Package Index (PyPi - [official website](https://pypi.org/)) as a registry. +Please follow PyPAs official [packaging guide](https://packaging.python.org/en/latest/tutorials/packaging-projects/) to ensure your package installs correctly suing InvenTrees install mechanisms. + +Your package must expose you plugin class as an [entrypoint](https://setuptools.pypa.io/en/latest/userguide/entry_point.html) with the name `inventree_plugins` to work with InvenTree. + +```setup.cfg +# Example setup.cfg +[options.entry_points] +inventree_plugins = + ShopifyIntegrationPlugin = path.to.source:ShopifyIntegrationPluginClass +``` + +```setup.py +# Example setup.py + +import setuptools + +# ... + +setuptools.setup( + name='ShopifyIntegrationPlugin' + .# .. + + entry_points={"inventree_plugins": ["ShopifyIntegrationPlugin = path.to.source:ShopifyIntegrationPluginClass"]} +``` + +#### Including Extra Files + +In some cases you may wish to copy across extra files when the package is installed. For example, you may have custom template files which need to be copied across to the installation directory. + +In this case, you will need to include a `MANIFEST.in` file in the root directory of your plugin, and include the line `include_package_data=True` in your `setup.py` file. + +!!! tip "Setuptools Documentation" + Read more about `MANIFEST.in` in the [setuptools documentation](https://setuptools.pypa.io/en/latest/userguide/miscellaneous.html) + +As an example, you have a plugin codebase with the following directory structure: + +``` +- my_plugin # Core plugin code +- my_plugin/templates/ # Template files +- MANIFEST.in # Manifest file +- setup.py # Setuptools script +``` + +To ensure that the templates are copied into the installation directory, `MANIFEST.in` should look like: + +``` +recursive-include my_plugin/templates * +``` + +Other files and directories can be copied in a similar manner. + +### Local Plugin Development + +If you are developing a plugin (either from scratch, or making changes to an existing plugin), it can be useful to install the plugin using an [editable install](https://setuptools.pypa.io/en/latest/userguide/development_mode.html). + +An *editable install* installs the plugin (via PIP) into your local python virtual environment, but does not *copy* the code into the environment. Instead, it loads the code directly from where it is located, and also monitors for live changes in the code. This means that you can make changes to the plugin on the fly, and the InvenTree development server will detect any code changes and re-load the plugin automatically. + +Note that to use an *editable install*, your plugin must be installable via PIP. + +#### Example + +To setup an editable install: + +- Download the source code for the plugin (or create a new plugin) +- Ensure that your setup file (either `setup.py` or `pyproject.toml`) is valid +- Launch a command line and activate your development virtual environment +- `cd` into the top-level directory of your plugin project, where the setup file is located +- Setup an editable install with the following command: + +```bash +pip install --editable . +``` + +### A simple example +This example adds a new action under `/api/action/sample` using the ActionMixin. +``` py +# -*- coding: utf-8 -*- +"""sample implementation for ActionPlugin""" +from plugin import InvenTreePlugin +from plugin.mixins import ActionMixin + + +class SampleActionPlugin(ActionMixin, InvenTreePlugin): + """ + Use docstrings for everything... pls + """ + + NAME = "SampleActionPlugin" + ACTION_NAME = "sample" + + # metadata + AUTHOR = "Sample Author" + DESCRIPTION = "A very basic plugin with one mixin" + PUBLISH_DATE = "22.02.2222" + VERSION = "1.2.3" # We recommend semver and increase the major version with each new major release of InvenTree + WEBSITE = "https://example.com/" + LICENSE = "MIT" # use what you want - OSI approved is ♥ + + # Everything form here is for the ActionMixin + def perform_action(self): + print("Action plugin in action!") + + def get_info(self): + return { + "user": self.user.username, + "hello": "world", + } + + def get_result(self): + return True # This is returned to the client +``` diff --git a/docs/docs/extend/integrate.md b/docs/docs/extend/integrate.md new file mode 100644 index 000000000000..bc086560389b --- /dev/null +++ b/docs/docs/extend/integrate.md @@ -0,0 +1,43 @@ +--- +title: Third Party Integrations +--- + +## Third Party Integrations + +A list of known third-party InvenTree extensions is provided below. If you have an extension that should be listed here, contact the InvenTree team on [GitHub](https://github.com/inventree/). + +### Ki-nTree + +[Ki-nTree](https://github.com/sparkmicro/Ki-nTree/) is a fantastic tool for automated creation of [KiCad](https://www.kicad.org/) library parts, with direct integration with InvenTree. + +### PK2InvenTree + +[PK2InvenTree](https://github.com/rgilham/PK2InvenTree) is an open-source tool for migrating an existing [PartKeepr](https://github.com/partkeepr/PartKeepr) database to InvenTree. + +### Digikey-Inventree-Integration +[Digikey-Inventree-Integration](https://github.com/EUdds/Digikey-Inventree-Integration) is a simple project that takes a digikey part number to creates a part in InvenTree. + +### F360-InvenTree + +[F360-InvenTree](https://github.com/matmair/F360-InvenTree/) is a tool for creating links between Autodesk Fusion 360 components and InvenTree parts. +Still under heavy development. + +### DigitalOcean droplet + +[InvenTree droplet](https://inventree.org/digitalocean) is a 1-click solution to deploy InvenTree in the cloud with DigitalOcean. You still have to administer and update your instance. +The source code for this droplet can be found in [inventree_droplet](https://github.com/invenhost/inventree_droplet). + +### InvenTree zebra plugin + +[InvenTree zebra plugin](https://github.com/SergeoLacruz/inventree-zebra-plugin) is a plugin to print labels with zebra printers. +Currently only the GK420T printer is supported. + +### InvenTree Apprise + +[InvenTree Apprise](https://github.com/matmair/inventree-apprise) is a plugin to send notifications via Apprise. This enables a wide variety of targets. + +## First party plugins + +### InvenTree brother plugin + +[InvenTree brother plugin](https://github.com/inventree/inventree-brother-plugin) is a plugin to print labels with brother Q series printers. diff --git a/docs/docs/extend/machines/label_printer.md b/docs/docs/extend/machines/label_printer.md new file mode 100644 index 000000000000..060bd3ec0de6 --- /dev/null +++ b/docs/docs/extend/machines/label_printer.md @@ -0,0 +1,35 @@ +## Label printer + +Label printer machines can directly print labels for various items in InvenTree. They replace standard [`LabelPrintingMixin`](../plugins/label.md) plugins that are used to connect to physical printers. Using machines rather than a standard `LabelPrintingMixin` plugin has the advantage that machines can be created multiple times using different settings but the same driver. That way multiple label printers of the same brand can be connected. + +### Writing your own printing driver + +Take a look at the most basic required code for a driver in this [example](./overview.md#example-driver). Next either implement the [`print_label`](#machine.machine_types.LabelPrinterBaseDriver.print_label) or [`print_labels`](#machine.machine_types.LabelPrinterBaseDriver.print_labels) function. + +### Label printer status + +There are a couple of predefined status codes for label printers. By default the `UNKNOWN` status code is set for each machine, but they can be changed at any time by the driver. For more info about status code see [Machine status codes](./overview.md#machine-status). + +::: machine.machine_types.label_printer.LabelPrinterStatus + options: + heading_level: 4 + show_bases: false + show_docstring_description: false + +### LabelPrintingDriver API + +::: machine.machine_types.LabelPrinterBaseDriver + options: + heading_level: 4 + show_bases: false + members: + - print_label + - print_labels + - get_printers + - PrintingOptionsSerializer + - get_printing_options_serializer + - machine_plugin + - render_to_pdf + - render_to_pdf_data + - render_to_html + - render_to_png diff --git a/docs/docs/extend/machines/overview.md b/docs/docs/extend/machines/overview.md new file mode 100644 index 000000000000..e3c822425c62 --- /dev/null +++ b/docs/docs/extend/machines/overview.md @@ -0,0 +1,201 @@ +--- +title: Machines +--- + +## Machines + +InvenTree has a builtin machine registry. There are different machine types available where each type can have different drivers. Drivers and even custom machine types can be provided by plugins. + +### Registry + +The machine registry is the main component which gets initialized on server start and manages all configured machines. + +#### Initialization process + +The machine registry initialization process can be divided into three stages: + +- **Stage 1: Discover machine types:** by looking for classes that inherit the BaseMachineType class +- **Stage 2: Discover drivers:** by looking for classes that inherit the BaseDriver class (and are not referenced as base driver for any discovered machine type) +- **Stage 3: Machine loading:** + 1. For each MachineConfig in database instantiate the MachineType class (drivers get instantiated here as needed and passed to the machine class. But only one instance of the driver class is maintained along the registry) + 2. The driver.init_driver function is called for each used driver + 3. The machine.initialize function is called for each machine, which calls the driver.init_machine function for each machine, then the machine.initialized state is set to true + +### Machine types + +Each machine type can provide a different type of connection functionality between inventree and a physical machine. These machine types are already built into InvenTree. + +#### Built-in types + +| Name | Description | +| --- | --- | +| [Label printer](./label_printer.md) | Directly print labels for various items. | + +#### Example machine type + +If you want to create your own machine type, please also take a look at the already existing machine types in `machines/machine_types/*.py`. The following example creates a machine type called `abc`. + +```py +from django.utils.translation import gettext_lazy as _ +from plugin.machine import BaseDriver, BaseMachineType, MachineStatus + +class ABCBaseDriver(BaseDriver): + """Base xyz driver.""" + + machine_type = 'abc' + + def my_custom_required_method(self): + """This function must be overridden.""" + raise NotImplementedError('The `my_custom_required_method` function must be overridden!') + + def my_custom_method(self): + """This function can be overridden.""" + raise NotImplementedError('The `my_custom_method` function can be overridden!') + + required_overrides = [my_custom_required_method] + +class ABCMachine(BaseMachineType): + SLUG = 'abc' + NAME = _('ABC') + DESCRIPTION = _('This is an awesome machine type for ABC.') + + base_driver = ABCBaseDriver + + class ABCStatus(MachineStatus): + CONNECTED = 100, _('Connected'), 'success' + STANDBY = 101, _('Standby'), 'success' + PRINTING = 110, _('Printing'), 'primary' + + MACHINE_STATUS = ABCStatus + default_machine_status = ABCStatus.DISCONNECTED +``` + +#### Machine Type API + +The machine type class gets instantiated for each machine on server startup and the reference is stored in the machine registry. (Therefore `machine.NAME` is the machine type name and `machine.name` links to the machine instances user defined name) + +::: machine.BaseMachineType + options: + heading_level: 5 + show_bases: false + members: + - machine_config + - name + - active + - initialize + - update + - restart + - handle_error + - get_setting + - set_setting + - check_setting + - set_status + - set_status_text + +### Drivers + +Drivers provide the connection layer between physical machines and inventree. There can be multiple drivers defined for the same machine type. Drivers are provided by plugins that are enabled and extend the corresponding base driver for the particular machine type. Each machine type already provides a base driver that needs to be inherited. + +#### Example driver + +A basic driver only needs to specify the basic attributes like `SLUG`, `NAME`, `DESCRIPTION`. The others are given by the used base driver, so take a look at [Machine types](#machine-types). The following example will create an driver called `abc` for the `xyz` machine type. The class will be discovered if it is provided by an **installed & activated** plugin just like this: + +```py +from plugin import InvenTreePlugin +from plugin.machine.machine_types import ABCBaseDriver + +class MyXyzAbcDriverPlugin(InvenTreePlugin): + NAME = "XyzAbcDriver" + SLUG = "xyz-driver" + TITLE = "Xyz Abc Driver" + # ... + +class XYZDriver(ABCBaseDriver): + SLUG = 'my-xyz-driver' + NAME = 'My XYZ driver' + DESCRIPTION = 'This is an awesome XYZ driver for a ABC machine' +``` + +#### Driver API + +::: machine.BaseDriver + options: + heading_level: 5 + show_bases: false + members: + - init_driver + - init_machine + - update_machine + - restart_machine + - get_machines + - handle_error + +### Settings + +Each machine can have different settings configured. There are machine settings that are specific to that machine type and driver settings that are specific to the driver, but both can be specified individually for each machine. Define them by adding a `MACHINE_SETTINGS` dictionary attribute to either the driver or the machine type. The format follows the same pattern as the `SETTINGS` for normal plugins documented on the [`SettingsMixin`](../plugins/settings.md) + +```py +class MyXYZDriver(ABCBaseDriver): + MACHINE_SETTINGS = { + 'SERVER': { + 'name': _('Server'), + 'description': _('IP/Hostname to connect to the cups server'), + 'default': 'localhost', + 'required': True, + } + } +``` + +Settings can even marked as `'required': True` which prevents the machine from starting if the setting is not defined. + +### Machine status + +Machine status can be used to report the machine status to the users. They can be set by the driver for each machine, but get lost on a server restart. + +#### Codes + +Each machine type has a set of status codes defined that can be set for each machine by the driver. There also needs to be a default status code defined. + +```py +from plugin.machine import MachineStatus, BaseMachineType + +class XYZStatus(MachineStatus): + CONNECTED = 100, _('Connected'), 'success' + STANDBY = 101, _('Standby'), 'success' + DISCONNECTED = 400, _('Disconnected'), 'danger' + +class XYZMachineType(BaseMachineType): + # ... + + MACHINE_STATUS = XYZStatus + default_machine_status = XYZStatus.DISCONNECTED +``` + +And to set a status code for a machine by the driver. + +```py +class MyXYZDriver(ABCBaseDriver): + # ... + def init_machine(self, machine): + # ... do some init stuff here + machine.set_status(XYZMachineType.MACHINE_STATUS.CONNECTED) +``` + +**`MachineStatus` API** + +::: machine.machine_type.MachineStatus + options: + heading_level: 5 + show_bases: false + +#### Free text + +There can also be a free text status code defined. + +```py +class MyXYZDriver(ABCBaseDriver): + # ... + def init_machine(self, machine): + # ... do some init stuff here + machine.set_status_text("Paper missing") +``` diff --git a/docs/docs/extend/plugins.md b/docs/docs/extend/plugins.md new file mode 100644 index 000000000000..2c298492f808 --- /dev/null +++ b/docs/docs/extend/plugins.md @@ -0,0 +1,108 @@ +--- +title: Plugins +--- + +## InvenTree Plugin Architecture + +The InvenTree server code supports an extensible plugin architecture, allowing custom plugins to be integrated directly into the database server. This allows development of complex behaviours which are decoupled from core InvenTree code. + +Plugins can be added from multiple sources: + +- Plugins can be installed in InvenTrees venv via PIP (python package manager) +- Custom plugins should be placed in the directory `./src/backend/InvenTree/plugins`. +- InvenTree built-in plugins are located in the directory `./src/backend/InvenTree/plugin/builtin`. + +For further information, read more about [installing plugins](./plugins/install.md). + +### Plugin Base Class + +Custom plugins must inherit from the [InvenTreePlugin class](https://github.com/inventree/InvenTree/blob/2d1776a151721d65d0ae007049d358085b2fcfd5/InvenTree/plugin/plugin.py#L204). Any plugins installed via the methods outlined above will be "discovered" when the InvenTree server launches. + +!!! warning "Namechange" + The name of the base class was changed with `0.7.0` from `IntegrationPluginBase` to `InvenTreePlugin`. While the old name is still available till `0.8.0` we strongly suggest upgrading your plugins. Deprecation warnings are raised if the old name is used. + +### Imports + +As the code base is evolving import paths might change. Therefore we provide stable import targets for important python APIs. +Please read all release notes and watch out for warnings - we generally provide backports for depreciated interfaces for at least one minor release. + +#### Plugins + +General classes and mechanisms are provided under the `plugin` [namespaces](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/__init__.py). These include: + +```python +# Management objects +registry # Object that manages all plugin states and integrations + +# Base classes +InvenTreePlugin # Base class for all plugins + +# Errors +MixinImplementationError # Is raised if a mixin is implemented wrong (default not overwritten for example) +MixinNotImplementedError # Is raised if a mixin was not implemented (core mechanisms are missing from the plugin) +``` + +#### Mixins + +Mixins are split up internally to keep the source tree clean and enable better testing separation. All public APIs that should be used are exposed under `plugin.mixins`. These include all built-in mixins and notification methods. An up-to-date reference can be found in the source code (current master can be [found here](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/mixins/__init__.py)). + +#### Models and other internal InvenTree APIs + +!!! warning "Danger Zone" + The APIs outside of the `plugin` namespace are not structured for public usage and require a more in-depth knowledge of the Django framework. Please ask in GitHub discussions of the `ÌnvenTree` org if you are not sure you are using something the intended way. + +We do not provide stable interfaces to models or any other internal python APIs. If you need to integrate into these parts please make yourself familiar with the codebase. We follow general Django patterns and only stray from them in limited, special cases. +If you need to react to state changes please use the [EventMixin](./plugins/event.md). + +### Plugin Options + +Some metadata options can be defined as constants in the plugins class. + +``` python +NAME = '' # Used as a general reference to the plugin +SLUG = None # Used in URLs, setting-names etc. when a unique slug as a reference is needed -> the plugin name is used if not set +TITLE = None # A nice human friendly name for the plugin -> used in titles, as plugin name etc. + +AUTHOR = None # Author of the plugin, git commit information is used if not present +PUBLISH_DATE = None # Publishing date of the plugin, git commit information is used if not present +WEBSITE = None # Website for the plugin, developer etc. -> is shown in plugin overview if set + +VERSION = None # Version of the plugin +MIN_VERSION = None # Lowest InvenTree version number that is supported by the plugin +MAX_VERSION = None # Highest InvenTree version number that is supported by the plugin +``` + +Refer to the [sample plugins](https://github.com/inventree/InvenTree/tree/master/src/backend/InvenTree/plugin/samples) for further examples. + +### Plugin Config + +A *PluginConfig* database entry will be created for each plugin "discovered" when the server launches. This configuration entry is used to determine if a particular plugin is enabled. + +The configuration entries must be enabled via the [InvenTree admin interface](../settings/admin.md). + +!!! warning "Disabled by Default" + Newly discovered plugins are disabled by default, and must be manually enabled (in the admin interface) by a user with staff privileges. + +### Plugin Mixins + +Common use cases are covered by pre-supplied modules in the form of *mixins* (similar to how [Django]({% include "django.html" %}/topics/class-based-views/mixins/) does it). Each mixin enables the integration into a specific area of InvenTree. Sometimes it also enhances the plugin with helper functions to supply often used functions out-of-the-box. + +Supported mixin classes are: + +| Mixin | Description | +| --- | --- | +| [ActionMixin](./plugins/action.md) | Run custom actions | +| [APICallMixin](./plugins/api.md) | Perform calls to external APIs | +| [AppMixin](./plugins/app.md) | Integrate additional database tables | +| [BarcodeMixin](./plugins/barcode.md) | Support custom barcode actions | +| [CurrencyExchangeMixin](./plugins/currency.md) | Custom interfaces for currency exchange rates | +| [EventMixin](./plugins/event.md) | Respond to events | +| [LabelPrintingMixin](./plugins/label.md) | Custom label printing support | +| [LocateMixin](./plugins/locate.md) | Locate and identify stock items | +| [NavigationMixin](./plugins/navigation.md) | Add custom pages to the web interface | +| [PanelMixin](./plugins/panel.md) | Add custom panels to web views | +| [ReportMixin](./plugins/report.md) | Add custom context data to reports | +| [ScheduleMixin](./plugins/schedule.md) | Schedule periodic tasks | +| [SettingsMixin](./plugins/settings.md) | Integrate user configurable settings | +| [UrlsMixin](./plugins/urls.md) | Respond to custom URL endpoints | +| [ValidationMixin](./plugins/validation.md) | Provide custom validation of database models | diff --git a/docs/docs/extend/plugins/action.md b/docs/docs/extend/plugins/action.md new file mode 100644 index 000000000000..e38bed7dc0fe --- /dev/null +++ b/docs/docs/extend/plugins/action.md @@ -0,0 +1,18 @@ +--- +title: Action Plugins +--- + +## ActionMixin + +Arbitrary "actions" can be called by POSTing data to the `/api/action/` endpoint. The POST request must include the name of the action to be performed, and a matching ActionPlugin plugin must be loaded by the server. Arbitrary data can also be provided to the action plugin via the POST data: + +``` +POST { + action: "MyCustomAction", + data: { + foo: "bar", + } +} +``` + +For an example of a very simple action plugin, refer to `/src/backend/InvenTree/plugin/samples/integratoni/simpleactionplugin.py` diff --git a/docs/docs/extend/plugins/api.md b/docs/docs/extend/plugins/api.md new file mode 100644 index 000000000000..1b9638cb62af --- /dev/null +++ b/docs/docs/extend/plugins/api.md @@ -0,0 +1,7 @@ +--- +title: Schedule Mixin +--- + +## APICallMixin + +The APICallMixin class provides basic functionality for integration with an external API. diff --git a/docs/docs/extend/plugins/app.md b/docs/docs/extend/plugins/app.md new file mode 100644 index 000000000000..c9d42de0a746 --- /dev/null +++ b/docs/docs/extend/plugins/app.md @@ -0,0 +1,10 @@ +--- +title: App Mixin +--- + +## AppMixin + +If this mixin is added to a plugin the directory the plugin class is defined in is added to the list of `INSTALLED_APPS` in the InvenTree server configuration. + +!!! warning "Danger Zone" + Only use this mixin if you have an understanding of djangos [app system]({% include "django.html" %}/ref/applications). Plugins with this mixin are deeply integrated into InvenTree and can cause difficult to reproduce or long-running errors. Use the built-in testing functions of django to make sure your code does not cause unwanted behaviour in InvenTree before releasing. diff --git a/docs/docs/extend/plugins/barcode.md b/docs/docs/extend/plugins/barcode.md new file mode 100644 index 000000000000..33017c1cd9f5 --- /dev/null +++ b/docs/docs/extend/plugins/barcode.md @@ -0,0 +1,57 @@ +--- +title: Barcode Mixin +--- + +### Barcode Plugins + +InvenTree supports decoding of arbitrary barcode data via a **Barcode Plugin** interface. Barcode data POSTed to the `/api/barcode/` endpoint will be supplied to all loaded barcode plugins, and the first plugin to successfully interpret the barcode data will return a response to the client. + +InvenTree can generate native QR codes to represent database objects (e.g. a single StockItem). This barcode can then be used to perform quick lookup of a stock item or location in the database. A client application (for example the InvenTree mobile app) scans a barcode, and sends the barcode data to the InvenTree server. The server then uses the **InvenTreeBarcodePlugin** (found at `/src/backend/InvenTree/plugins/barcode/inventree.py`) to decode the supplied barcode data. + +Any third-party barcodes can be decoded by writing a matching plugin to decode the barcode data. These plugins could then perform a server-side action or render a JSON response back to the client for further action. + +Some examples of possible uses for barcode integration: + +- Stock lookup by scanning a barcode on a box of items +- Receiving goods against a PurchaseOrder by scanning a supplier barcode +- Perform a stock adjustment action (e.g. take 10 parts from stock whenever a barcode is scanned) + +Barcode data are POSTed to the server as follows: + +``` +POST { + barcode_data: "[(>someBarcodeDataWhichThePluginKnowsHowToDealWith" +} +``` + +### Example +Please find below a very simple example that is executed each time a barcode is scanned. + +```python +from django.utils.translation import gettext_lazy as _ + +from InvenTree.models import InvenTreeBarcodeMixin +from plugin import InvenTreePlugin +from plugin.mixins import BarcodeMixin + +class InvenTreeBarcodePlugin(BarcodeMixin, InvenTreePlugin): + + NAME = "MyBarcode" + TITLE = "My Barcodes" + DESCRIPTION = "support for barcodes" + VERSION = "0.0.1" + AUTHOR = "Michael" + + status = 0 + + def scan(self, barcode_data): + + self.status = self.status+1 + print('Started barcode plugin', self.status) + print(barcode_data) + response = {} + return response + +``` + +To try it just copy the file to src/InvenTree/plugins and restart the server. Open the scan barcode window and start to scan codes or type in text manually. Each time the timeout is hit the plugin will execute and printout the result. The timeout can be changed in `Settings->Barcode Support->Barcode Input Delay`. diff --git a/docs/docs/extend/plugins/currency.md b/docs/docs/extend/plugins/currency.md new file mode 100644 index 000000000000..b96178379d9c --- /dev/null +++ b/docs/docs/extend/plugins/currency.md @@ -0,0 +1,45 @@ +--- +title: Currency Exchange Mixin +--- + +## CurrencyExchangeMixin + +The `CurrencyExchangeMixin` class enabled plugins to provide custom backends for updating currency exchange rate information. + +Any implementing classes must provide the `update_exchange_rates` method. A simple example is shown below (with fake data). + +```python + +from plugin import InvenTreePlugin +from plugin.mixins import CurrencyExchangeMixin + +class MyFirstCurrencyExchangePlugin(CurrencyExchangeMixin, InvenTreePlugin): + """Sample currency exchange plugin""" + + ... + + def update_exchange_rates(self, base_currency: str, symbols: list[str]) -> dict: + """Update currency exchange rates. + + This method *must* be implemented by the plugin class. + + Arguments: + base_currency: The base currency to use for exchange rates + symbols: A list of currency symbols to retrieve exchange rates for + + Returns: + A dictionary of exchange rates, or None if the update failed + + Raises: + Can raise any exception if the update fails + """ + + rates = { + 'base_currency': 1.00 + } + + for sym in symbols: + rates[sym] = random.randrange(5, 15) * 0.1 + + return rates +``` diff --git a/docs/docs/extend/plugins/event.md b/docs/docs/extend/plugins/event.md new file mode 100644 index 000000000000..4fba5aa95610 --- /dev/null +++ b/docs/docs/extend/plugins/event.md @@ -0,0 +1,73 @@ +--- +title: Event Mixin +--- + +## EventMixin + +The `EventMixin` class enables plugins to respond to certain triggered events. + +When a certain (server-side) event occurs, the background worker passes the event information to any plugins which inherit from the `EventMixin` base class. + +!!! tip "Enable Event Integration" + The *Enable Event Integration* option must first be enabled to allow plugins to respond to events. + +{% with id="events", url="plugin/enable_events.png", description="Enable event integration" %} +{% include 'img.html' %} +{% endwith %} + +### Example (all events) + +Implementing classes must at least provide a `process_event` function: + +```python +class EventPlugin(EventMixin, InvenTreePlugin): + """ + A simple example plugin which responds to events on the InvenTree server. + + This example simply prints out the event information. + A more complex plugin could respond to specific events however it wanted. + """ + + NAME = "EventPlugin" + SLUG = "event" + TITLE = "Triggered Events" + + def process_event(self, event, *args, **kwargs): + print(f"Processing triggered event: '{event}'") +``` + +### Example (specific events) + +If you want to process just some specific events, you can also implement the `wants_process_event` function to decide if you want to process this event or not. This function will be executed synchronously, so be aware that it should contain simple logic. + +Overall this function can reduce the workload on the background workers significantly since less events are queued to be processed. + +```python +class EventPlugin(EventMixin, InvenTreePlugin): + """ + A simple example plugin which responds to 'salesordershipment.completed' event on the InvenTree server. + + This example simply prints out the event information. + A more complex plugin can run enhanced logic on this event. + """ + + NAME = "EventPlugin" + SLUG = "event" + TITLE = "Triggered Events" + + def wants_process_event(self, event): + """Here you can decide if this event should be send to `process_event` or not.""" + return event == "salesordershipment.completed" + + def process_event(self, event, *args, **kwargs): + """Here you can run you'r specific logic.""" + print(f"Sales order was completely shipped: '{args}' '{kwargs}'") +``` + +### Events + +Events are passed through using a string identifier, e.g. `build.completed` + +The arguments (and keyword arguments) passed to the receiving function depend entirely on the type of event. + +Implementing a response to a particular event requires a working knowledge of the InvenTree code base, especially related to that event being received. diff --git a/docs/docs/extend/plugins/icon.md b/docs/docs/extend/plugins/icon.md deleted file mode 100644 index 891353928502..000000000000 --- a/docs/docs/extend/plugins/icon.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Icon Pack Mixin ---- - -## IconPackMixin - -The IconPackMixin class provides basic functionality for letting plugins expose custom icon packs that are available in the InvenTree UI. This is especially useful to provide a custom crafted icon pack with icons for different location types, e.g. different sizes and styles of drawers, bags, ESD bags, ... which are not available in the standard tabler icons library. - -### Sample Plugin - -The following example demonstrates how to use the `IconPackMixin` class to add a custom icon pack: - -::: plugin.samples.icons.icon_sample.SampleIconPlugin - options: - show_bases: False - show_root_heading: False - show_root_toc_entry: False - show_source: True - members: [] diff --git a/docs/docs/extend/plugins/install.md b/docs/docs/extend/plugins/install.md new file mode 100644 index 000000000000..9588d3a96eb5 --- /dev/null +++ b/docs/docs/extend/plugins/install.md @@ -0,0 +1,92 @@ +--- +title: Installing Plugins +--- + + +## Installing a Plugin + +Plugins can either be loaded from paths in the InvenTree install directory or as a plugin installed via pip. We recommend installation via pip as this enables hassle-free upgrades. + +### Common Issues + +Installing plugins can be complex! Some common issues are outlined below: + +#### Enable Plugin Support + +To enable custom plugins, plugin support must be activated in the [server configuration](../../start/config.md#plugin-options). This step must be performed by a system administrator before the InvenTree server is started. + +#### Restart Server + +Plugins are discovered and loaded only when the server is started. When new plugins are installed (and activated), both the web server and background worker must be restarted. + +#### Container Environments + +In certain container environments (such as docker), plugins are installed into an *ephemeral* virtual environment which persists only for the lifetime of the container. To allow for this, InvenTree provides a configurable setting which can automatically install plugins whenever the container is loaded. + +!!! tip "Check Plugins on Startup" + Ensure the **Check Plugins on Startup** option is enabled, when running InvenTree in a container environment! + +{% with id="check_plugins", url="plugin/check_on_startup.png", description="Check plugins on startup" %} +{% include 'img.html' %} +{% endwith %} + +### Installation Methods + +#### Builtin Plugins + +Builtin plugins ship in `src/backend/InvenTree/plugin/builtin`. To achieve full unit-testing for all mixins there are some sample implementations in `src/backend/InvenTree/plugin/samples`. + +!!! success "Builtin Plugins" + Builtin plugins are always enabled, as they are required for core InvenTree functionality + +!!! info "Debug Only" + The sample plugins are not loaded in production mode. + +#### Plugin Installation File (PIP) + +Plugins installation can be simplified by providing a list of plugins in a plugin configuration file. This file (by default, *plugins.txt* in the same directory as the server configuration file) contains a list of required plugin packages. + +Plugins can be then installed from this file by simply running the command `invoke plugins`. + +Installation via PIP (using the *plugins.txt* file) provides a number of advantages: + +- Any required secondary packages are installed automatically +- You can update plugins simply by specifying version numbers in *plugins.txt* +- Migrating plugins between systems is simplified +- You can install plugins via any source supported by PIP + +!!! success "Auto Update" + When the server installation is updated via the `invoke update` command, the plugins (as specified in *plugins.txt*) will also be updated automatically. + +!!! info "Plugin File Location" + The location of your plugin configuration file will depend on your [server configuration](../../start/config.md) + +#### Web Interface + +Admin users can install plugins directly from the web interface, via the "Plugin Settings" view: + +{% with id="plugin_install", url="plugin/plugin_install_web.png", description="Install via web interface" %} +{% include 'img.html' %} +{% endwith %} + +!!! success "Plugin File" + A plugin installed via the web interface is added to the [plugins.txt](#plugin-installation-file-pip) plugin file. + +#### Local Directory + +Custom plugins can be placed in the `src/InvenTree/plugins/` directory, where they will be automatically discovered. This can be useful for developing and testing plugins, but can prove more difficult in production (e.g. when using Docker). + +!!! info "Git Tracking" + The `src/backend/InvenTree/plugins/` directory is excluded from Git version tracking - any plugin files here will be hidden from Git + +!!! warning "Not Recommended For Production" + Loading plugins via the local *plugins* directory is not recommended for production. If you cannot use PIP installation (above), specify a custom plugin directory (below) or use a [VCS](https://pip.pypa.io/en/stable/topics/vcs-support/) as a plugin install source. + +#### Custom Directory + +If you wish to install plugins from local source, rather than PIP, it is better to place your plugins in a directory outside the InvenTree source directory. + +To achieve this, set the `INVENTREE_PLUGIN_DIR` environment variable to the directory where locally sourced plugins are located. Refer to the [configuration options](../../start/config.md#plugin-options) for further information. + +!!! info "Docker" + When running InvenTree in docker, a *plugins* directory is automatically created in the mounted data volume. Any plugins can be placed there, and will be automatically loaded when the server is started. diff --git a/docs/docs/extend/plugins/label.md b/docs/docs/extend/plugins/label.md new file mode 100644 index 000000000000..72d6579dab07 --- /dev/null +++ b/docs/docs/extend/plugins/label.md @@ -0,0 +1,179 @@ +--- +title: Label Mixin +--- + +## LabelPrintingMixin + +The `LabelPrintingMixin` class allows plugins to provide custom label printing functionality. The specific implementation of a label printing plugin is quite flexible, allowing for the following functions (as a starting point): + +- Printing a single label to a file, and allowing user to download +- Combining multiple labels onto a single page +- Supporting proprietary label sheet formats +- Offloading label printing to an external printer + +### Entry Point + +When printing labels against a particular plugin, the entry point is the `print_labels` method. The default implementation of this method iterates over each of the provided items, renders a PDF, and calls the `print_label` method for each item, providing the rendered PDF data. + +Both the `print_labels` and `print_label` methods may be overridden by a plugin, allowing for complex functionality to be achieved. + +For example, the `print_labels` method could be reimplemented to merge all labels into a single larger page, and return a single page for printing. + +### Return Type + +The `print_labels` method *must* return a JsonResponse object. If the method does not return such a response, an error will be raised by the server. + +### File Generation + +If the label printing plugin generates a real file, it should be stored as a `LabelOutput` instance in the database, and returned in the JsonResponse result under the 'file' key. + +For example, the built-in `InvenTreeLabelPlugin` plugin generates a PDF file which contains all the provided labels concatenated together. A snippet of the code is shown below (refer to the source code for full details): + +```python +# Save the generated file to the database +output = LabelOutput.objects.create( + label=output_file, + user=request.user +) + +return JsonResponse({ + 'file': output.label.url, + 'success': True, + 'message': f'{len(items)} labels generated' +}) +``` + +### Background Printing + +For some label printing processes (such as offloading printing to an external networked printer) it may be preferable to utilize the background worker process, and not block the front-end server. +The plugin provides an easy method to offload printing to the background thread. + +Simply override the class attribute `BLOCKING_PRINT` as follows: + +```python +class MyPrinterPlugin(LabelPrintingMixin, InvenTreePlugin): + BLOCKING_PRINT = False +``` + +If the `print_labels` method is not changed, this will run the `print_label` method in a background worker thread. + +!!! info "Example Plugin" + Check out the [inventree-brother-plugin](https://github.com/inventree/inventree-brother-plugin) which provides native support for the Brother QL and PT series of networked label printers + +!!! tip "Custom Code" + If your plugin overrides the `print_labels` method, you will have to ensure that the label printing is correctly offloaded to the background worker. Look at the `offload_label` method of the plugin mixin class for how this can be achieved. + +### Printing options + +A printing plugin can define custom options as a serializer class called `PrintingOptionsSerializer` that get shown on the printing screen and get passed to the `print_labels`/`print_label` function as a kwarg called `printing_options`. This can be used to e.g. let the user dynamically select the orientation of the label, the color mode, ... for each print job. +The following simple example shows how to implement an orientation select. For more information about how to define fields, refer to the django rest framework (DRF) [documentation](https://www.django-rest-framework.org/api-guide/fields/). + +```py +from rest_framework import serializers + +class MyLabelPrinter(LabelPrintingMixin, InvenTreePlugin): + ... + + class PrintingOptionsSerializer(serializers.Serializer): + orientation = serializers.ChoiceField(choices=[ + ("landscape", "Landscape"), + ("portrait", "Portrait"), + ]) + + def print_label(self, **kwargs): + print(kwargs["printing_options"]) # -> {"orientation": "landscape"} + ... +``` + +!!! tip "Dynamically return a serializer instance" + If your plugin wants to dynamically expose options based on the request, you can implement the `get_printing_options_serializer` function which by default returns an instance + of the `PrintingOptionsSerializer` class if defined. + +### Helper Methods + +The plugin class provides a number of additional helper methods which may be useful for generating labels: + +| Method | Description | +| --- | --- | +| render_to_pdf | Render label template to an in-memory PDF object | +| render_to_html | Render label template to a raw HTML string | +| render_to_png | Convert PDF data to an in-memory PNG image | + +!!! info "Use the Source" + These methods are available for more complex implementations - refer to the source code for more information! + +### Merging Labels + +To merge (combine) multiple labels into a single output (for example printing multiple labels on a single sheet of paper), the plugin must override the `print_labels` method and implement the required functionality. + +## Integration + +### Web Integration + +If label printing plugins are enabled, they are able to be used directly from the InvenTree web interface: + +{% with id="label_print", url="plugin/print_label_select_plugin.png", description="Print label via plugin" %} +{% include 'img.html' %} +{% endwith %} + +### App Integration + +Label printing plugins also allow direct printing of labels via the [mobile app](../../app/stock.md#print-label) + +## Implementation + +Plugins which implement the `LabelPrintingMixin` mixin class can be implemented by simply providing a `print_label` method. + +### Simple Example + +```python +from dummy_printer import printer_backend + +class MyLabelPrinter(LabelPrintingMixin, InvenTreePlugin): + """ + A simple example plugin which provides support for a dummy printer. + + A more complex plugin would communicate with an actual printer! + """ + + NAME = "MyLabelPrinter" + SLUG = "mylabel" + TITLE = "A dummy printer" + + # Set BLOCKING_PRINT to false to return immediately + BLOCKING_PRINT = False + + def print_label(self, **kwargs): + """ + Send the label to the printer + + kwargs: + pdf_file: The PDF file object of the rendered label (WeasyTemplateResponse object) + pdf_data: Raw PDF data of the rendered label + filename: The filename of this PDF label + label_instance: The instance of the label model which triggered the print_label() method + item_instance: The instance of the database model against which the label is printed + user: The user who triggered this print job + width: The expected width of the label (in mm) + height: The expected height of the label (in mm) + printing_options: The printing options set for this print job defined in the PrintingOptionsSerializer + """ + + width = kwargs['width'] + height = kwargs['height'] + + # This dummy printer supports printing of raw image files + printer_backend.print(png_file, w=width, h=height) +``` + +### Default Plugin + +InvenTree supplies the `InvenTreeLabelPlugin` out of the box, which generates a PDF file which is then available for immediate download by the user. + +The default plugin also features a *DEBUG* mode which generates a raw HTML output, rather than PDF. This can be handy for tracking down any template rendering errors in your labels. + +### Available Data + +The *label* data are supplied to the plugin in both `PDF` and `PNG` formats. This provides compatibility with a great range of label printers "out of the box". Conversion to other formats, if required, is left as an exercise for the plugin developer. + +Other arguments provided to the `print_label` function are documented in the code sample above. diff --git a/docs/docs/extend/plugins/locate.md b/docs/docs/extend/plugins/locate.md new file mode 100644 index 000000000000..956dbedd7f01 --- /dev/null +++ b/docs/docs/extend/plugins/locate.md @@ -0,0 +1,31 @@ +--- +title: Locate Mixin +--- + +## LocateMixin + +The `LocateMixin` class enables plugins to "locate" stock items (or stock locations) via an entirely custom method. + +For example, a warehouse could be arranged with each individual 'parts bin' having an audio-visual indicator (e.g. RGB LED and buzzer). "Locating" a particular stock item causes the LED to flash and the buzzer to sound. + +Another example might be a parts retrieval system, where "locating" a stock item causes the stock item to be "delivered" to the user via a conveyor. + +The possibilities are endless! + +### Web Integration + +{% with id="web_locate", url="plugin/web_locate.png", description="Locate stock item from web interface", maxheight="400px" %} +{% include 'img.html' %} +{% endwith %} + +### App Integration + +If a locate plugin is installed and activated, the [InvenTree mobile app](../../app/app.md) displays a button for locating a StockItem or StockLocation (see below): + +{% with id="app_locate", url="plugin/app_locate.png", description="Locate stock item from app", maxheight="400px" %} +{% include 'img.html' %} +{% endwith %} + +### Implementation + +Refer to the [InvenTree source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/locate/locate_sample.py) for a simple implementation example. diff --git a/docs/docs/extend/plugins/metadata.md b/docs/docs/extend/plugins/metadata.md new file mode 100644 index 000000000000..216fe28fadae --- /dev/null +++ b/docs/docs/extend/plugins/metadata.md @@ -0,0 +1,131 @@ +--- +title: Model Metadata +--- + +## Model Metadata + +Plugins have access to internal database models (such at [Parts](../../part/part.md)), and any associated data associated with these models. It may be the case that a particular plugin needs to store some extra information about a particular model instance, to be able to perform custom functionality. + +One way of achieving this would be to create an entirely new database model to keep track of this information, using the [app plugin mixin](./app.md). However, this is a very heavy-handed (and complicated) approach! + +A much simpler and more accessible method of recording custom information against a given model instance is provided "out of the box" - using *Model Metadata*. + +### MetadataMixin Class + +*Most* of the models in the InvenTree database inherit from the `MetadataMixin` class, which adds the `metadata` field to each inheriting model. The `metadata` field is a [JSONField]({% include "django.html" %}/ref/models/fields/#django.db.models.JSONField) which allows for storing arbitrary JSON data against the model instance. + +This field is provided to allow any plugins to store and retrieve arbitrary data against any item in the database. + +!!! tip "External Use Only" + It is important to note that the `metadata` field of each model instance is not used for any internal functionality. Any data stored against this field is only for use by external plugins. + +## Accessing Metadata + +### Plugin Access + +The `metadata` field can be accessed and updated directly from custom plugin code, as follows: + +```python +from part.models import Part + +# Show metadata value against a particular Part instance +part = Part.objects.get(pk=100) +print(part.metadata) + +> {'foo': 'bar'} + +part.metadata['hello'] = 'world' +print(part.metadata) + +> {'foo': 'bar', 'hello': 'world'} +``` + +### 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: + +{% with id="metadata_api", url="plugin/model_metadata_api.png", description="Access model metadata via API", maxheight="400px" %} +{% include 'img.html' %} +{% endwith %} + +#### PUT vs PATCH + +An important note with regard to metadata access via the API is the behaviour of a `PUT` request vs a `PATCH` request. As demonstrated in the comparison below, a `PUT` request will *overwrite* existing data, while a `PATCH` request will *merge* with existing data. + +**Initial Data:** + +```json +{"foo": "bar", "hello": "world"} +``` + +**Payload:** + +```json +{"xyz": "XYZ"} +``` + +**Result of PUT request:** + +```json +{"xyz: XYZ"} +``` + +**Result of PATCH request:** + +```json +{"foo": "bar", "hello": "world", "xyz": "XYZ"} +``` + +!!! danger "Take Care" + Take care when updating metadata via the API, especially when using a PUT request. + +### Python API Access + +The [Python API library](../../api/python/python.md) provides similar support for accessing model metadata. Use the `setMetadata` method to retrieve metadata information from the server: + +```python +from inventree.api import InvenTreeAPI +from inventree.part import Part + +api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") + +part = Part(api, pk=100) + +print(part.getMetadata()) + +> {'foo': 'bar', 'hello': 'world'} +``` + +Metadata can be added directly here using the `setMetadata` method: + +```python +part.setMetadata("abc", "xyz") + +print(part.getMetadata()) + +> {'abc': 'xyz', 'foo': 'bar', 'hello': 'world'} +``` + +!!! tip "Merge vs Overwrite" + By default setting a metadata `key:value` pair will *merge* data in with existing data, by using a [PATCH request](#put-vs-patch). + +To *overwrite* existing metadata, use the `overwrite=True` flag: + +```python +part.setMetadata({"aaa": "ABC"}, overwrite=True) + +print(part.getMetadata()) +> {'aaa': 'ABC'} +``` + +## Considerations + +### Data Keys + +There is no guarantee that the data added to a particular model will *not* be overwritten by a different plugin. Your plugin should at least ensure that the data keys used are unique to the plugin, to ensure that they do not conflict with other plugins + +### Structured Data + +If you need to store data which is more "structured" than JSON objects, consider using the (more complex) [app mixin](../plugins/app.md) to develop custom database tables for your data. diff --git a/docs/docs/extend/plugins/navigation.md b/docs/docs/extend/plugins/navigation.md new file mode 100644 index 000000000000..09cb3d4e524b --- /dev/null +++ b/docs/docs/extend/plugins/navigation.md @@ -0,0 +1,23 @@ +--- +title: Navigation Mixin +--- + +## NavigationMixin + +Use the class constant `NAVIGATION` for a array of links that should be added to InvenTrees navigation header. +The array must contain at least one dict that at least define a name and a link for each element. The link must be formatted for a URL pattern name lookup - links to external sites are not possible directly. The optional icon must be a class reference to an icon (InvenTree ships with fontawesome 4 by default). + +``` python +class MyNavigationPlugin(NavigationMixin, InvenTreePlugin): + + NAME = "NavigationPlugin" + + NAVIGATION = [ + {'name': 'SampleIntegration', 'link': 'plugin:sample:hi', 'icon': 'fas fa-box'}, + ] + + NAVIGATION_TAB_NAME = "Sample Nav" + NAVIGATION_TAB_ICON = 'fas fa-plus' +``` + +The optional class constants `NAVIGATION_TAB_NAME` and `NAVIGATION_TAB_ICON` can be used to change the name and icon for the parent navigation node. diff --git a/docs/docs/extend/plugins/panel.md b/docs/docs/extend/plugins/panel.md new file mode 100644 index 000000000000..542c4b0afa58 --- /dev/null +++ b/docs/docs/extend/plugins/panel.md @@ -0,0 +1,372 @@ +--- +title: Panel Mixin +--- + +## PanelMixin + +The `PanelMixin` enables plugins to render custom content to "panels" on individual pages in the web interface. + +Most pages in the web interface support multiple panels, which are selected via the sidebar menu on the left side of the screen: + +{% with id="panels", url="plugin/panels.png", description="Display panels" %} +{% include 'img.html' %} +{% endwith %} + + +Each plugin which implements this mixin can return zero or more custom panels for a particular page. The plugin can decide (at runtime) which panels it wishes to render. This determination can be made based on the page routing, the item being viewed, the particular user, or other considerations. + +### Panel Content + +Panel content can be rendered by returning HTML directly, or by rendering from a template file. + +Each plugin can register templates simply by providing a 'templates' directory in its root path. + +The convention is that each 'templates' directory contains a subdirectory with the same name as the plugin (e.g. `templates/myplugin/my_template.html`) + +In this case, the template can then be loaded (from any plugin!) by loading `myplugin/my_template.html`. + + +### Javascript + +Custom code can be provided which will run when the particular panel is first loaded (by selecting it from the side menu). + +To add some javascript code, you can add a reference to a function that will be called when the panel is loaded with the 'javascript' key in the panel description: + +```python +{ + 'title': "Updates", + 'description': "Latest updates for this part", + 'javascript': 'alert("You just loaded this panel!")', +} +``` + +Or to add a template file that will be rendered as javascript code, from the plugin template folder, with the 'javascript_template' key in the panel description: + +```python +{ + 'title': "Updates", + 'description': "Latest updates for this part", + 'javascript_template': 'pluginTemplatePath/myJavascriptFile.js', +} +``` + +Note : see convention for template directory above. + +## Example Implementations + +Refer to the `CustomPanelSample` example class in the `./plugin/samples/integration/` directory, for a fully worked example of how custom UI panels can be implemented. + +### An example with button and parameter + +Let's have a look at another example. We like to have a new panel that contains a button. +Each time the button is clicked, a python function in our plugin shall be executed and +a parameter shall be transferred . The result will look like that: + +{% with id="mouser", url="plugin/mouser.png", description="Panel example with button" %} {% include "img.html" %} {% endwith %} + + +First we need to write the plugin code, similar as in the example above. + +```python +from django.urls import re_path +from django.http import HttpResponse + +from order.views import PurchaseOrderDetail +from plugin import InvenTreePlugin +from plugin.mixins import PanelMixin, UrlsMixin + +class MouserCartPanel(PanelMixin, InvenTreePlugin, UrlsMixin): + + value=1 + + NAME = "MouserCart" + SLUG = "mousercart" + TITLE = "Create Mouser Cart" + DESCRIPTION = "An example plugin demonstrating a button calling a python function." + VERSION = "0.1" + + def get_custom_panels(self, view, request): + panels = [] + + # This panel will *only* display on the PurchaseOrder view, + if isinstance(view, PurchaseOrderDetail): + panels.append({ + 'title': 'Mouser Actions', + 'icon': 'fa-user', + 'content_template': 'mouser/mouser.html', + }) + return panels + + def setup_urls(self): + return [ + re_path(r'transfercart/(?P\d+)/', self.TransferCart, name='get-cart') + ] + +#---------------------------------------------------------------------------- + def TransferCart(self,request,pk): + + print('User,pk:',request.user,pk) + self.value=self.value+1 + return HttpResponse(f'OK') +``` + +The code is simple and really stripped down to the minimum. In the plugin class we first define the plugin metadata. +Afterwards we define the custom panel. Here we use a html template to describe the content of the panel. We need to +add the path here because the template resides in the subdirectory templates/mouser. +Then we setup the url. This is important. The url connects the http request with the function to be executed. +May be it is worth to leave a few more words on this because the string looks a bit like white noise. +*transfercart* is the url which can be chosen freely. The ? is well known for parameters. In this case we +get just one parameter, the orders primary key.* \d+* is a regular expression that limits the parameters +to a digital number with n digits. Let's have a look on the names and how they belong together: + +{% with id="plugin_dataflow", url="plugin/plugin_dataflow.png", description="Dataflow between Javascript and Python" %} {% include "img.html" %} {% endwith %} + +Finally we define the function. This is a simple increment of a class value. + +Now lets have a look at the template file mouser.html + +```html +{% raw %} +{% load i18n %} + + + + + +
    +{{ order.description }} +{{ plugin.value }} +{% endraw %} +``` + +We start with a bit of javascript. The function JGetCart just calls the url +that has been defined in the python code above. The url consists of a full +path `plugin:plugin-name:url-name`. The plugin-name is the SLUG that was +defined in the plugin code. order.pk is the parameter that is passed to python. + +The button is defined with `class="btn btn-info` This is an InvenTree predefined button. There a are lots of others available. +Here are some examples of available colors: + +{% with id="buttons", url="plugin/buttons.png", description="Button examples" %} {% include "img.html" %} {% endwith %} + +Please have a look at the css files for more options. The last line renders the value that was defined in the plugin. + +!!! tip "Give it a try" + Each time you press the button, the value will be increased. + +### Handling user input + +A common user case is user input that needs to be passed from the panel into +the plugin for further processing. Lets have a look at another example. We +will define two user input fields. One is an integer the other one a string. +A button will be defined to submit the data. Something like that: + +{% with id="panel_with_userinput", url="plugin/panel_with_userinput.png", description="Panel with user input" %} {% include "img.html" %} {% endwith %} + +Here is the plugin code: + +```python +from django.urls import path +from django.http import HttpResponse + +from plugin import InvenTreePlugin +from plugin.mixins import PanelMixin, UrlsMixin + +class ExamplePanel(PanelMixin, InvenTreePlugin, UrlsMixin): + + NAME = "ExamplePanel" + SLUG = "examplepanel" + TITLE = "Example for data input" + AUTHOR = "Michael" + DESCRIPTION = "This plugin passes user input from the panel to the plugin" + +# Create the panel that will display on build detail view + def get_custom_panels(self, view, request): + panels = [] + if isinstance(view, BuildDetail): + self.build=view.get_object() + panels.append({ + 'title': 'Example Info', + 'icon': 'fa-industry', + 'content_template': 'example_panel/example.html', + }) + return panels + + def setup_urls(self): + return [ + path("example///", + self.do_something, name = 'transfer'), + ] + +# Define the function that will be called. + def do_something(self, request, layer, size): + + print('Example panel received:', layer, size) + return HttpResponse(f'OK') +``` + +The start is easy because it is the same as in the example above. +Lets concentrate on the setup_urls. This time we use +path (imported from django.urls) instead of url for definition. Using path makes it easier to +define the data types. No regular expressions. The URL takes two parameters, +layer and size, and passes them to the python function do_something for further processing. +Now the html template: + +```html +{% raw %} + + +
    + Number of Layers
    +
    + Size of Board in mm
    + +
    + + +{% endraw %} +``` + +The HTML defines the form for user input, one number and one string. Each +form has an ID that is used in the javascript code to get the input of the form. +The response URL must match the URL defined in the plugin. Here we have a number +(999999) and a string (Size). These get replaced with the content of the fields +upon execution using replace. Watch out for the ticks around the 999999 and Size. They prevent +them from being interpreted by the django template engine and replaced by +something else. + +The function inventreeFormDataUpload is a helper function defined by InvenTree +that does the POST request, handles errors and the csrftoken. + +!!! tip "Give it a try" + change the values in the fields and push Save. You will see the values + in the InvenTree log. + +#### If things are getting more complicated + +In the example above we code all parameters into the URL. This is easy and OK +if you transfer just a few values. But the method has at least two disadvantages: + +* When you have more parameters, things will get messy. +* When you have free text input fields, the user might enter characters that are not allowed in URL. + +For those cases it is better to pack the data into a json container and transfer +this in the body of the request message. The changes are simple. Lets start with +the javascript: + +```html +{% raw %} + +{% endraw %} +``` + +Here we create a json container (data). The function stringify converts this to the +proper string format for transfer. That's all. The function inventreeFormDataUpload +does the rest of the work. + +The python code in the plugin also needs minor changes: + +```python +from django.urls import re_path +import json + +... + + def setup_urls(self): + return [ + re_path(r'example(?:\.(?Pjson))?$', self.do_something, name='transfer'), + ] + +# Define the function that will be called. + def do_something(self, request): + + data=json.loads(request.body) + print('Data received:', data) +``` + +The URL and the called function have no parameter names any longer. All data is in the +request message and can be extracted from this using json.loads. If more data is needed +just add it to the json container. No further changes are needed. It's really simple :-) + +#### Populate a drop down field + +Now we add a dropdown menu and fill it with values from the InvenTree database. + +{% with id="panel_with_dropwdown", url="plugin/panel_with_dropdown.png", description="Panel with dropdown menu" %} +{% include "img.html" %} +{% endwith %} + + +```python +from company.models import Company + +... + + def get_custom_panels(self, view, request): + panels = [] + if isinstance(view, BuildDetail): + self.build=view.get_object() + self.companies=Company.objects.filter(is_supplier=True) + panels.append({ + ... +``` +Here we create self.companies and fill it with all companies that have the is_supplier flag +set to true. This is available in the context of the template. A drop down menu can be created +by looping. + + +```html +{% raw %} + +{% endraw %} +``` + +The value of the select is the pk of the company. It can simply be added to the +json container and transferred to the plugin. + +#### Store the Data +I case you plugin needs to store data permanently, InvenTree has a nice feature called +[metadata](metadata.md). You can easily store your values by adding a few lines +to the do_something function. +code: + +```python + def do_something(self, request): + + data=json.loads(request.body) + print('Data received:', data) + for key in data: + self.build.metadata[key]=data[key] + self.build.save() +``` diff --git a/docs/docs/extend/plugins/report.md b/docs/docs/extend/plugins/report.md new file mode 100644 index 000000000000..0e2cdc671eba --- /dev/null +++ b/docs/docs/extend/plugins/report.md @@ -0,0 +1,61 @@ +--- +title: Report Mixin +--- + +## ReportMixin + +The ReportMixin class provides a plugin with the ability to extend the functionality of custom [report templates](../../report/report.md). A plugin which implements the ReportMixin mixin class can add custom context data to a report template for rendering. + +### Add Report Context + +A plugin which implements the ReportMixin mixin can define the `add_report_context` method, allowing custom context data to be added to a report template at time of printing. + +### Add Label Context + +Additionally the `add_label_context` method, allowing custom context data to be added to a label template at time of printing. + +### Example + +A sample plugin which provides additional context data to the report templates can be found [in the InvenTree source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py): + +```python +"""Sample plugin for extending reporting functionality""" + +import random + +from plugin import InvenTreePlugin +from plugin.mixins import ReportMixin +from report.models import PurchaseOrderReport + + +class SampleReportPlugin(ReportMixin, InvenTreePlugin): + """Sample plugin which provides extra context data to a report""" + + NAME = "Sample Report Plugin" + SLUG = "reportexample" + TITLE = "Sample Report Plugin" + DESCRIPTION = "A sample plugin which provides extra context data to a report" + VERSION = "1.0" + + def some_custom_function(self): + """Some custom function which is not required for the plugin to function""" + return random.randint(0, 100) + + def add_report_context(self, report_instance, model_instance, request, context): + + """Add example content to the report instance""" + + # We can add any extra context data we want to the report + + # Generate a random string of data + context['random_text'] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz', k=20)) + + # Call a custom method + context['random_int'] = self.some_custom_function() + + # We can also add extra data to the context which is specific to the report type + context['is_purchase_order'] = isinstance(report_instance, PurchaseOrderReport) + + # We can also use the 'request' object to add extra context data + context['request_method'] = request.method +``` diff --git a/docs/docs/extend/plugins/schedule.md b/docs/docs/extend/plugins/schedule.md new file mode 100644 index 000000000000..a72901b52689 --- /dev/null +++ b/docs/docs/extend/plugins/schedule.md @@ -0,0 +1,62 @@ +--- +title: Schedule Mixin +--- + +## ScheduleMixin + +The ScheduleMixin class provides a plugin with the ability to call functions at regular intervals. + +- Functions are registered with the InvenTree worker which runs as a background process. +- Scheduled functions do not accept any arguments +- Plugin member functions can be called +- Global functions can be specified using dotted notation + +!!! tip "Enable Schedule Integration" + The *Enable Schedule Integration* option but be enabled, for scheduled plugin events to be activated. + +{% with id="schedule", url="plugin/enable_schedule.png", description="Enable schedule integration" %} +{% include 'img.html' %} +{% endwith %} + +### Example + +An example of a plugin which supports scheduled tasks: + +```python +class ScheduledTaskPlugin(ScheduleMixin, SettingsMixin, InvenTreePlugin): + """ + Sample plugin which runs a scheduled task, and provides user configuration. + """ + + NAME = "Scheduled Tasks" + SLUG = 'schedule' + + SCHEDULED_TASKS = { + 'global': { + 'func': 'some_module.function', + 'schedule': 'H', # Run every hour + }, + 'member': { + 'func': 'foo', + 'schedule': 'I', # Minutes + 'minutes': 15, + }, + } + + SETTINGS = { + 'SECRET': { + 'name': 'A secret', + 'description': 'User configurable value', + }, + } + + def foo(self): + """ + This function runs every 15 minutes + """ + secret_value = self.get_setting('SECRET') + print(f"foo - SECRET = {secret_value}) +``` + +!!! info "More Info" + For more information on any of the methods described below, refer to the InvenTree source code. [A working example is available as a starting point](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/scheduled_task.py). diff --git a/docs/docs/extend/plugins/settings.md b/docs/docs/extend/plugins/settings.md new file mode 100644 index 000000000000..178d5b1f927d --- /dev/null +++ b/docs/docs/extend/plugins/settings.md @@ -0,0 +1,82 @@ +--- +title: Settings Mixin +--- + +## SettingsMixin + +The *SettingsMixin* allows the plugin to save and load persistent settings to the database. + +- Plugin settings are stored against the individual plugin, and thus do not have to be unique +- Plugin settings are stored using a "key:value" pair + +Use the class constant `SETTINGS` for a dict of settings that should be added as global database settings. + +The dict must be formatted similar to the following sample that shows how to use validator choices and default. + +Take a look at the settings defined in `InvenTree.common.models.InvenTreeSetting` for all possible parameters. + +### Example + +Below is a simple example of how a plugin can implement settings: + +``` python +class PluginWithSettings(SettingsMixin, InvenTreePlugin): + + NAME = "PluginWithSettings" + + SETTINGS = { + 'API_ENABLE': { + 'name': 'API Functionality', + 'description': 'Enable remote API queries', + 'validator': bool, + 'default': True, + }, + 'API_KEY': { + 'name': 'API Key', + 'description': 'Security key for accessing remote API', + 'default': '', + 'required': True, + }, + 'API_URL': { + 'name': _('API URL'), + 'description': _('Base URL for remote server'), + 'default': 'http://remote.url/api', + }, + 'CONNECTION': { + 'name': _('Printer Interface'), + 'description': _('Select local or network printer'), + 'choices': [('local','Local printer e.g. USB'),('network','Network printer with IP address')], + 'default': 'local', + }, + 'NUMBER': { + 'name': _('A Name'), + 'description': _('Descripe me here'), + 'default': 6, + 'validator': [ + int, + MinValueValidator(2), + MaxValueValidator(25) + ] + }, + 'HIDDEN_SETTING': { + 'name': _('Hidden Setting'), + 'description': _('This setting is hidden from the automatically generated plugin settings page'), + 'hidden': True, + } + } +``` + +!!! info "More Info" + For more information on any of the methods described below, refer to the InvenTree source code. + +!!! tip "Hidden Settings" + Plugin settings can be hidden from the settings page by marking them as 'hidden' + +This mixin defines the helper functions `plugin.get_setting`, `plugin.set_setting` and `plugin.check_settings` to access all plugin specific settings. The `plugin.check_settings` function can be used to check if all settings marked with `'required': True` are defined and not equal to `''`. Note that these methods cannot be used in the `__init__` function of your plugin. + +```python +api_url = self.get_setting('API_URL', cache = False) +self.set_setting('API_URL', 'some value') +is_valid, missing_settings = self.check_settings() +``` +`get_setting` has an additional parameter which lets control if the value is taken directly from the database or from the cache. If it is left away `False` is the default that means the value is taken directly from the database. diff --git a/docs/docs/extend/plugins/tags.md b/docs/docs/extend/plugins/tags.md new file mode 100644 index 000000000000..c7853e0baab5 --- /dev/null +++ b/docs/docs/extend/plugins/tags.md @@ -0,0 +1,61 @@ +--- +title: Item Tags +--- + +## Tags + +Several models in InvenTree can be tagged with arbitrary tags. Tags are useful for grouping items together. This can be used to mark items with a plugin or to group items together for a particular theme. Tags are meant to be used by programs and are not visible to the end user. +Tags are shared between all models that can be tagged. + +The following models can be tagged: +- [Parts](../../part/part.md) and [Supplier Parts](../../order/company.md#supplier-parts)/[Manufacturer Part](../../order/company.md#manufacturer-parts) +- [Stock Items](../../stock/stock.md#stock-item) / [Stock Location](../../stock/stock.md#stock-location) + + +## Accessing Tags + +### Plugin Access + +The `tags` field can be accessed and updated directly from custom plugin code, as follows: + +```python +from part.models import Part + +# Show tags for a particular Part instance +part = Part.objects.get(pk=100) +print(part.tags) + +> {['Tag1', 'Another Tag']} + +# Tags can also be accessed via tags.all() +print(part.tags.all()) + +> {['Tag1', 'Another Tag']} + +# Add tag +part.tags.add('Tag 2') +print(part.tags) + +> {['Tag1', 'Tag 2', 'Another Tag']} + +# Remove tag +part.tags.remove('Tag1') +print(part.tags) + +> {['Tag 2', 'Another Tag']} + +# Filter by tags +Part.objects.filter(tags__name__in=["Tag1", "Tag 2"]).distinct() +``` + +### API Access + +For models which provide tags, access is also provided via the API. The tags are exposed via the detail endpoint for the models starting from version 111. + +Tags can be cached via PATCH or POST requests. The tags are provided as a json formatted list of strings. The tags are note case sensitive and must be unique across the instance - else the existing tag gets assigned. The tags are not sorted and the order is not guaranteed. + +```json +{ + "tags": '["foo", "bar"]' +} +``` diff --git a/docs/docs/extend/plugins/urls.md b/docs/docs/extend/plugins/urls.md new file mode 100644 index 000000000000..4931904d39e0 --- /dev/null +++ b/docs/docs/extend/plugins/urls.md @@ -0,0 +1,121 @@ +--- +title: URLs Mixin +--- + +## UrlsMixin + +Use the class constant `URLS` for a array of URLs that should be added to InvenTrees URL paths or override the `plugin.setup_urls` function. + +The array has to contain valid URL patterns as defined in the [django documentation]({% include "django.html" %}/topics/http/urls/). + +``` python +class MyUrlsPlugin(UrlsMixin, InvenTreePlugin): + + NAME = "UrlsMixin" + + URLS = [ + re_path(r'increase/(?P\d+)/(?P\d+)/', self.view_increase, name='increase-level'), + ] +``` + + +The URLs get exposed under `/plugin/{plugin.slug}/*` and get exposed to the template engine with the prefix `plugin:{plugin.slug}:` (for usage with the [url tag]({% include "django.html" %}/ref/templates/builtins/#url)). + +!!! info "Note" + In this example, when an HTTP request is made to `/plugin/{plugin.slug}/increase/.../...` the function `self.view_increase` is called and returns the view to be displayed (step 4 in the Django documentation) + +### Views +If your plugin will implement and host another webpage, familiarize yourself with Django views. Implementation is exactly the same. +A good place to start is the [django documentation]({% include "django.html" %}/topics/http/views/). Additional InvenTree-specific information is below. + +### Rendering Views +Rendering templated views is also supported. Templated HTML files should be placed inside your plugin folder in a sub folder called `templates`. +Placed here, the template can be called using the file name and the render command. + +Example in context (inside the main plugin python file): +``` py +def view_test(self, request): + return render(request, 'test.html', context) + +def setup_urls(self): + return [ + path('test/', self.view_test, name='test') + ] +``` + +### Implementing the Page Base +Some plugins require a page with a navbar, sidebar, and content similar to other InvenTree pages. +This can be done within a templated HTML file by extending the file "page_base.html". To do this, place the following line at the top of your template file. +``` HTML +{% raw %} +{% extends "page_base.html" %} +{% endraw %} +``` + +Additionally, add the following imports after the extended line. +``` HTML +{% raw %} +{% load static %} +{% load inventree_extras %} +{% load plugin_extras %} +{% load i18n %} +{% endraw %} +``` + +#### Blocks +The page_base file is split into multiple sections called blocks. This allows you to implement sections of the webpage while getting many items like navbars, sidebars, and general layout provided for you. + +The current default page base can be found [here](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/templates/page_base.html). Look through this file to determine overridable blocks. The [stock app](https://github.com/inventree/InvenTree/tree/master/src/backend/InvenTree/stock) offers a great example of implementing these blocks. + +!!! warning "Sidebar Block" + You may notice that implementing the `sidebar` block doesn't initially work. Be sure to enable the sidebar using JavaScript. This can be achieved by appending the following code, replacing `label` with a label of your choosing, to the end of your template file. + ``` HTML + {% raw %} + {% block js_ready %} + {{ block.super }} + enableSidebar('label'); + {% endblock js_ready %} + {% endraw %} + ``` + +#### Panels +InvenTree uses bootstrap panels to display the page's content. These panels are locate inside the block `page_content`. + +Example: +```html +{% raw %} +
    +
    +
    +

    {% trans "Loaning Information" %}

    +
    +
    +
    + ... +
    +
    +{% endraw %} +``` +Notice that this example has the panel initially hidden. +This is where the `enableSidebar('...');'` function comes back into play. Panels are enabled according to the labels of items in the sidebar. Each sidebar item must declare a label corresponding to a panel. An example of a sidebar item within with the label `loans` is below. + +```html +{% raw %} +{% trans "Loaning" as text %} +{% include "sidebar_item.html" with label='loans' text=text icon="fa-sitemap" %} +{% endraw %} +``` +Note: This code is assumed to be placed within the `sidebar` block. + +The `enableSidebar('...');'` function will un-hide the panel with the label `panel-...` (for this example, `panel-loans`) and hide all other panels. This allows you to have multiple panels on a page, but only show the panel corresponding to the current selected sidebar item. +Whenever you click a sidebar item, it will automatically enable the panel with the corresponding label and hide all other panels. + +Additionally, when a panel is loaded, the function `onPanelLoad(...)` will be called for the associated panel. +If you would like to add javascript functionality to a panel after it loads, add the function within the `{% raw %}{% block js_ready %}{% endraw %}` block of your template file. + +Example: +```js +onPanelLoad('loans', function() { + ... +});; +``` diff --git a/docs/docs/extend/plugins/validation.md b/docs/docs/extend/plugins/validation.md new file mode 100644 index 000000000000..a200ab2416e1 --- /dev/null +++ b/docs/docs/extend/plugins/validation.md @@ -0,0 +1,184 @@ +--- +title: Validation Mixin +--- + +## ValidationMixin + +The `ValidationMixin` class enables plugins to perform custom validation of objects within the database. + +Any of the methods described below can be implemented in a custom plugin to provide functionality as required. + +!!! info "More Info" + For more information on any of the methods described below, refer to the InvenTree source code. [A working example is available as a starting point](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/validation_sample.py). + +!!! info "Multi Plugin Support" + It is possible to have multiple plugins loaded simultaneously which support validation methods. For example when validating a field, if one plugin returns a null value (`None`) then the *next* plugin (if available) will be queried. + +## Model Validation + +Any model which inherits the `PluginValidationMixin` mixin class is exposed to the plugin system for custom validation. Before the model is saved to the database (either when created, or updated), it is first passed to the plugin ecosystem for validation. + +Any plugin which inherits the `ValidationMixin` can implement the `validate_model_instance` method, and run a custom validation routine. + +The `validate_model_instance` method is passed the following arguments: + +| Argument | Description | +| --- | --- | +| `instance` | The model instance to be validated | +| `deltas` | A dict of field deltas (if the instance is being updated) | + +```python +def validate_model_instance(self, instance, deltas=None): + """Validate the supplied model instance. + + Arguments: + instance: The model instance to be validated + deltas: A dict of field deltas (if the instance is being updated) + """ + ... +``` + +### Error Messages + +Any error messages must be raised as a `ValidationError`. The `ValidationMixin` class provides the `raise_error` method, which is a simple wrapper method which raises a `ValidationError` + +#### Instance Errors + +To indicate an *instance* validation error (i.e. the validation error applies to the entire model instance), the body of the error should be either a string, or a list of strings. + +#### Field Errors + +To indicate a *field* validation error (i.e. the validation error applies only to a single field on the model instance), the body of the error should be a dict, where the key(s) of the dict correspond to the model fields. + +Note that an error can be which corresponds to multiple model instance fields. + +### Example + +Presented below is a simple working example for a plugin which implements the `validate_model_instance` method: + +```python +from plugin import InvenTreePlugin +from plugin.mixins import ValidationMixin + +import part.models + + +class MyValidationMixin(Validationixin, InvenTreePlugin): + """Custom validation plugin.""" + + def validate_model_instance(self, instance, deltas=None): + """Custom model validation example. + + - A part name and category name must have the same starting letter + - A PartCategory description field cannot be shortened after it has been created + """ + + if isinstance(instance, part.models.Part): + if category := instance.category: + if category.name[0] != part.name[0]: + self.raise_error({ + "name": "Part name and category name must start with the same letter" + }) + + if isinstance(instance, part.models.PartCategory): + if deltas and 'description' in deltas: + d_new = deltas['description']['new'] + d_old = deltas['description']['old'] + + if len(d_new) < len(d_old): + self.raise_error({ + "description": "Description cannot be shortened" + }) + +``` + +## Field Validation + +In addition to the general purpose model instance validation routine provided above, the following fields support custom validation routines: + +### Part Name + +By default, part names are not subject to any particular naming conventions or requirements. However if custom validation is required, the `validate_part_name` method can be implemented to ensure that a part name conforms to a required convention. + +If the custom method determines that the part name is *objectionable*, it should throw a `ValidationError` which will be handled upstream by parent calling methods. + +### Part IPN + +Validation of the Part IPN (Internal Part Number) field is exposed to custom plugins via the `validate_part_IPN` method. Any plugins which extend the `ValidationMixin` class can implement this method, and raise a `ValidationError` if the IPN value does not match a required convention. + +### Part Parameter Values + +[Part parameters](../../part/parameter.md) can also have custom validation rules applied, by implementing the `validate_part_parameter` method. A plugin which implements this method should raise a `ValidationError` with an appropriate message if the part parameter value does not match a required convention. + +### Batch Codes + +[Batch codes](../../stock/tracking.md#batch-codes) can be generated and/or validated by custom plugins. + +The `validate_batch_code` method allows plugins to raise an error if a batch code input by the user does not meet a particular pattern. + +The `generate_batch_code` method can be implemented to generate a new batch code. + +### Serial Numbers + +Requirements for serial numbers can vary greatly depending on the application. Rather than attempting to provide a "one size fits all" serial number implementation, InvenTree allows custom serial number schemes to be implemented via plugins. + +The default InvenTree [serial numbering system](../../stock/tracking.md#serial-numbers) uses a simple algorithm to validate and increment serial numbers. More complex behaviors can be implemented using the `ValidationMixin` plugin class and the following custom methods: + +#### Serial Number Validation + +Custom serial number validation can be implemented using the `validate_serial_number` method. A *proposed* serial number is passed to this method, which then has the opportunity to raise a `ValidationError` to indicate that the serial number is not valid. + +##### Example + +A plugin which requires all serial numbers to be valid hexadecimal values may implement this method as follows: + +```python +def validate_serial_number(self, serial: str, part: Part): + """Validate the supplied serial number + + Arguments: + serial: The proposed serial number (string) + part: The Part instance for which this serial number is being validated + """ + + try: + # Attempt integer conversion + int(serial, 16) + except ValueError: + raise ValidationError("Serial number must be a valid hex value") +``` + +#### Serial Number Sorting + +While InvenTree supports arbitrary text values in the serial number fields, behind the scenes it attempts to "coerce" these values into an integer representation for more efficient sorting. + +A custom plugin can implement the `convert_serial_to_int` method to determine how a particular serial number is converted to an integer representation. + +!!! info "Not Required" + If this method is not implemented, or the serial number cannot be converted to an integer, then the sorting algorithm falls back to the text (string) value + +#### Serial Number Incrementing + +A core component of the InvenTree serial number system is the ability to *increment* serial numbers - to determine the *next* serial number value in a sequence. + +For custom serial number schemes, it is important to provide a method to generate the *next* serial number given a current value. The `increment_serial_number` method can be implemented by a plugin to achieve this. + +!!! info "Invalid Increment" + If the provided number cannot be incremented (or an error occurs) the method should return `None` + +##### Example + +Continuing with the hexadecimal example as above, the method may be implemented as follows: + +```python +def increment_serial_number(self, serial: str): + """Provide the next hexadecimal number in sequence""" + + try: + val = int(serial, 16) + 1 + val = hex(val).upper()[2:] + except ValueError: + val = None + + return val +``` diff --git a/docs/docs/extend/themes.md b/docs/docs/extend/themes.md new file mode 100644 index 000000000000..5f89252eb1b3 --- /dev/null +++ b/docs/docs/extend/themes.md @@ -0,0 +1,37 @@ +--- +title: Changing color theme +--- + +## Color Themes + +You can customize the look of InvenTree via the color themes feature. + +### Select Color Theme + +Navigate to the "Settings" page and click on the "Display" tab, you should see the following: + +{% with id="theme_default", url="settings/theme_default.png", description="Default InvenTree color theme" %} +{% include 'img.html' %} +{% endwith %} + +The drop-down list let's you select any other color theme found in your static folder (see next section to find out how to [add color themes](#add-color-themes)). Once selected, click on the "Apply Theme" button for the new color theme to be activated. + +!!! info "Per-user Setting" + Color themes are "user specific" which means that changing the color theme in your own settings won't affect other users. + +Here is an example what the "Dark Reader" theme looks like: + +{% with id="theme_dark", url="settings/theme_dark.png", description="Dark Reader InvenTree color theme" %} +{% include 'img.html' %} +{% endwith %} + +### Add Color Theme + +#### Local Installation +To add a color theme, you'll need to add a new CSS sheet in your static folder (the default folder is located at `{{ static_folder_local_default }}css/color-themes/`). + +InvenTree automatically lists all CSS sheets found in the `{{ static_folder_local_default }}css/color-themes/` folder and present them inside the dropdown list on the "Settings > Theme" page. + +#### InvenTree Source Code + +If you would like a CSS sheet to be permanently added to InvenTree's source code so that other users can benefit too, add it to the `{{ static_folder_source }}css/color-themes/` folder then submit a pull request. diff --git a/docs/docs/faq.md b/docs/docs/faq.md new file mode 100644 index 000000000000..d8b51ecac651 --- /dev/null +++ b/docs/docs/faq.md @@ -0,0 +1,149 @@ +--- +title: FAQ +--- + +## Frequently Asked Questions + +Below is a list of frequently asked questions. If you are having issues with InvenTree please consult this list first! + +## Installation Issues + +### Installing on Windows + +InvenTree installation is not officially supported natively on Windows. However you can run on a Windows platform using [docker](./start/docker.md). + +### Command 'invoke' not found + +If the `invoke` command does not work, it means that the [invoke](https://pypi.org/project/invoke/) python library has not been correctly installed. + +Update the installed python packages with PIP: + +``` +pip3 install -U --require-hashes -r requirements.txt +``` + +### Invoke Version + +If the installed version of invoke is too old, users may see error messages during the installation procedure, such as: + +- *'update' did not receive all required positional arguments!* +- *Function has keyword-only arguments or annotations* + +As per the [invoke guide](./start/intro.md#invoke), the minimum required version of Invoke is `{{ config.extra.min_invoke_version }}`. + +To determine the version of invoke you have installed, run either: + +``` +invoke --version +``` +``` +python -m invoke --version +``` + +If you are running an older version of invoke, ensure it is updated to the latest version: + +``` +pip install -U invoke +``` + +### No module named 'django' + +During the install or update process, you may be presented with an error like: + +``` +ModuleNotFoundError: No module named 'django' +``` + +Most likely you are trying to run the InvenTree server from outside the context of the virtual environment where the required python libraries are installed. + +Always activate the virtual environment before running server commands! + +### 'str' object has no attribute 'removeSuffix' + +This error occurs because your installed python version is not up to date. We [require Python {{ config.extra.min_python_version }} or newer](./start/intro.md#python-requirements) + +You (or your system administrator) needs to update python to meet the minimum requirements for InvenTree. + +## Update Issues + +Sometimes, users may encounter unexpected error messages when updating their InvenTree installation to a newer version. + +The most common problem here is that the correct sequenct of steps has not been followed: + +1. Ensure that the InvenTree web server and background worker processes are *halted* +1. Update the InvenTree software (e.g. using git or docker, depending on installation method) +1. Run the `invoke update` command +1. Restart the web server and background worker processes + +For more information, refer to the installation guides: + +- [Docker Installation](./start/docker_install.md#updating-inventree) +- [Bare Metal Installation](./start/install.md#updating-inventree) + +!!! warning "Invoke Update" + You must ensure that the `invoke update` command is performed *every time* you update InvenTree + +### Feature *x* does not work after update + +If a particular menu / item is not visible after updating InvenTree, or a certain function no longer seems to work, it may be due to your internet browser caching old versions of CSS and JavaScript files. + +Before [raising an issue](https://github.com/inventree/inventree/issues), try hard-refreshing the browser cache: + +Ctrl + Shift + R + +or + +Ctrl + F5 + +!!! tip "A Refreshing Solution" + Performing a hard page refresh will remove old javascript files from your browser's cache + +## Background Worker Issues + +### Background Worker "Not Running" + +The background worker process must be started separately to the web-server application. + +From the top-level source directory, run the following command from a separate terminal, while the server is already running: + +``` +invoke worker +``` + +!!! info "Supervisor" + A better option is to manage the background worker process using a process manager such as supervisor. Refer to the [production server guide](./start/bare_prod.md). + +## Docker Issues + +### File Sync Issues - Docker + +When installing under [Docker](./start/docker.md), sometimes issues may arise keeping [persistent data](./start/docker.md#persistent-data) in sync. Refer to the [common issues](./start/docker.md#common-issues) section in the docker setup guide for further details. + +### Permission denied for mkdir: /home/inventree + +If you see an error message like this: + +``` +Permission denied for mkdir: /home/inventree/data/static +``` + +It means that the user running the InvenTree server does not have permission to create the required directories. + +Ensure that the user running the InvenTree server has permission to create the required directories. For example, if running the server as the `inventree` user, ensure that the `inventree` user has permission to create the required directories. + +If you are using Docker to run the InvenTree server, ensure that the user that runs the docker daemon has permission to create the required directories in the volume. + +### Failed to mount local volume + +If, when running InvenTree setup using docker, you see an error message like this: + +``` +Error response from daemon: failed to mount local volume: +``` + +This means that either: + +- The specified directory does not exist on your local machine +- The docker user does not have write permission to the specified directory + +In either case, ensure that the directory is available *on your local machine* and the user account has the required permissions. diff --git a/docs/docs/features.md b/docs/docs/features.md new file mode 100644 index 000000000000..4b5f99be0ffe --- /dev/null +++ b/docs/docs/features.md @@ -0,0 +1,61 @@ +--- +title: Features +--- + +## InvenTree + +InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. + + +It is designed to be lightweight and easy to use for SME or hobbyist applications, where many existing stock management solutions are bloated and cumbersome to use. However, powerful business logic works in the background to ensure that stock tracking history is maintained, and users have ready access to stock level information. InvenTree is designed to allow for a flexible installation. + +InvenTree is a [Python](https://www.python.org/) and [Django](https://www.djangoproject.com/) application which stores data in a relational database, and serves this data to the user(s) via a web browser, and (optionally) can be integrated into custom applications via an API. + + +## Organize Parts + +Parts are the fundamental element of any inventory. InvenTree groups parts into structured categories which allow you to arrange parts to meet your particular needs. + +[Read more...](./part/part.md) + +## Manage Suppliers + +InvenTree allows you to easily create, modify or delete suppliers and supplier items linked to any part in your inventory. + +[Read more...](./order/company.md#suppliers) + +## Instant Stock Knowledge + +Instantly view current stock for a certain part, in a particular location, or required for an individual build. Stock items are organized in cascading locations and sub-locations, allowing flexible inspection of stock under any location. Stock items can be serialized for tracking of individual items, and test results can be stored against a serialized stock item for the purpose of acceptance testing and commissioning. + +[Read more...](./stock/stock.md) + +## BOM Management + +Intelligent BOM (Bill of Material) management provides a clear understanding of the sub-parts required to make a new part. +InvenTree allows you to upload simple BOM files in multiple formats, and download a detailed BOM with all the information stored in its database. + +[Read more...](./build/bom.md) + +## Build Parts + +Inventree features a build management system to help you track the progress of your builds. +Builds consume stock items to make new parts, you can decide to automatically or manually allocate parts from your current inventory. + +[Read more...](./build/build.md) + +## Report + +Generate a wide range of reports using custom templates. [Read more...](./report/report.md) + +## API + +The core InvenTree software is implemented on top of a RESTful API, which can be used by external applications. Additionally, a native Python binding library is provided, for rapid development of programs to integrate with InvenTree. + +[Read more...](./api/api.md) + +## Extend and Customize + +InvenTree is designed to be highly extensible. If the core InvenTree functionality does not meet your particular need, InvenTree provides a powerful plugin system which can be used to extend on base functions as required. + +[Read more...](./extend/plugins.md) diff --git a/docs/docs/hooks.py b/docs/docs/hooks.py new file mode 100644 index 000000000000..bef816cabc02 --- /dev/null +++ b/docs/docs/hooks.py @@ -0,0 +1,246 @@ +"""Custom mkdocs hooks, using the mkdocs-simple-hooks plugin.""" + +import json +import os +import re +from datetime import datetime +from distutils.version import StrictVersion + +import requests + + +def fetch_rtd_versions(): + """Get a list of RTD docs versions to build the version selector.""" + print('Fetching documentation versions from ReadTheDocs') + + versions = [] + + def make_request(url, headers): + """Make a single request to the RTD API.""" + response = requests.get(url, headers=headers) + + if response.status_code != 200: + print(f'Error fetching RTD versions: {response.status_code}') + return + + data = json.loads(response.text) + + for entry in data['results']: + slug = entry['slug'] + ref = entry['ref'] + url = entry['urls']['documentation'] + aliases = [] + + if ref is not None: + aliases.append(slug) + + version = ref or slug + + if version == 'latest': + continue + + versions.append({'version': version, 'title': version, 'aliases': aliases}) + + if data['next']: + make_request(data['next'], headers) + + # Fetch the list of versions from the RTD API + token = os.environ.get('RTD_TOKEN', None) + if token: + headers = {'Authorization': f'Token {token}'} + url = 'https://readthedocs.org/api/v3/projects/inventree/versions/?active=true&limit=50' + make_request(url, headers) + else: + print('No RTD token found - skipping RTD version fetch') + + # Sort versions by version number + versions = sorted(versions, key=lambda x: StrictVersion(x['version']), reverse=True) + + # Add "latest" version first + if not any((x['title'] == 'latest' for x in versions)): + versions.insert( + 0, + { + 'title': 'Development', + 'version': 'latest', + 'aliases': ['main', 'latest', 'development'], + }, + ) + + # Ensure we have the 'latest' version + current_version = os.environ.get('READTHEDOCS_VERSION', None) + + if current_version and not any((x['title'] == current_version for x in versions)): + versions.append({ + 'version': current_version, + 'title': current_version, + 'aliases': [], + }) + + output_filename = os.path.join(os.path.dirname(__file__), 'versions.json') + + print('Discovered the following versions:') + print(versions) + + with open(output_filename, 'w') as file: + json.dump(versions, file, indent=2) + + +def get_release_data(): + """Return InvenTree release information. + + - First look to see if 'releases.json' file exists + - If data does not exist in this file, request via the github API + """ + json_file = os.path.join(os.path.dirname(__file__), 'releases.json') + + releases = [] + + if os.path.exists(json_file): + # Release information has been cached to file + + print("Loading release information from 'releases.json'") + with open(json_file) as f: + return json.loads(f.read()) + + # Download release information via the GitHub API + print('Fetching InvenTree release information from api.github.com:') + releases = [] + + # Keep making API requests until we run out of results + page = 1 + + while 1: + url = f'https://api.github.com/repos/inventree/inventree/releases?page={page}&per_page=150' + + response = requests.get(url, timeout=30) + assert response.status_code == 200 + + data = json.loads(response.text) + + if len(data) == 0: + break + + for item in data: + releases.append(item) + + page += 1 + + # Cache these results to file + with open(json_file, 'w') as f: + print("Saving release information to 'releases.json'") + f.write(json.dumps(releases)) + + return releases + + +def on_config(config, *args, **kwargs): + """Run when the mkdocs config is loaded. + + We want to be able to provide a *dynamic* config.site_url parameter to mkdocs, + which tells it the base url, e.g. + + - https://readthedocs.io/en/latest + - https://readthedocs.io/de/0.5.1 + + Further, we need to know if we are building on readthedocs at all! + + readthedocs provides some environment variables: + - https://docs.readthedocs.io/en/stable/builds.html#build-environment + + We can use these to determine (at run time) where we are hosting + """ + rtd = os.environ.get('READTHEDOCS', False) + + # Check for 'versions.json' file + # If it does not exist, we need to fetch it from the RTD API + if os.path.exists(os.path.join(os.path.dirname(__file__), 'versions.json')): + print("Found 'versions.json' file") + else: + fetch_rtd_versions() + + if rtd: + rtd_version = os.environ['READTHEDOCS_VERSION'] + rtd_language = os.environ['READTHEDOCS_LANGUAGE'] + + site_url = f'https://docs.inventree.org/{rtd_language}/{rtd_version}' + assets_dir = f'/{rtd_language}/{rtd_version}/assets' + + print('Building within READTHEDOCS environment!') + print(f' - Version: {rtd_version}') + print(f' - Language: {rtd_language}') + + # Add *all* readthedocs related keys + readthedocs = {} + + for key in os.environ.keys(): + if key.startswith('READTHEDOCS_'): + k = key.replace('READTHEDOCS_', '').lower() + readthedocs[k] = os.environ[key] + + # Supply this to the context + config['readthedocs'] = readthedocs + + # Determine if we want to display a 'version' banner + # Basically we do, *unless* we are displaying the "stable" version + config['version_banner'] = rtd_version != 'stable' + + else: + print("'READTHEDOCS' environment variable not found") + print('Building for localhost configuration!') + + assets_dir = '/assets' + site_url = config['site_url'] + + config['readthedocs'] = False + + config['assets_dir'] = assets_dir + config['site_url'] = site_url + + print(f"config.site_url = '{site_url}'") + print(f"config.assets_dir = '{assets_dir}'") + + release_data = get_release_data() + + releases = [] + + for item in release_data: + # Ignore draft releases + if item['draft']: + continue + + tag = item['tag_name'] + + # Check that the tag is formatted correctly + re.match(r'^\d+\.\d+\.\d+$', tag) + + if not re.match: + print(f'Found badly formatted release: {tag}') + continue + + # Check if there is a local file with release information + local_path = os.path.join(os.path.dirname(__file__), 'releases', f'{tag}.md') + + if os.path.exists(local_path): + item['local_path'] = local_path + + # Extract the date + item['date'] = item['published_at'].split('T')[0] + + date = datetime.fromisoformat(item['date']) + + # First tagged docker release was 2021-04-18 + if date > datetime(year=2021, month=4, day=17): + item['docker'] = True + + # Add a "prefix" so we can split by sub version + item['prefix'] = '.'.join(tag.split('.')[:-1]) + + releases.append(item) + + print(f'- found {len(releases)} releases.') + + # Sort releases by descending date + config['releases'] = sorted(releases, key=lambda it: it['date'], reverse=True) + + return config diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 000000000000..49e4416b1352 --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,18 @@ +--- +title: InvenTree +template: home.html +hide: + - toc +--- + +## Intuitive Inventory Management + + +InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. + + +It is designed to be lightweight and easy to use for SME or hobbyist applications. Powerful business logic works in the background to ensure that stock tracking history is maintained, and users have ready access to stock level information. InvenTree is designed to allow for a flexible installation. + +InvenTree is a [Python](https://www.python.org/) and [Django](https://www.djangoproject.com/) application which stores data in a relational database, and serves this data to the user(s) via a web browser, and (optionally) can be integrated into custom applications via an API. + +---------------------- diff --git a/docs/docs/javascripts/brands.js b/docs/docs/javascripts/brands.js new file mode 100644 index 000000000000..1a564b7a58f3 --- /dev/null +++ b/docs/docs/javascripts/brands.js @@ -0,0 +1,571 @@ +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +(function () { + 'use strict'; + + var _WINDOW = {}; + var _DOCUMENT = {}; + + try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + } catch (e) {} + + var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + + var WINDOW = _WINDOW; + var DOCUMENT = _DOCUMENT; + var IS_BROWSER = !!WINDOW.document; + var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; + var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + + var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; + var PRODUCTION = function () { + try { + return "production" === 'production'; + } catch (e) { + return false; + } + }(); + + function bunker(fn) { + try { + fn(); + } catch (e) { + if (!PRODUCTION) { + throw e; + } + } + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + var w = WINDOW || {}; + if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; + if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; + if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; + if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; + var namespace = w[NAMESPACE_IDENTIFIER]; + + function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } + } + + var icons = { + "500px": [448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"], + "accessible-icon": [448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"], + "accusoft": [640, 512, [], "f369", "M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z"], + "acquisitions-incorporated": [384, 512, [], "f6af", "M357.45 468.2c-1.2-7.7-1.3-7.6-9.6-7.6-99.8.2-111.8-2.4-112.7-2.6-12.3-1.7-20.6-10.5-21-23.1-.1-1.6-.2-71.6-1-129.1-.1-4.7 1.6-6.4 5.9-7.5 12.5-3 24.9-6.1 37.3-9.7 4.3-1.3 6.8-.2 8.4 3.5 4.5 10.3 8.8 20.6 13.2 30.9 1.6 3.7.1 4.4-3.4 4.4-10-.2-20-.1-30.4-.1v27h116c-1.4-9.5-2.7-18.1-4-27.5-7 0-13.8.4-20.4-.1-22.6-1.6-18.3-4.4-84-158.6-8.8-20.1-27.9-62.1-36.5-89.2-4.4-14 5.5-25.4 18.9-26.6 18.6-1.7 37.5-1.6 56.2-2 20.6-.4 41.2-.4 61.8-.5 3.1 0 4-1.4 4.3-4.3 1.2-9.8 2.7-19.5 4-29.2.8-5.3 1.6-10.7 2.4-16.1L23.75 0c-3.6 0-5.3 1.1-4.6 5.3 2.2 13.2-.8.8 6.4 45.3 63.4 0 71.8.9 101.8.5 12.3-.2 37 3.5 37.7 22.1.4 11.4-1.1 11.3-32.6 87.4-53.8 129.8-50.7 120.3-67.3 161-1.7 4.1-3.6 5.2-7.6 5.2-8.5-.2-17-.3-25.4.1-1.9.1-5.2 1.8-5.5 3.2-1.5 8.1-2.2 16.3-3.2 24.9h114.3v-27.6c-6.9 0-33.5.4-35.3-2.9 5.3-12.3 10.4-24.4 15.7-36.7 16.3 4 31.9 7.8 47.6 11.7 3.4.9 4.6 3 4.6 6.8-.1 42.9.1 85.9.2 128.8 0 10.2-5.5 19.1-14.9 23.1-6.5 2.7-3.3 3.4-121.4 2.4-5.3 0-7.1 2-7.6 6.8-1.5 12.9-2.9 25.9-5 38.8-.8 5 1.3 5.7 5.3 5.7 183.2.6-30.7 0 337.1 0-2.5-15-4.4-29.4-6.6-43.7zm-174.9-205.7c-13.3-4.2-26.6-8.2-39.9-12.5a44.53 44.53 0 0 1-5.8-2.9c17.2-44.3 34.2-88.1 51.3-132.1 7.5 2.4 7.9-.8 9.4 0 9.3 22.5 18.1 60.1 27 82.8 6.6 16.7 13 33.5 19.7 50.9a35.78 35.78 0 0 1-3.9 2.1c-13.1 3.9-26.4 7.5-39.4 11.7a27.66 27.66 0 0 1-18.4 0z"], + "adn": [496, 512, [], "f170", "M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"], + "adobe": [512, 512, [], "f778", "M315.5 64h170.9v384L315.5 64zm-119 0H25.6v384L196.5 64zM256 206.1L363.5 448h-73l-30.7-76.8h-78.7L256 206.1z"], + "adversal": [512, 512, [], "f36a", "M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z"], + "affiliatetheme": [512, 512, [], "f36b", "M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z"], + "airbnb": [448, 512, [], "f834", "M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z"], + "algolia": [448, 512, [], "f36c", "M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z"], + "alipay": [448, 512, [], "f642", "M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z"], + "amazon": [448, 512, [], "f270", "M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"], + "amazon-pay": [640, 512, [], "f42c", "M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z"], + "amilia": [448, 512, [], "f36d", "M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z"], + "android": [576, 512, [], "f17b", "M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55"], + "angellist": [448, 512, [], "f209", "M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z"], + "angrycreative": [640, 512, [], "f36e", "M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z"], + "angular": [448, 512, [], "f420", "M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z"], + "app-store": [512, 512, [], "f36f", "M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z"], + "app-store-ios": [448, 512, [], "f370", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z"], + "apper": [640, 512, [], "f371", "M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z"], + "apple": [384, 512, [], "f179", "M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"], + "apple-pay": [640, 512, [], "f415", "M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z"], + "artstation": [512, 512, [], "f77a", "M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z"], + "asymmetrik": [576, 512, [], "f372", "M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z"], + "atlassian": [512, 512, [], "f77b", "M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z"], + "audible": [640, 512, [], "f373", "M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z"], + "autoprefixer": [640, 512, [], "f41c", "M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z"], + "avianex": [512, 512, [], "f374", "M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z"], + "aviato": [640, 512, [], "f421", "M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z"], + "aws": [640, 512, [], "f375", "M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z"], + "bandcamp": [496, 512, [], "f2d5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z"], + "battle-net": [512, 512, [], "f835", "M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8"], + "behance": [576, 512, [], "f1b4", "M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z"], + "behance-square": [448, 512, [], "f1b5", "M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z"], + "bimobject": [448, 512, [], "f378", "M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z"], + "bitbucket": [512, 512, [], "f171", "M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z"], + "bitcoin": [512, 512, [], "f379", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"], + "bity": [496, 512, [], "f37a", "M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z"], + "black-tie": [448, 512, [], "f27e", "M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z"], + "blackberry": [512, 512, [], "f37b", "M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z"], + "blogger": [448, 512, [], "f37c", "M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z"], + "blogger-b": [448, 512, [], "f37d", "M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"], + "bluetooth": [448, 512, [], "f293", "M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z"], + "bluetooth-b": [320, 512, [], "f294", "M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z"], + "bootstrap": [448, 512, [], "f836", "M292.3 311.93c0 42.41-39.72 41.43-43.92 41.43h-80.89v-81.69h80.89c42.56 0 43.92 31.9 43.92 40.26zm-50.15-73.13c.67 0 38.44 1 38.44-36.31 0-15.52-3.51-35.87-38.44-35.87h-74.66v72.18h74.66zM448 106.67v298.66A74.89 74.89 0 0 1 373.33 480H74.67A74.89 74.89 0 0 1 0 405.33V106.67A74.89 74.89 0 0 1 74.67 32h298.66A74.89 74.89 0 0 1 448 106.67zM338.05 317.86c0-21.57-6.65-58.29-49.05-67.35v-.73c22.91-9.78 37.34-28.25 37.34-55.64 0-7 2-64.78-77.6-64.78h-127v261.33c128.23 0 139.87 1.68 163.6-5.71 14.21-4.42 52.71-17.98 52.71-67.12z"], + "btc": [384, 512, [], "f15a", "M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"], + "buffer": [448, 512, [], "f837", "M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z"], + "buromobelexperte": [448, 512, [], "f37f", "M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z"], + "buy-n-large": [576, 512, [], "f8a6", "M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z"], + "buysellads": [448, 512, [], "f20d", "M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z"], + "canadian-maple-leaf": [512, 512, [], "f785", "M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z"], + "cc-amazon-pay": [576, 512, [], "f42d", "M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z"], + "cc-amex": [576, 512, [], "f1f3", "M325.1 167.8c0-16.4-14.1-18.4-27.4-18.4l-39.1-.3v69.3H275v-25.1h18c18.4 0 14.5 10.3 14.8 25.1h16.6v-13.5c0-9.2-1.5-15.1-11-18.4 7.4-3 11.8-10.7 11.7-18.7zm-29.4 11.3H275v-15.3h21c5.1 0 10.7 1 10.7 7.4 0 6.6-5.3 7.9-11 7.9zM279 268.6h-52.7l-21 22.8-20.5-22.8h-66.5l-.1 69.3h65.4l21.3-23 20.4 23h32.2l.1-23.3c18.9 0 49.3 4.6 49.3-23.3 0-17.3-12.3-22.7-27.9-22.7zm-103.8 54.7h-40.6v-13.8h36.3v-14.1h-36.3v-12.5h41.7l17.9 20.2zm65.8 8.2l-25.3-28.1L241 276zm37.8-31h-21.2v-17.6h21.5c5.6 0 10.2 2.3 10.2 8.4 0 6.4-4.6 9.2-10.5 9.2zm-31.6-136.7v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5zM576 255.4h-.2zm-194.6 31.9c0-16.4-14.1-18.7-27.1-18.7h-39.4l-.1 69.3h16.6l.1-25.3h17.6c11 0 14.8 2 14.8 13.8l-.1 11.5h16.6l.1-13.8c0-8.9-1.8-15.1-11-18.4 7.7-3.1 11.8-10.8 11.9-18.4zm-29.2 11.2h-20.7v-15.6h21c5.1 0 10.7 1 10.7 7.4 0 6.9-5.4 8.2-11 8.2zm-172.8-80v-69.3h-27.6l-19.7 47-21.7-47H83.3v65.7l-28.1-65.7H30.7L1 218.5h17.9l6.4-15.3h34.5l6.4 15.3H100v-54.2l24 54.2h14.6l24-54.2v54.2zM31.2 188.8l11.2-27.6 11.5 27.6zm477.4 158.9v-4.5c-10.8 5.6-3.9 4.5-156.7 4.5 0-25.2.1-23.9 0-25.2-1.7-.1-3.2-.1-9.4-.1 0 17.9-.1 6.8-.1 25.3h-39.6c0-12.1.1-15.3.1-29.2-10 6-22.8 6.4-34.3 6.2 0 14.7-.1 8.3-.1 23h-48.9c-5.1-5.7-2.7-3.1-15.4-17.4-3.2 3.5-12.8 13.9-16.1 17.4h-82v-92.3h83.1c5 5.6 2.8 3.1 15.5 17.2 3.2-3.5 12.2-13.4 15.7-17.2h58c9.8 0 18 1.9 24.3 5.6v-5.6c54.3 0 64.3-1.4 75.7 5.1v-5.1h78.2v5.2c11.4-6.9 19.6-5.2 64.9-5.2v5c10.3-5.9 16.6-5.2 54.3-5V80c0-26.5-21.5-48-48-48h-480c-26.5 0-48 21.5-48 48v109.8c9.4-21.9 19.7-46 23.1-53.9h39.7c4.3 10.1 1.6 3.7 9 21.1v-21.1h46c2.9 6.2 11.1 24 13.9 30 5.8-13.6 10.1-23.9 12.6-30h103c0-.1 11.5 0 11.6 0 43.7.2 53.6-.8 64.4 5.3v-5.3H363v9.3c7.6-6.1 17.9-9.3 30.7-9.3h27.6c0 .5 1.9.3 2.3.3H456c4.2 9.8 2.6 6 8.8 20.6v-20.6h43.3c4.9 8-1-1.8 11.2 18.4v-18.4h39.9v92h-41.6c-5.4-9-1.4-2.2-13.2-21.9v21.9h-52.8c-6.4-14.8-.1-.3-6.6-15.3h-19c-4.2 10-2.2 5.2-6.4 15.3h-26.8c-12.3 0-22.3-3-29.7-8.9v8.9h-66.5c-.3-13.9-.1-24.8-.1-24.8-1.8-.3-3.4-.2-9.8-.2v25.1H151.2v-11.4c-2.5 5.6-2.7 5.9-5.1 11.4h-29.5c-4-8.9-2.9-6.4-5.1-11.4v11.4H58.6c-4.2-10.1-2.2-5.3-6.4-15.3H33c-4.2 10-2.2 5.2-6.4 15.3H0V432c0 26.5 21.5 48 48 48h480.1c26.5 0 48-21.5 48-48v-90.4c-12.7 8.3-32.7 6.1-67.5 6.1zm36.3-64.5H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-57 39.8h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-42.2-40.1v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5zm-56.3-108.1c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm20.4-10.5h-.1zm-16.2-15.2c-23.5 0-34 12-34 35.3 0 22.2 10.2 34 33 34h19.2l6.4-15.3h34.3l6.6 15.3h33.7v-51.9l31.2 51.9h23.6v-69h-16.9v48.1l-29.1-48.1h-25.3v65.4l-27.9-65.4h-24.8l-23.5 54.5h-7.4c-13.3 0-16.1-8.1-16.1-19.9 0-23.8 15.7-20 33.1-19.7v-15.2zm42.1 12.1l11.2 27.6h-22.8zm-101.1-12v69.3h16.9v-69.3z"], + "cc-apple-pay": [576, 512, [], "f416", "M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z"], + "cc-diners-club": [576, 512, [], "f24c", "M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z"], + "cc-discover": [576, 512, [], "f1f2", "M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z"], + "cc-jcb": [576, 512, [], "f24b", "M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z"], + "cc-mastercard": [576, 512, [], "f1f1", "M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z"], + "cc-paypal": [576, 512, [], "f1f4", "M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z"], + "cc-stripe": [576, 512, [], "f1f5", "M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z"], + "cc-visa": [576, 512, [], "f1f0", "M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z"], + "centercode": [512, 512, [], "f380", "M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z"], + "centos": [448, 512, [], "f789", "M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z"], + "chrome": [496, 512, [], "f268", "M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z"], + "chromecast": [512, 512, [], "f838", "M447.83 64H64a42.72 42.72 0 0 0-42.72 42.72v63.92H64v-63.92h383.83v298.56H298.64V448H448a42.72 42.72 0 0 0 42.72-42.72V106.72A42.72 42.72 0 0 0 448 64zM21.28 383.58v63.92h63.91a63.91 63.91 0 0 0-63.91-63.92zm0-85.28V341a106.63 106.63 0 0 1 106.64 106.66v.34h42.72a149.19 149.19 0 0 0-149-149.36h-.33zm0-85.27v42.72c106-.1 192 85.75 192.08 191.75v.5h42.72c-.46-129.46-105.34-234.27-234.8-234.64z"], + "cloudscale": [448, 512, [], "f383", "M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z"], + "cloudsmith": [332, 512, [], "f384", "M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z"], + "cloudversify": [616, 512, [], "f385", "M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z"], + "codepen": [512, 512, [], "f1cb", "M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z"], + "codiepie": [472, 512, [], "f284", "M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z"], + "confluence": [512, 512, [], "f78d", "M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z"], + "connectdevelop": [576, 512, [], "f20e", "M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z"], + "contao": [512, 512, [], "f26d", "M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z"], + "cotton-bureau": [512, 512, [], "f89e", "M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z"], + "cpanel": [640, 512, [], "f388", "M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z"], + "creative-commons": [496, 512, [], "f25e", "M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z"], + "creative-commons-by": [496, 512, [], "f4e7", "M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z"], + "creative-commons-nc": [496, 512, [], "f4e8", "M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z"], + "creative-commons-nc-eu": [496, 512, [], "f4e9", "M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z"], + "creative-commons-nc-jp": [496, 512, [], "f4ea", "M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z"], + "creative-commons-nd": [496, 512, [], "f4eb", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z"], + "creative-commons-pd": [496, 512, [], "f4ec", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z"], + "creative-commons-pd-alt": [496, 512, [], "f4ed", "M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z"], + "creative-commons-remix": [496, 512, [], "f4ee", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z"], + "creative-commons-sa": [496, 512, [], "f4ef", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z"], + "creative-commons-sampling": [496, 512, [], "f4f0", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z"], + "creative-commons-sampling-plus": [496, 512, [], "f4f1", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z"], + "creative-commons-share": [496, 512, [], "f4f2", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z"], + "creative-commons-zero": [496, 512, [], "f4f3", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z"], + "critical-role": [448, 512, [], "f6c9", "M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z"], + "css3": [512, 512, [], "f13c", "M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z"], + "css3-alt": [384, 512, [], "f38b", "M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z"], + "cuttlefish": [440, 512, [], "f38c", "M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z"], + "d-and-d": [576, 512, [], "f38d", "M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z"], + "d-and-d-beyond": [640, 512, [], "f6ca", "M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z"], + "dailymotion": [448, 512, [], "f952", "M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z"], + "dashcube": [448, 512, [], "f210", "M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z"], + "delicious": [448, 512, [], "f1a5", "M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z"], + "deploydog": [512, 512, [], "f38e", "M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z"], + "deskpro": [480, 512, [], "f38f", "M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z"], + "dev": [448, 512, [], "f6cc", "M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z"], + "deviantart": [320, 512, [], "f1bd", "M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z"], + "dhl": [640, 512, [], "f790", "M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z"], + "diaspora": [512, 512, [], "f791", "M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z"], + "digg": [512, 512, [], "f1a6", "M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z"], + "digital-ocean": [512, 512, [], "f391", "M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z"], + "discord": [448, 512, [], "f392", "M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z"], + "discourse": [448, 512, [], "f393", "M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"], + "dochub": [416, 512, [], "f394", "M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z"], + "docker": [640, 512, [], "f395", "M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"], + "draft2digital": [480, 512, [], "f396", "M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z"], + "dribbble": [512, 512, [], "f17d", "M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z"], + "dribbble-square": [448, 512, [], "f397", "M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z"], + "dropbox": [528, 512, [], "f16b", "M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z"], + "drupal": [448, 512, [], "f1a9", "M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z"], + "dyalog": [416, 512, [], "f399", "M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z"], + "earlybirds": [480, 512, [], "f39a", "M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z"], + "ebay": [640, 512, [], "f4f4", "M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z"], + "edge": [512, 512, [], "f282", "M481.92,134.48C440.87,54.18,352.26,8,255.91,8,137.05,8,37.51,91.68,13.47,203.66c26-46.49,86.22-79.14,149.46-79.14,79.27,0,121.09,48.93,122.25,50.18,22,23.8,33,50.39,33,83.1,0,10.4-5.31,25.82-15.11,38.57-1.57,2-6.39,4.84-6.39,11,0,5.06,3.29,9.92,9.14,14,27.86,19.37,80.37,16.81,80.51,16.81A115.39,115.39,0,0,0,444.94,322a118.92,118.92,0,0,0,58.95-102.44C504.39,176.13,488.39,147.26,481.92,134.48ZM212.77,475.67a154.88,154.88,0,0,1-46.64-45c-32.94-47.42-34.24-95.6-20.1-136A155.5,155.5,0,0,1,203,215.75c59-45.2,94.84-5.65,99.06-1a80,80,0,0,0-4.89-10.14c-9.24-15.93-24-36.41-56.56-53.51-33.72-17.69-70.59-18.59-77.64-18.59-38.71,0-77.9,13-107.53,35.69C35.68,183.3,12.77,208.72,8.6,243c-1.08,12.31-2.75,62.8,23,118.27a248,248,0,0,0,248.3,141.61C241.78,496.26,214.05,476.24,212.77,475.67Zm250.72-98.33a7.76,7.76,0,0,0-7.92-.23,181.66,181.66,0,0,1-20.41,9.12,197.54,197.54,0,0,1-69.55,12.52c-91.67,0-171.52-63.06-171.52-144A61.12,61.12,0,0,1,200.61,228,168.72,168.72,0,0,0,161.85,278c-14.92,29.37-33,88.13,13.33,151.66,6.51,8.91,23,30,56,47.67,23.57,12.65,49,19.61,71.7,19.61,35.14,0,115.43-33.44,163-108.87A7.75,7.75,0,0,0,463.49,377.34Z"], + "elementor": [448, 512, [], "f430", "M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z"], + "ello": [496, 512, [], "f5f1", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z"], + "ember": [640, 512, [], "f423", "M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z"], + "empire": [496, 512, [], "f1d1", "M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z"], + "envira": [448, 512, [], "f299", "M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z"], + "erlang": [640, 512, [], "f39d", "M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z"], + "ethereum": [320, 512, [], "f42e", "M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"], + "etsy": [384, 512, [], "f2d7", "M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z"], + "evernote": [384, 512, [], "f839", "M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z"], + "expeditedssl": [496, 512, [], "f23e", "M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z"], + "facebook": [512, 512, [], "f09a", "M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"], + "facebook-f": [320, 512, [], "f39e", "M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"], + "facebook-messenger": [512, 512, [], "f39f", "M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z"], + "facebook-square": [448, 512, [], "f082", "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"], + "fantasy-flight-games": [512, 512, [], "f6dc", "M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99a42569.01 42569.01 0 0 1-41.13-40.72zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z"], + "fedex": [640, 512, [], "f797", "M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z"], + "fedora": [448, 512, [], "f798", "M225 32C101.3 31.7.8 131.7.4 255.4L0 425.7a53.6 53.6 0 0 0 53.6 53.9l170.2.4c123.7.3 224.3-99.7 224.6-223.4S348.7 32.3 225 32zm169.8 157.2L333 126.6c2.3-4.7 3.8-9.2 3.8-14.3v-1.6l55.2 56.1a101 101 0 0 1 2.8 22.4zM331 94.3a106.06 106.06 0 0 1 58.5 63.8l-54.3-54.6a26.48 26.48 0 0 0-4.2-9.2zM118.1 247.2a49.66 49.66 0 0 0-7.7 11.4l-8.5-8.5a85.78 85.78 0 0 1 16.2-2.9zM97 251.4l11.8 11.9-.9 8a34.74 34.74 0 0 0 2.4 12.5l-27-27.2a80.6 80.6 0 0 1 13.7-5.2zm-18.2 7.4l38.2 38.4a53.17 53.17 0 0 0-14.1 4.7L67.6 266a107 107 0 0 1 11.2-7.2zm-15.2 9.8l35.3 35.5a67.25 67.25 0 0 0-10.5 8.5L53.5 278a64.33 64.33 0 0 1 10.1-9.4zm-13.3 12.3l34.9 35a56.84 56.84 0 0 0-7.7 11.4l-35.8-35.9c2.8-3.8 5.7-7.2 8.6-10.5zm-11 14.3l36.4 36.6a48.29 48.29 0 0 0-3.6 15.2l-39.5-39.8a99.81 99.81 0 0 1 6.7-12zm-8.8 16.3l41.3 41.8a63.47 63.47 0 0 0 6.7 26.2L25.8 326c1.4-4.9 2.9-9.6 4.7-14.5zm-7.9 43l61.9 62.2a31.24 31.24 0 0 0-3.6 14.3v1.1l-55.4-55.7a88.27 88.27 0 0 1-2.9-21.9zm5.3 30.7l54.3 54.6a28.44 28.44 0 0 0 4.2 9.2 106.32 106.32 0 0 1-58.5-63.8zm-5.3-37a80.69 80.69 0 0 1 2.1-17l72.2 72.5a37.59 37.59 0 0 0-9.9 8.7zm253.3-51.8l-42.6-.1-.1 56c-.2 69.3-64.4 115.8-125.7 102.9-5.7 0-19.9-8.7-19.9-24.2a24.89 24.89 0 0 1 24.5-24.6c6.3 0 6.3 1.6 15.7 1.6a55.91 55.91 0 0 0 56.1-55.9l.1-47c0-4.5-4.5-9-8.9-9l-33.6-.1c-32.6-.1-32.5-49.4.1-49.3l42.6.1.1-56a105.18 105.18 0 0 1 105.6-105 86.35 86.35 0 0 1 20.2 2.3c11.2 1.8 19.9 11.9 19.9 24 0 15.5-14.9 27.8-30.3 23.9-27.4-5.9-65.9 14.4-66 54.9l-.1 47a8.94 8.94 0 0 0 8.9 9l33.6.1c32.5.2 32.4 49.5-.2 49.4zm23.5-.3a35.58 35.58 0 0 0 7.6-11.4l8.5 8.5a102 102 0 0 1-16.1 2.9zm21-4.2L308.6 280l.9-8.1a34.74 34.74 0 0 0-2.4-12.5l27 27.2a74.89 74.89 0 0 1-13.7 5.3zm18-7.4l-38-38.4c4.9-1.1 9.6-2.4 13.7-4.7l36.2 35.9c-3.8 2.5-7.9 5-11.9 7.2zm15.5-9.8l-35.3-35.5a61.06 61.06 0 0 0 10.5-8.5l34.9 35a124.56 124.56 0 0 1-10.1 9zm13.2-12.3l-34.9-35a63.18 63.18 0 0 0 7.7-11.4l35.8 35.9a130.28 130.28 0 0 1-8.6 10.5zm11-14.3l-36.4-36.6a48.29 48.29 0 0 0 3.6-15.2l39.5 39.8a87.72 87.72 0 0 1-6.7 12zm13.5-30.9a140.63 140.63 0 0 1-4.7 14.3L345.6 190a58.19 58.19 0 0 0-7.1-26.2zm1-5.6l-71.9-72.1a32 32 0 0 0 9.9-9.2l64.3 64.7a90.93 90.93 0 0 1-2.3 16.6z"], + "figma": [384, 512, [], "f799", "M277 170.7A85.35 85.35 0 0 0 277 0H106.3a85.3 85.3 0 0 0 0 170.6 85.35 85.35 0 0 0 0 170.7 85.35 85.35 0 1 0 85.3 85.4v-256zm0 0a85.3 85.3 0 1 0 85.3 85.3 85.31 85.31 0 0 0-85.3-85.3z"], + "firefox": [512, 512, [], "f269", "M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z"], + "firefox-browser": [512, 512, [], "f907", "M189.37,152.86Zm-58.74-29.37C130.79,123.5,130.71,123.5,130.63,123.49Zm351.42,45.35c-10.61-25.5-32.08-53-48.94-61.73,13.72,26.89,21.67,53.88,24.7,74,0,0,0,.14.05.41-27.58-68.75-74.35-96.47-112.55-156.83-1.93-3.05-3.86-6.11-5.74-9.33-1-1.65-1.86-3.34-2.69-5.05A44.88,44.88,0,0,1,333.24.69a.63.63,0,0,0-.55-.66.9.9,0,0,0-.46,0l-.12.07-.18.1.1-.14c-54.23,31.77-76.72,87.38-82.5,122.78a130,130,0,0,0-48.33,12.33,6.25,6.25,0,0,0-3.09,7.75,6.13,6.13,0,0,0,7.79,3.79l.52-.21a117.84,117.84,0,0,1,42.11-11l1.42-.1c2-.12,4-.2,6-.22A122.61,122.61,0,0,1,291,140c.67.2,1.32.42,2,.63,1.89.57,3.76,1.2,5.62,1.87,1.36.5,2.71,1,4.05,1.58,1.09.44,2.18.88,3.25,1.35q2.52,1.13,5,2.35c.75.37,1.5.74,2.25,1.13q2.4,1.26,4.74,2.63,1.51.87,3,1.8a124.89,124.89,0,0,1,42.66,44.13c-13-9.15-36.35-18.19-58.82-14.28,87.74,43.86,64.18,194.9-57.39,189.2a108.43,108.43,0,0,1-31.74-6.12c-2.42-.91-4.8-1.89-7.16-2.93-1.38-.63-2.76-1.27-4.12-2C174.5,346,149.9,316.92,146.83,281.59c0,0,11.25-41.95,80.62-41.95,7.5,0,28.93-20.92,29.33-27-.09-2-42.54-18.87-59.09-35.18-8.85-8.71-13.05-12.91-16.77-16.06a69.58,69.58,0,0,0-6.31-4.77A113.05,113.05,0,0,1,173.92,97c-25.06,11.41-44.55,29.45-58.71,45.37h-.12c-9.67-12.25-9-52.65-8.43-61.08-.12-.53-7.22,3.68-8.15,4.31a178.54,178.54,0,0,0-23.84,20.43A214,214,0,0,0,51.9,133.36l0,0a.08.08,0,0,1,0,0,205.84,205.84,0,0,0-32.73,73.9c-.06.27-2.33,10.21-4,22.48q-.42,2.87-.78,5.74c-.57,3.69-1,7.71-1.44,14,0,.24,0,.48-.05.72-.18,2.71-.34,5.41-.49,8.12,0,.41,0,.82,0,1.24,0,134.7,109.21,243.89,243.92,243.89,120.64,0,220.82-87.58,240.43-202.62.41-3.12.74-6.26,1.11-9.41,4.85-41.83-.54-85.79-15.82-122.55Z"], + "first-order": [448, 512, [], "f2b0", "M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z"], + "first-order-alt": [496, 512, [], "f50a", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z"], + "firstdraft": [384, 512, [], "f3a1", "M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z"], + "flickr": [448, 512, [], "f16e", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"], + "flipboard": [448, 512, [], "f44d", "M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z"], + "fly": [384, 512, [], "f417", "M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z"], + "font-awesome": [448, 512, [], "f2b4", "M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z"], + "font-awesome-alt": [448, 512, [], "f35c", "M339.3 171.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1zM397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm14.3 397.7c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6v-.1c7.8 0 14.3 6.6 14.3 14.3z"], + "font-awesome-flag": [448, 512, [], "f425", "M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z"], + "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], + "fonticons": [448, 512, [], "f280", "M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z"], + "fonticons-fi": [384, 512, [], "f3a2", "M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z"], + "fort-awesome": [512, 512, [], "f286", "M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z"], + "fort-awesome-alt": [512, 512, [], "f3a3", "M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z"], + "forumbee": [448, 512, [], "f211", "M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z"], + "foursquare": [368, 512, [], "f180", "M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z"], + "free-code-camp": [576, 512, [], "f2c5", "M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z"], + "freebsd": [448, 512, [], "f3a4", "M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z"], + "fulcrum": [320, 512, [], "f50b", "M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z"], + "galactic-republic": [496, 512, [], "f50c", "M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z"], + "galactic-senate": [512, 512, [], "f50d", "M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z"], + "get-pocket": [448, 512, [], "f265", "M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"], + "gg": [512, 512, [], "f260", "M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z"], + "gg-circle": [512, 512, [], "f261", "M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z"], + "git": [512, 512, [], "f1d3", "M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z"], + "git-alt": [448, 512, [], "f841", "M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"], + "git-square": [448, 512, [], "f1d2", "M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z"], + "github": [496, 512, [], "f09b", "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"], + "github-alt": [480, 512, [], "f113", "M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"], + "github-square": [448, 512, [], "f092", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z"], + "gitkraken": [592, 512, [], "f3a6", "M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z"], + "gitlab": [512, 512, [], "f296", "M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z"], + "gitter": [384, 512, [], "f426", "M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"], + "glide": [448, 512, [], "f2a5", "M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z"], + "glide-g": [448, 512, [], "f2a6", "M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z"], + "gofore": [400, 512, [], "f3a7", "M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z"], + "goodreads": [448, 512, [], "f3a8", "M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z"], + "goodreads-g": [384, 512, [], "f3a9", "M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z"], + "google": [488, 512, [], "f1a0", "M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"], + "google-drive": [512, 512, [], "f3aa", "M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z"], + "google-play": [512, 512, [], "f3ab", "M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z"], + "google-plus": [496, 512, [], "f2b3", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z"], + "google-plus-g": [640, 512, [], "f0d5", "M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z"], + "google-plus-square": [448, 512, [], "f0d4", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z"], + "google-wallet": [448, 512, [], "f1ee", "M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z"], + "gratipay": [496, 512, [], "f184", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z"], + "grav": [512, 512, [], "f2d6", "M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z"], + "gripfire": [384, 512, [], "f3ac", "M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z"], + "grunt": [384, 512, [], "f3ad", "M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z"], + "gulp": [256, 512, [], "f3ae", "M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z"], + "hacker-news": [448, 512, [], "f1d4", "M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"], + "hacker-news-square": [448, 512, [], "f3af", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"], + "hackerrank": [512, 512, [], "f5f7", "M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z"], + "hips": [640, 512, [], "f452", "M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z"], + "hire-a-helper": [512, 512, [], "f3b0", "M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z"], + "hooli": [640, 512, [], "f427", "M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z"], + "hornbill": [512, 512, [], "f592", "M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z"], + "hotjar": [448, 512, [], "f3b1", "M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z"], + "houzz": [448, 512, [], "f27c", "M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z"], + "html5": [384, 512, [], "f13b", "M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"], + "hubspot": [512, 512, [], "f3b2", "M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z"], + "ideal": [576, 512, [], "f913", "M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z"], + "imdb": [448, 512, [], "f2d8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.3 229.2H21c.1-.1.2-.3.3-.4zM97 319.8H64V192h33zm113.2 0h-28.7v-86.4l-11.6 86.4h-20.6l-12.2-84.5v84.5h-29V192h42.8c3.3 19.8 6 39.9 8.7 59.9l7.6-59.9h43zm11.4 0V192h24.6c17.6 0 44.7-1.6 49 20.9 1.7 7.6 1.4 16.3 1.4 24.4 0 88.5 11.1 82.6-75 82.5zm160.9-29.2c0 15.7-2.4 30.9-22.2 30.9-9 0-15.2-3-20.9-9.8l-1.9 8.1h-29.8V192h31.7v41.7c6-6.5 12-9.2 20.9-9.2 21.4 0 22.2 12.8 22.2 30.1zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4zm85.5 26.1c0-5.4 1.1-12.7-6.2-12.7-6 0-4.9 8.9-4.9 12.7 0 .6-1.1 39.6 1.1 44.7.8 1.6 2.2 2.4 3.8 2.4 7.8 0 6.2-9 6.2-14.4z"], + "instagram": [448, 512, [], "f16d", "M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"], + "instagram-square": [448, 512, [], "f955", "M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z"], + "intercom": [448, 512, [], "f7af", "M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z"], + "internet-explorer": [512, 512, [], "f26b", "M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z"], + "invision": [448, 512, [], "f7b0", "M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z"], + "ioxhost": [640, 512, [], "f208", "M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z"], + "itch-io": [512, 512, [], "f83a", "M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z"], + "itunes": [448, 512, [], "f3b4", "M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z"], + "itunes-note": [384, 512, [], "f3b5", "M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z"], + "java": [384, 512, [], "f4e4", "M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z"], + "jedi-order": [448, 512, [], "f50e", "M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z"], + "jenkins": [512, 512, [], "f3b6", "M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z"], + "jira": [496, 512, [], "f7b1", "M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z"], + "joget": [496, 512, [], "f3b7", "M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z"], + "joomla": [448, 512, [], "f1aa", "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z"], + "js": [448, 512, [], "f3b8", "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"], + "js-square": [448, 512, [], "f3b9", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"], + "jsfiddle": [576, 512, [], "f1cc", "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z"], + "kaggle": [320, 512, [], "f5fa", "M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z"], + "keybase": [448, 512, [], "f4f5", "M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z"], + "keycdn": [512, 512, [], "f3ba", "M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160"], + "kickstarter": [448, 512, [], "f3bb", "M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z"], + "kickstarter-k": [384, 512, [], "f3bc", "M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"], + "korvue": [446, 512, [], "f42f", "M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z"], + "laravel": [512, 512, [], "f3bd", "M504.4,115.83a5.72,5.72,0,0,0-.28-.68,8.52,8.52,0,0,0-.53-1.25,6,6,0,0,0-.54-.71,9.36,9.36,0,0,0-.72-.94c-.23-.22-.52-.4-.77-.6a8.84,8.84,0,0,0-.9-.68L404.4,55.55a8,8,0,0,0-8,0L300.12,111h0a8.07,8.07,0,0,0-.88.69,7.68,7.68,0,0,0-.78.6,8.23,8.23,0,0,0-.72.93c-.17.24-.39.45-.54.71a9.7,9.7,0,0,0-.52,1.25c-.08.23-.21.44-.28.68a8.08,8.08,0,0,0-.28,2.08V223.18l-80.22,46.19V63.44a7.8,7.8,0,0,0-.28-2.09c-.06-.24-.2-.45-.28-.68a8.35,8.35,0,0,0-.52-1.24c-.14-.26-.37-.47-.54-.72a9.36,9.36,0,0,0-.72-.94,9.46,9.46,0,0,0-.78-.6,9.8,9.8,0,0,0-.88-.68h0L115.61,1.07a8,8,0,0,0-8,0L11.34,56.49h0a6.52,6.52,0,0,0-.88.69,7.81,7.81,0,0,0-.79.6,8.15,8.15,0,0,0-.71.93c-.18.25-.4.46-.55.72a7.88,7.88,0,0,0-.51,1.24,6.46,6.46,0,0,0-.29.67,8.18,8.18,0,0,0-.28,2.1v329.7a8,8,0,0,0,4,6.95l192.5,110.84a8.83,8.83,0,0,0,1.33.54c.21.08.41.2.63.26a7.92,7.92,0,0,0,4.1,0c.2-.05.37-.16.55-.22a8.6,8.6,0,0,0,1.4-.58L404.4,400.09a8,8,0,0,0,4-6.95V287.88l92.24-53.11a8,8,0,0,0,4-7V117.92A8.63,8.63,0,0,0,504.4,115.83ZM111.6,17.28h0l80.19,46.15-80.2,46.18L31.41,63.44Zm88.25,60V278.6l-46.53,26.79-33.69,19.4V123.5l46.53-26.79Zm0,412.78L23.37,388.5V77.32L57.06,96.7l46.52,26.8V338.68a6.94,6.94,0,0,0,.12.9,8,8,0,0,0,.16,1.18h0a5.92,5.92,0,0,0,.38.9,6.38,6.38,0,0,0,.42,1v0a8.54,8.54,0,0,0,.6.78,7.62,7.62,0,0,0,.66.84l0,0c.23.22.52.38.77.58a8.93,8.93,0,0,0,.86.66l0,0,0,0,92.19,52.18Zm8-106.17-80.06-45.32,84.09-48.41,92.26-53.11,80.13,46.13-58.8,33.56Zm184.52,4.57L215.88,490.11V397.8L346.6,323.2l45.77-26.15Zm0-119.13L358.68,250l-46.53-26.79V131.79l33.69,19.4L392.37,178Zm8-105.28-80.2-46.17,80.2-46.16,80.18,46.15Zm8,105.28V178L455,151.19l33.68-19.4v91.39h0Z"], + "lastfm": [512, 512, [], "f202", "M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"], + "lastfm-square": [448, 512, [], "f203", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z"], + "leanpub": [576, 512, [], "f212", "M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z"], + "less": [640, 512, [], "f41d", "M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z"], + "line": [448, 512, [], "f3c0", "M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z"], + "linkedin": [448, 512, [], "f08c", "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"], + "linkedin-in": [448, 512, [], "f0e1", "M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"], + "linode": [448, 512, [], "f2b8", "M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z"], + "linux": [448, 512, [], "f17c", "M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"], + "lyft": [512, 512, [], "f3c3", "M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z"], + "magento": [448, 512, [], "f3c4", "M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z"], + "mailchimp": [448, 512, [], "f59e", "M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z"], + "mandalorian": [448, 512, [], "f50f", "M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z"], + "markdown": [640, 512, [], "f60f", "M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z"], + "mastodon": [448, 512, [], "f4f6", "M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"], + "maxcdn": [512, 512, [], "f136", "M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z"], + "mdb": [576, 512, [], "f8ca", "M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z"], + "medapps": [320, 512, [], "f3c6", "M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z"], + "medium": [448, 512, [], "f23a", "M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z"], + "medium-m": [512, 512, [], "f3c7", "M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z"], + "medrt": [544, 512, [], "f3c8", "M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z"], + "meetup": [512, 512, [], "f2e0", "M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z"], + "megaport": [496, 512, [], "f5a3", "M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z"], + "mendeley": [640, 512, [], "f7b3", "M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z"], + "microblog": [448, 512, [], "f91a", "M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z"], + "microsoft": [448, 512, [], "f3ca", "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"], + "mix": [448, 512, [], "f3cb", "M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z"], + "mixcloud": [640, 512, [], "f289", "M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z"], + "mixer": [512, 512, [], "f956", "M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z"], + "mizuni": [496, 512, [], "f3cc", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z"], + "modx": [448, 512, [], "f285", "M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z"], + "monero": [496, 512, [], "f3d0", "M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"], + "napster": [496, 512, [], "f3d2", "M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z"], + "neos": [512, 512, [], "f612", "M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z"], + "nimblr": [384, 512, [], "f5a8", "M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z"], + "node": [640, 512, [], "f419", "M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z"], + "node-js": [448, 512, [], "f3d3", "M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"], + "npm": [576, 512, [], "f3d4", "M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z"], + "ns8": [640, 512, [], "f3d5", "M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z"], + "nutritionix": [400, 512, [], "f3d6", "M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z"], + "odnoklassniki": [320, 512, [], "f263", "M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z"], + "odnoklassniki-square": [448, 512, [], "f264", "M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z"], + "old-republic": [496, 512, [], "f510", "M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z"], + "opencart": [640, 512, [], "f23d", "M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z"], + "openid": [448, 512, [], "f19b", "M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z"], + "opera": [496, 512, [], "f26a", "M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z"], + "optin-monster": [576, 512, [], "f23c", "M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z"], + "orcid": [512, 512, [], "f8d2", "M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z"], + "osi": [512, 512, [], "f41a", "M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z"], + "page4": [496, 512, [], "f3d7", "M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z"], + "pagelines": [384, 512, [], "f18c", "M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z"], + "palfed": [576, 512, [], "f3d8", "M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z"], + "patreon": [512, 512, [], "f3d9", "M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"], + "paypal": [384, 512, [], "f1ed", "M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z"], + "penny-arcade": [640, 512, [], "f704", "M421.91 164.27c-4.49 19.45-1.4 6.06-15.1 65.29l39.73-10.61c-22.34-49.61-17.29-38.41-24.63-54.68zm-206.09 51.11c-20.19 5.4-11.31 3.03-39.63 10.58l4.46 46.19c28.17-7.59 20.62-5.57 34.82-9.34 42.3-9.79 32.85-56.42.35-47.43zm326.16-26.19l-45.47-99.2c-5.69-12.37-19.46-18.84-32.62-15.33-70.27 18.75-38.72 10.32-135.59 36.23a27.618 27.618 0 0 0-18.89 17.41C144.26 113.27 0 153.75 0 226.67c0 33.5 30.67 67.11 80.9 95.37l1.74 17.88a27.891 27.891 0 0 0-17.77 28.67l4.3 44.48c1.39 14.31 13.43 25.21 27.8 25.2 5.18-.01-3.01 1.78 122.53-31.76 12.57-3.37 21.12-15.02 20.58-28.02 216.59 45.5 401.99-5.98 399.89-84.83.01-28.15-22.19-66.56-97.99-104.47zM255.14 298.3l-21.91 5.88-48.44 12.91 2.46 23.55 20.53-5.51 4.51 44.51-115.31 30.78-4.3-44.52 20.02-5.35-11.11-114.64-20.12 5.39-4.35-44.5c178.15-47.54 170.18-46.42 186.22-46.65 56.66-1.13 64.15 71.84 42.55 104.43a86.7 86.7 0 0 1-50.75 33.72zm199.18 16.62l-3.89-39.49 14.9-3.98-6.61-14.68-57.76 15.42-4.1 17.54 19.2-5.12 4.05 39.54-112.85 30.07-4.46-44.43 20.99-5.59 33.08-126.47-17.15 4.56-4.2-44.48c93.36-24.99 65.01-17.41 135.59-36.24l66.67 145.47 20.79-5.56 4.3 44.48-108.55 28.96z"], + "periscope": [448, 512, [], "f3da", "M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z"], + "phabricator": [496, 512, [], "f3db", "M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z"], + "phoenix-framework": [640, 512, [], "f3dc", "M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z"], + "phoenix-squadron": [512, 512, [], "f511", "M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z"], + "php": [640, 512, [], "f457", "M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z"], + "pied-piper": [480, 512, [], "f2ae", "M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z"], + "pied-piper-alt": [576, 512, [], "f1a8", "M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z"], + "pied-piper-hat": [640, 512, [], "f4e5", "M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z"], + "pied-piper-pp": [448, 512, [], "f1a7", "M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z"], + "pied-piper-square": [448, 512, [], "f91e", "M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z"], + "pinterest": [496, 512, [], "f0d2", "M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"], + "pinterest-p": [384, 512, [], "f231", "M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"], + "pinterest-square": [448, 512, [], "f0d3", "M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"], + "playstation": [576, 512, [], "f3df", "M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z"], + "product-hunt": [512, 512, [], "f288", "M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z"], + "pushed": [432, 512, [], "f3e1", "M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z"], + "python": [448, 512, [], "f3e2", "M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"], + "qq": [448, 512, [], "f1d6", "M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z"], + "quinscape": [512, 512, [], "f459", "M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z"], + "quora": [448, 512, [], "f2c4", "M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z"], + "r-project": [581, 512, [], "f4f7", "M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"], + "raspberry-pi": [407, 512, [], "f7bb", "M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z"], + "ravelry": [512, 512, [], "f2d9", "M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z"], + "react": [512, 512, [], "f41b", "M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z"], + "reacteurope": [576, 512, [], "f75d", "M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z"], + "readme": [576, 512, [], "f4d5", "M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z"], + "rebel": [512, 512, [], "f1d0", "M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z"], + "red-river": [448, 512, [], "f3e3", "M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z"], + "reddit": [512, 512, [], "f1a1", "M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"], + "reddit-alien": [512, 512, [], "f281", "M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"], + "reddit-square": [448, 512, [], "f1a2", "M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"], + "redhat": [512, 512, [], "f7bc", "M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24"], + "renren": [512, 512, [], "f18b", "M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z"], + "replyd": [448, 512, [], "f3e6", "M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z"], + "researchgate": [448, 512, [], "f4f8", "M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z"], + "resolving": [496, 512, [], "f3e7", "M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z"], + "rev": [448, 512, [], "f5b2", "M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z"], + "rocketchat": [576, 512, [], "f3e8", "M486.41 107.57c-76.93-50.83-179.18-62.4-264.12-47.07C127.26-31.16 20.77 11 0 23.12c0 0 73.08 62.1 61.21 116.49-86.52 88.2-45.39 186.4 0 232.77C73.08 426.77 0 488.87 0 488.87c20.57 12.16 126.77 54.19 222.29-37 84.75 15.23 187 3.76 264.12-47.16 119.26-76.14 119.65-220.61 0-297.15zM294.18 404.22a339.53 339.53 0 0 1-88.11-11.37l-19.77 19.09a179.74 179.74 0 0 1-36.59 27.39A143.14 143.14 0 0 1 98 454.06c1-1.78 1.88-3.56 2.77-5.24q29.67-55 16-98.69c-32.53-25.61-52-58.34-52-94.13 0-82 102.74-148.43 229.41-148.43S523.59 174 523.59 256 420.85 404.22 294.18 404.22zM184.12 291.3a34.32 34.32 0 0 1-34.8-33.72c-.7-45.39 67.83-46.38 68.52-1.09v.51a34 34 0 0 1-33.72 34.32zm73.77-33.72c-.79-45.39 67.74-46.48 68.53-1.19v.61c.39 45.08-67.74 45.57-68.53.58zm143.38 33.72a34.33 34.33 0 0 1-34.81-33.72c-.69-45.39 67.84-46.38 68.53-1.09v.51a33.89 33.89 0 0 1-33.72 34.32z"], + "rockrms": [496, 512, [], "f3e9", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z"], + "safari": [512, 512, [], "f267", "M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z"], + "salesforce": [640, 512, [], "f83b", "M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z"], + "sass": [640, 512, [], "f41e", "M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z"], + "schlix": [448, 512, [], "f3ea", "M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z"], + "scribd": [384, 512, [], "f28a", "M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z"], + "searchengin": [460, 512, [], "f3eb", "M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z"], + "sellcast": [448, 512, [], "f2da", "M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z"], + "sellsy": [640, 512, [], "f213", "M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z"], + "servicestack": [496, 512, [], "f3ec", "M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z"], + "shirtsinbulk": [448, 512, [], "f214", "M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z"], + "shopify": [448, 512, [], "f957", "M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z"], + "shopware": [512, 512, [], "f5b5", "M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z"], + "simplybuilt": [512, 512, [], "f215", "M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z"], + "sistrix": [448, 512, [], "f3ee", "M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z"], + "sith": [448, 512, [], "f512", "M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z"], + "sketch": [512, 512, [], "f7c6", "M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z"], + "skyatlas": [640, 512, [], "f216", "M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z"], + "skype": [448, 512, [], "f17e", "M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z"], + "slack": [448, 512, [], "f198", "M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"], + "slack-hash": [448, 512, [], "f3ef", "M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z"], + "slideshare": [512, 512, [], "f1e7", "M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z"], + "snapchat": [496, 512, [], "f2ab", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"], + "snapchat-ghost": [512, 512, [], "f2ac", "M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z"], + "snapchat-square": [448, 512, [], "f2ad", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"], + "soundcloud": [640, 512, [], "f1be", "M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z"], + "sourcetree": [448, 512, [], "f7d3", "M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z"], + "speakap": [448, 512, [], "f3f3", "M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z"], + "speaker-deck": [512, 512, [], "f83c", "M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z"], + "spotify": [496, 512, [], "f1bc", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z"], + "squarespace": [512, 512, [], "f5be", "M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z"], + "stack-exchange": [448, 512, [], "f18d", "M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z"], + "stack-overflow": [384, 512, [], "f16c", "M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"], + "stackpath": [448, 512, [], "f842", "M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z"], + "staylinked": [440, 512, [], "f3f5", "M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z"], + "steam": [496, 512, [], "f1b6", "M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z"], + "steam-square": [448, 512, [], "f1b7", "M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z"], + "steam-symbol": [448, 512, [], "f3f6", "M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z"], + "sticker-mule": [576, 512, [], "f3f7", "M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z"], + "strava": [384, 512, [], "f428", "M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z"], + "stripe": [640, 512, [], "f429", "M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z"], + "stripe-s": [384, 512, [], "f42a", "M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z"], + "studiovinari": [512, 512, [], "f3f8", "M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z"], + "stumbleupon": [512, 512, [], "f1a4", "M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z"], + "stumbleupon-circle": [496, 512, [], "f1a3", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z"], + "superpowers": [448, 512, [], "f2dd", "M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z"], + "supple": [640, 512, [], "f3f9", "M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z"], + "suse": [640, 512, [], "f7d6", "M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z"], + "swift": [448, 512, [], "f8e1", "M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z"], + "symfony": [512, 512, [], "f83d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z"], + "teamspeak": [512, 512, [], "f4f9", "M244.2 346.79c2.4-12.3-12-30-32.4-48.7-20.9-19.2-48.2-39.1-63.4-46.6-21.7-12-41.7-1.8-46.3 22.7-5 26.2 0 51.4 14.5 73.9 10.2 15.5 25.4 22.7 43.4 24 11.6.6 52.5 2.2 61.7-1 11.9-4.3 20.1-11.8 22.5-24.3zm205 20.8a5.22 5.22 0 0 0-8.3 2.4c-8 25.4-44.7 112.5-172.1 121.5-149.7 10.5 80.3 43.6 145.4-6.4 22.7-17.4 47.6-35 46.6-85.4-.4-10.1-4.9-26.69-11.6-32.1zm62-122.4c-.3-18.9-8.6-33.4-26-42.2-2.9-1.3-5-2.7-5.9-6.4A222.64 222.64 0 0 0 438.9 103c-1.1-1.5-3.5-3.2-2.2-5 8.5-11.5-.3-18-7-24.4Q321.4-31.11 177.4 13.09c-40.1 12.3-73.9 35.6-102 67.4-4 4.3-6.7 9.1-3 14.5 3 4 1.3 6.2-1 9.3C51.6 132 38.2 162.59 32.1 196c-.7 4.3-2.9 6-6.4 7.8-14.2 7-22.5 18.5-24.9 34L0 264.29v20.9c0 30.8 21 50.4 51.8 49 7.7-.3 11.7-4.3 12-11.5 2-77.5-2.4-95.4 3.7-125.8C92.1 72.39 234.3 5 345.3 65.39 411.4 102 445.7 159 447.6 234.79c.8 28.2 0 56.5 0 84.6 0 7 2.2 12.5 9.4 14.2 24.1 5 49.2-12 53.2-36.7 2.9-17.1 1-34.5 1-51.7zm-159.6 131.5c36.5 2.8 59.3-28.5 58.4-60.5-2.1-45.2-66.2-16.5-87.8-8-73.2 28.1-45 54.9-22.2 60.8z"], + "telegram": [496, 512, [], "f2c6", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"], + "telegram-plane": [448, 512, [], "f3fe", "M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"], + "tencent-weibo": [384, 512, [], "f1d5", "M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z"], + "the-red-yeti": [512, 512, [], "f69d", "M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z"], + "themeco": [448, 512, [], "f5c6", "M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z"], + "themeisle": [512, 512, [], "f2b2", "M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z"], + "think-peaks": [576, 512, [], "f731", "M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z"], + "trade-federation": [496, 512, [], "f513", "M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z"], + "trello": [448, 512, [], "f181", "M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z"], + "tripadvisor": [576, 512, [], "f262", "M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z"], + "tumblr": [320, 512, [], "f173", "M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z"], + "tumblr-square": [448, 512, [], "f174", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z"], + "twitch": [512, 512, [], "f1e8", "M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"], + "twitter": [512, 512, [], "f099", "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"], + "twitter-square": [448, 512, [], "f081", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"], + "typo3": [448, 512, [], "f42b", "M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z"], + "uber": [448, 512, [], "f402", "M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z"], + "ubuntu": [496, 512, [], "f7df", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z"], + "uikit": [448, 512, [], "f403", "M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z"], + "umbraco": [510, 512, [], "f8e8", "M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z"], + "uniregistry": [384, 512, [], "f404", "M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z"], + "unity": [576, 512, [], "f949", "M498.11,206.4,445.31,14.72,248.2,66.08,219,116.14l-59.2-.43L15.54,256,159.82,396.32l59.17-.43,29.24,50,197.08,51.36,52.8-191.62-30-49.63ZM223.77,124.2,374.55,86.51,288,232.33H114.87Zm0,263.63L114.87,279.71H288l86.55,145.81Zm193,14L330.17,256l86.58-145.84L458.56,256Z"], + "untappd": [640, 512, [], "f405", "M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"], + "ups": [384, 512, [], "f7e0", "M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z"], + "usb": [640, 512, [], "f287", "M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z"], + "usps": [576, 512, [], "f7e1", "M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z"], + "ussunnah": [512, 512, [], "f407", "M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z"], + "vaadin": [448, 512, [], "f408", "M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z"], + "viacoin": [384, 512, [], "f237", "M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z"], + "viadeo": [448, 512, [], "f2a9", "M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z"], + "viadeo-square": [448, 512, [], "f2aa", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z"], + "viber": [512, 512, [], "f409", "M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z"], + "vimeo": [448, 512, [], "f40a", "M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z"], + "vimeo-square": [448, 512, [], "f194", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z"], + "vimeo-v": [448, 512, [], "f27d", "M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z"], + "vine": [384, 512, [], "f1ca", "M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z"], + "vk": [576, 512, [], "f189", "M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z"], + "vnv": [640, 512, [], "f40b", "M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z"], + "vuejs": [448, 512, [], "f41f", "M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z"], + "waze": [512, 512, [], "f83f", "M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z"], + "weebly": [512, 512, [], "f5cc", "M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z"], + "weibo": [512, 512, [], "f18a", "M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z"], + "weixin": [576, 512, [], "f1d7", "M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"], + "whatsapp": [448, 512, [], "f232", "M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"], + "whatsapp-square": [448, 512, [], "f40c", "M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"], + "whmcs": [448, 512, [], "f40d", "M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z"], + "wikipedia-w": [640, 512, [], "f266", "M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z"], + "windows": [448, 512, [], "f17a", "M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"], + "wix": [640, 512, [], "f5cf", "M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z"], + "wizards-of-the-coast": [640, 512, [], "f730", "M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z"], + "wolf-pack-battalion": [512, 512, [], "f514", "M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z"], + "wordpress": [512, 512, [], "f19a", "M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"], + "wordpress-simple": [512, 512, [], "f411", "M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z"], + "wpbeginner": [512, 512, [], "f297", "M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z"], + "wpexplorer": [512, 512, [], "f2de", "M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z"], + "wpforms": [448, 512, [], "f298", "M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z"], + "wpressr": [496, 512, [], "f3e4", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z"], + "xbox": [512, 512, [], "f412", "M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z"], + "xing": [384, 512, [], "f168", "M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"], + "xing-square": [448, 512, [], "f169", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z"], + "y-combinator": [448, 512, [], "f23b", "M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z"], + "yahoo": [448, 512, [], "f19e", "M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z"], + "yammer": [512, 512, [], "f840", "M421.78 152.17A23.06 23.06 0 0 0 400.9 112c-.83.43-1.71.9-2.63 1.4-15.25 8.4-118.33 80.62-106.69 88.77s82.04-23.61 130.2-50zm0 217.17c-48.16-26.38-118.64-58.1-130.2-50s91.42 80.35 106.69 88.74c.92.51 1.8 1 2.63 1.41a23.07 23.07 0 0 0 20.88-40.15zM464.21 237c-.95 0-1.95-.06-3-.06-17.4 0-142.52 13.76-136.24 26.51s83.3 18.74 138.21 18.76a23 23 0 0 0 1-45.21zM31 96.65a24.88 24.88 0 0 1 46.14-18.4l81 205.06h1.21l77-203.53a23.52 23.52 0 0 1 44.45 15.27L171.2 368.44C152.65 415.66 134.08 448 77.91 448a139.67 139.67 0 0 1-23.81-1.95 21.31 21.31 0 0 1 6.9-41.77c.66.06 10.91.66 13.86.66 30.47 0 43.74-18.94 58.07-59.41z"], + "yandex": [256, 512, [], "f413", "M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z"], + "yandex-international": [320, 512, [], "f414", "M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z"], + "yarn": [496, 512, [], "f7e3", "M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z"], + "yelp": [384, 512, [], "f1e9", "M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z"], + "yoast": [448, 512, [], "f2b1", "M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z"], + "youtube": [576, 512, [], "f167", "M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"], + "youtube-square": [448, 512, [], "f431", "M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"], + "zhihu": [640, 512, [], "f63f", "M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z"] + }; + + bunker(function () { + defineIcons('fab', icons); + }); + +}()); diff --git a/docs/docs/javascripts/extra.js b/docs/docs/javascripts/extra.js new file mode 100644 index 000000000000..ccacf7be547c --- /dev/null +++ b/docs/docs/javascripts/extra.js @@ -0,0 +1,7 @@ +/* Add target="_blank" to external links */ +/* Source: https://html.com/attributes/a-target/#:~:text=browser */ +function externalLinks() { + for(var c = document.getElementsByTagName("a"), a = 0;a < c.length;a++) { + var b = c[a]; b.getAttribute("href") && b.hostname !== location.hostname && (b.target = "_blank") + } +} ; externalLinks(); diff --git a/docs/docs/javascripts/fontawesome.js b/docs/docs/javascripts/fontawesome.js new file mode 100644 index 000000000000..5ced71cf1dac --- /dev/null +++ b/docs/docs/javascripts/fontawesome.js @@ -0,0 +1,2478 @@ +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +(function () { + 'use strict'; + + function _typeof(obj) { + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + + function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + var noop = function noop() {}; + + var _WINDOW = {}; + var _DOCUMENT = {}; + var _MUTATION_OBSERVER = null; + var _PERFORMANCE = { + mark: noop, + measure: noop + }; + + try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver; + if (typeof performance !== 'undefined') _PERFORMANCE = performance; + } catch (e) {} + + var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + + var WINDOW = _WINDOW; + var DOCUMENT = _DOCUMENT; + var MUTATION_OBSERVER = _MUTATION_OBSERVER; + var PERFORMANCE = _PERFORMANCE; + var IS_BROWSER = !!WINDOW.document; + var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; + var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + + var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; + var UNITS_IN_GRID = 16; + var DEFAULT_FAMILY_PREFIX = 'fa'; + var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa'; + var DATA_FA_I2SVG = 'data-fa-i2svg'; + var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element'; + var DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending'; + var DATA_PREFIX = 'data-prefix'; + var DATA_ICON = 'data-icon'; + var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg'; + var MUTATION_APPROACH_ASYNC = 'async'; + var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT']; + var PRODUCTION = function () { + try { + return "production" === 'production'; + } catch (e) { + return false; + } + }(); + var PREFIX_TO_STYLE = { + 'fas': 'solid', + 'far': 'regular', + 'fal': 'light', + 'fad': 'duotone', + 'fab': 'brands', + 'fa': 'solid' + }; + var STYLE_TO_PREFIX = { + 'solid': 'fas', + 'regular': 'far', + 'light': 'fal', + 'duotone': 'fad', + 'brands': 'fab' + }; + var LAYERS_TEXT_CLASSNAME = 'fa-layers-text'; + var FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Duotone|Brands|Free|Pro)/; + var FONT_WEIGHT_TO_PREFIX = { + '900': 'fas', + '400': 'far', + 'normal': 'far', + '300': 'fal' + }; + var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); + var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask']; + var DUOTONE_CLASSES = { + GROUP: 'group', + SWAP_OPACITY: 'swap-opacity', + PRIMARY: 'primary', + SECONDARY: 'secondary' + }; + var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'flip-both', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY].concat(oneToTen.map(function (n) { + return "".concat(n, "x"); + })).concat(oneToTwenty.map(function (n) { + return "w-".concat(n); + })); + + var initial = WINDOW.FontAwesomeConfig || {}; + + function getAttrConfig(attr) { + var element = DOCUMENT.querySelector('script[' + attr + ']'); + + if (element) { + return element.getAttribute(attr); + } + } + + function coerce(val) { + // Getting an empty string will occur if the attribute is set on the HTML tag but without a value + // We'll assume that this is an indication that it should be toggled to true + // For example + if (val === '') return true; + if (val === 'false') return false; + if (val === 'true') return true; + return val; + } + + if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') { + var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']]; + attrs.forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + attr = _ref2[0], + key = _ref2[1]; + + var val = coerce(getAttrConfig(attr)); + + if (val !== undefined && val !== null) { + initial[key] = val; + } + }); + } + + var _default = { + familyPrefix: DEFAULT_FAMILY_PREFIX, + replacementClass: DEFAULT_REPLACEMENT_CLASS, + autoReplaceSvg: true, + autoAddCss: true, + autoA11y: true, + searchPseudoElements: false, + observeMutations: true, + mutateApproach: 'async', + keepOriginalSource: true, + measurePerformance: false, + showMissingIcons: true + }; + + var _config = _objectSpread({}, _default, initial); + + if (!_config.autoReplaceSvg) _config.observeMutations = false; + + var config = _objectSpread({}, _config); + + WINDOW.FontAwesomeConfig = config; + + var w = WINDOW || {}; + if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; + if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; + if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; + if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; + var namespace = w[NAMESPACE_IDENTIFIER]; + + var functions = []; + + var listener = function listener() { + DOCUMENT.removeEventListener('DOMContentLoaded', listener); + loaded = 1; + functions.map(function (fn) { + return fn(); + }); + }; + + var loaded = false; + + if (IS_DOM) { + loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); + if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener); + } + + function domready (fn) { + if (!IS_DOM) return; + loaded ? setTimeout(fn, 0) : functions.push(fn); + } + + var PENDING = 'pending'; + var SETTLED = 'settled'; + var FULFILLED = 'fulfilled'; + var REJECTED = 'rejected'; + + var NOOP = function NOOP() {}; + + var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; + var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate; + var asyncQueue = []; + var asyncTimer; + + function asyncFlush() { + // run promise callbacks + for (var i = 0; i < asyncQueue.length; i++) { + asyncQueue[i][0](asyncQueue[i][1]); + } // reset async asyncQueue + + + asyncQueue = []; + asyncTimer = false; + } + + function asyncCall(callback, arg) { + asyncQueue.push([callback, arg]); + + if (!asyncTimer) { + asyncTimer = true; + asyncSetTimer(asyncFlush, 0); + } + } + + function invokeResolver(resolver, promise) { + function resolvePromise(value) { + resolve(promise, value); + } + + function rejectPromise(reason) { + reject(promise, reason); + } + + try { + resolver(resolvePromise, rejectPromise); + } catch (e) { + rejectPromise(e); + } + } + + function invokeCallback(subscriber) { + var owner = subscriber.owner; + var settled = owner._state; + var value = owner._data; + var callback = subscriber[settled]; + var promise = subscriber.then; + + if (typeof callback === 'function') { + settled = FULFILLED; + + try { + value = callback(value); + } catch (e) { + reject(promise, e); + } + } + + if (!handleThenable(promise, value)) { + if (settled === FULFILLED) { + resolve(promise, value); + } + + if (settled === REJECTED) { + reject(promise, value); + } + } + } + + function handleThenable(promise, value) { + var resolved; + + try { + if (promise === value) { + throw new TypeError('A promises callback cannot return that same promise.'); + } + + if (value && (typeof value === 'function' || _typeof(value) === 'object')) { + // then should be retrieved only once + var then = value.then; + + if (typeof then === 'function') { + then.call(value, function (val) { + if (!resolved) { + resolved = true; + + if (value === val) { + fulfill(promise, val); + } else { + resolve(promise, val); + } + } + }, function (reason) { + if (!resolved) { + resolved = true; + reject(promise, reason); + } + }); + return true; + } + } + } catch (e) { + if (!resolved) { + reject(promise, e); + } + + return true; + } + + return false; + } + + function resolve(promise, value) { + if (promise === value || !handleThenable(promise, value)) { + fulfill(promise, value); + } + } + + function fulfill(promise, value) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = value; + asyncCall(publishFulfillment, promise); + } + } + + function reject(promise, reason) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = reason; + asyncCall(publishRejection, promise); + } + } + + function publish(promise) { + promise._then = promise._then.forEach(invokeCallback); + } + + function publishFulfillment(promise) { + promise._state = FULFILLED; + publish(promise); + } + + function publishRejection(promise) { + promise._state = REJECTED; + publish(promise); + + if (!promise._handled && isNode) { + global.process.emit('unhandledRejection', promise._data, promise); + } + } + + function notifyRejectionHandled(promise) { + global.process.emit('rejectionHandled', promise); + } + /** + * @class + */ + + + function P(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('Promise resolver ' + resolver + ' is not a function'); + } + + if (this instanceof P === false) { + throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.'); + } + + this._then = []; + invokeResolver(resolver, this); + } + + P.prototype = { + constructor: P, + _state: PENDING, + _then: null, + _data: undefined, + _handled: false, + then: function then(onFulfillment, onRejection) { + var subscriber = { + owner: this, + then: new this.constructor(NOOP), + fulfilled: onFulfillment, + rejected: onRejection + }; + + if ((onRejection || onFulfillment) && !this._handled) { + this._handled = true; + + if (this._state === REJECTED && isNode) { + asyncCall(notifyRejectionHandled, this); + } + } + + if (this._state === FULFILLED || this._state === REJECTED) { + // already resolved, call callback async + asyncCall(invokeCallback, subscriber); + } else { + // subscribe + this._then.push(subscriber); + } + + return subscriber.then; + }, + catch: function _catch(onRejection) { + return this.then(null, onRejection); + } + }; + + P.all = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.all().'); + } + + return new P(function (resolve, reject) { + var results = []; + var remaining = 0; + + function resolver(index) { + remaining++; + return function (value) { + results[index] = value; + + if (! --remaining) { + resolve(results); + } + }; + } + + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolver(i), reject); + } else { + results[i] = promise; + } + } + + if (!remaining) { + resolve(results); + } + }); + }; + + P.race = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.race().'); + } + + return new P(function (resolve, reject) { + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + }); + }; + + P.resolve = function (value) { + if (value && _typeof(value) === 'object' && value.constructor === P) { + return value; + } + + return new P(function (resolve) { + resolve(value); + }); + }; + + P.reject = function (reason) { + return new P(function (resolve, reject) { + reject(reason); + }); + }; + + var picked = typeof Promise === 'function' ? Promise : P; + + var d = UNITS_IN_GRID; + var meaninglessTransform = { + size: 16, + x: 0, + y: 0, + rotate: 0, + flipX: false, + flipY: false + }; + + function isReserved(name) { + return ~RESERVED_CLASSES.indexOf(name); + } + + function bunker(fn) { + try { + fn(); + } catch (e) { + if (!PRODUCTION) { + throw e; + } + } + } + function insertCss(css) { + if (!css || !IS_DOM) { + return; + } + + var style = DOCUMENT.createElement('style'); + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + var headChildren = DOCUMENT.head.childNodes; + var beforeChild = null; + + for (var i = headChildren.length - 1; i > -1; i--) { + var child = headChildren[i]; + var tagName = (child.tagName || '').toUpperCase(); + + if (['STYLE', 'LINK'].indexOf(tagName) > -1) { + beforeChild = child; + } + } + + DOCUMENT.head.insertBefore(style, beforeChild); + return css; + } + var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + function nextUniqueId() { + var size = 12; + var id = ''; + + while (size-- > 0) { + id += idPool[Math.random() * 62 | 0]; + } + + return id; + } + function toArray(obj) { + var array = []; + + for (var i = (obj || []).length >>> 0; i--;) { + array[i] = obj[i]; + } + + return array; + } + function classArray(node) { + if (node.classList) { + return toArray(node.classList); + } else { + return (node.getAttribute('class') || '').split(' ').filter(function (i) { + return i; + }); + } + } + function getIconName(familyPrefix, cls) { + var parts = cls.split('-'); + var prefix = parts[0]; + var iconName = parts.slice(1).join('-'); + + if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) { + return iconName; + } else { + return null; + } + } + function htmlEscape(str) { + return "".concat(str).replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>'); + } + function joinAttributes(attributes) { + return Object.keys(attributes || {}).reduce(function (acc, attributeName) { + return acc + "".concat(attributeName, "=\"").concat(htmlEscape(attributes[attributeName]), "\" "); + }, '').trim(); + } + function joinStyles(styles) { + return Object.keys(styles || {}).reduce(function (acc, styleName) { + return acc + "".concat(styleName, ": ").concat(styles[styleName], ";"); + }, ''); + } + function transformIsMeaningful(transform) { + return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY; + } + function transformForSvg(_ref) { + var transform = _ref.transform, + containerWidth = _ref.containerWidth, + iconWidth = _ref.iconWidth; + var outer = { + transform: "translate(".concat(containerWidth / 2, " 256)") + }; + var innerTranslate = "translate(".concat(transform.x * 32, ", ").concat(transform.y * 32, ") "); + var innerScale = "scale(".concat(transform.size / 16 * (transform.flipX ? -1 : 1), ", ").concat(transform.size / 16 * (transform.flipY ? -1 : 1), ") "); + var innerRotate = "rotate(".concat(transform.rotate, " 0 0)"); + var inner = { + transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) + }; + var path = { + transform: "translate(".concat(iconWidth / 2 * -1, " -256)") + }; + return { + outer: outer, + inner: inner, + path: path + }; + } + function transformForCss(_ref2) { + var transform = _ref2.transform, + _ref2$width = _ref2.width, + width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width, + _ref2$height = _ref2.height, + height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height, + _ref2$startCentered = _ref2.startCentered, + startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered; + var val = ''; + + if (startCentered && IS_IE) { + val += "translate(".concat(transform.x / d - width / 2, "em, ").concat(transform.y / d - height / 2, "em) "); + } else if (startCentered) { + val += "translate(calc(-50% + ".concat(transform.x / d, "em), calc(-50% + ").concat(transform.y / d, "em)) "); + } else { + val += "translate(".concat(transform.x / d, "em, ").concat(transform.y / d, "em) "); + } + + val += "scale(".concat(transform.size / d * (transform.flipX ? -1 : 1), ", ").concat(transform.size / d * (transform.flipY ? -1 : 1), ") "); + val += "rotate(".concat(transform.rotate, "deg) "); + return val; + } + + var ALL_SPACE = { + x: 0, + y: 0, + width: '100%', + height: '100%' + }; + + function fillBlack(abstract) { + var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (abstract.attributes && (abstract.attributes.fill || force)) { + abstract.attributes.fill = 'black'; + } + + return abstract; + } + + function deGroup(abstract) { + if (abstract.tag === 'g') { + return abstract.children; + } else { + return [abstract]; + } + } + + function makeIconMasking (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + mask = _ref.mask, + explicitMaskId = _ref.maskId, + transform = _ref.transform; + var mainWidth = main.width, + mainPath = main.icon; + var maskWidth = mask.width, + maskPath = mask.icon; + var trans = transformForSvg({ + transform: transform, + containerWidth: maskWidth, + iconWidth: mainWidth + }); + var maskRect = { + tag: 'rect', + attributes: _objectSpread({}, ALL_SPACE, { + fill: 'white' + }) + }; + var maskInnerGroupChildrenMixin = mainPath.children ? { + children: mainPath.children.map(fillBlack) + } : {}; + var maskInnerGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [fillBlack(_objectSpread({ + tag: mainPath.tag, + attributes: _objectSpread({}, mainPath.attributes, trans.path) + }, maskInnerGroupChildrenMixin))] + }; + var maskOuterGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [maskInnerGroup] + }; + var maskId = "mask-".concat(explicitMaskId || nextUniqueId()); + var clipId = "clip-".concat(explicitMaskId || nextUniqueId()); + var maskTag = { + tag: 'mask', + attributes: _objectSpread({}, ALL_SPACE, { + id: maskId, + maskUnits: 'userSpaceOnUse', + maskContentUnits: 'userSpaceOnUse' + }), + children: [maskRect, maskOuterGroup] + }; + var defs = { + tag: 'defs', + children: [{ + tag: 'clipPath', + attributes: { + id: clipId + }, + children: deGroup(maskPath) + }, maskTag] + }; + children.push(defs, { + tag: 'rect', + attributes: _objectSpread({ + fill: 'currentColor', + 'clip-path': "url(#".concat(clipId, ")"), + mask: "url(#".concat(maskId, ")") + }, ALL_SPACE) + }); + return { + children: children, + attributes: attributes + }; + } + + function makeIconStandard (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + transform = _ref.transform, + styles = _ref.styles; + var styleString = joinStyles(styles); + + if (styleString.length > 0) { + attributes['style'] = styleString; + } + + if (transformIsMeaningful(transform)) { + var trans = transformForSvg({ + transform: transform, + containerWidth: main.width, + iconWidth: main.width + }); + children.push({ + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [{ + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [{ + tag: main.icon.tag, + children: main.icon.children, + attributes: _objectSpread({}, main.icon.attributes, trans.path) + }] + }] + }); + } else { + children.push(main.icon); + } + + return { + children: children, + attributes: attributes + }; + } + + function asIcon (_ref) { + var children = _ref.children, + main = _ref.main, + mask = _ref.mask, + attributes = _ref.attributes, + styles = _ref.styles, + transform = _ref.transform; + + if (transformIsMeaningful(transform) && main.found && !mask.found) { + var width = main.width, + height = main.height; + var offset = { + x: width / height / 2, + y: 0.5 + }; + attributes['style'] = joinStyles(_objectSpread({}, styles, { + 'transform-origin': "".concat(offset.x + transform.x / 16, "em ").concat(offset.y + transform.y / 16, "em") + })); + } + + return [{ + tag: 'svg', + attributes: attributes, + children: children + }]; + } + + function asSymbol (_ref) { + var prefix = _ref.prefix, + iconName = _ref.iconName, + children = _ref.children, + attributes = _ref.attributes, + symbol = _ref.symbol; + var id = symbol === true ? "".concat(prefix, "-").concat(config.familyPrefix, "-").concat(iconName) : symbol; + return [{ + tag: 'svg', + attributes: { + style: 'display: none;' + }, + children: [{ + tag: 'symbol', + attributes: _objectSpread({}, attributes, { + id: id + }), + children: children + }] + }]; + } + + function makeInlineSvgAbstract(params) { + var _params$icons = params.icons, + main = _params$icons.main, + mask = _params$icons.mask, + prefix = params.prefix, + iconName = params.iconName, + transform = params.transform, + symbol = params.symbol, + title = params.title, + maskId = params.maskId, + titleId = params.titleId, + extra = params.extra, + _params$watchable = params.watchable, + watchable = _params$watchable === void 0 ? false : _params$watchable; + + var _ref = mask.found ? mask : main, + width = _ref.width, + height = _ref.height; + + var widthClass = "fa-w-".concat(Math.ceil(width / height * 16)); + var attrClass = [config.replacementClass, iconName ? "".concat(config.familyPrefix, "-").concat(iconName) : '', widthClass].filter(function (c) { + return extra.classes.indexOf(c) === -1; + }).concat(extra.classes).join(' '); + var content = { + children: [], + attributes: _objectSpread({}, extra.attributes, { + 'data-prefix': prefix, + 'data-icon': iconName, + 'class': attrClass, + 'role': extra.attributes.role || 'img', + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': "0 0 ".concat(width, " ").concat(height) + }) + }; + + if (watchable) { + content.attributes[DATA_FA_I2SVG] = ''; + } + + if (title) content.children.push({ + tag: 'title', + attributes: { + id: content.attributes['aria-labelledby'] || "title-".concat(titleId || nextUniqueId()) + }, + children: [title] + }); + + var args = _objectSpread({}, content, { + prefix: prefix, + iconName: iconName, + main: main, + mask: mask, + maskId: maskId, + transform: transform, + symbol: symbol, + styles: extra.styles + }); + + var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args), + children = _ref2.children, + attributes = _ref2.attributes; + + args.children = children; + args.attributes = attributes; + + if (symbol) { + return asSymbol(args); + } else { + return asIcon(args); + } + } + function makeLayersTextAbstract(params) { + var content = params.content, + width = params.width, + height = params.height, + transform = params.transform, + title = params.title, + extra = params.extra, + _params$watchable2 = params.watchable, + watchable = _params$watchable2 === void 0 ? false : _params$watchable2; + + var attributes = _objectSpread({}, extra.attributes, title ? { + 'title': title + } : {}, { + 'class': extra.classes.join(' ') + }); + + if (watchable) { + attributes[DATA_FA_I2SVG] = ''; + } + + var styles = _objectSpread({}, extra.styles); + + if (transformIsMeaningful(transform)) { + styles['transform'] = transformForCss({ + transform: transform, + startCentered: true, + width: width, + height: height + }); + styles['-webkit-transform'] = styles['transform']; + } + + var styleString = joinStyles(styles); + + if (styleString.length > 0) { + attributes['style'] = styleString; + } + + var val = []; + val.push({ + tag: 'span', + attributes: attributes, + children: [content] + }); + + if (title) { + val.push({ + tag: 'span', + attributes: { + class: 'sr-only' + }, + children: [title] + }); + } + + return val; + } + function makeLayersCounterAbstract(params) { + var content = params.content, + title = params.title, + extra = params.extra; + + var attributes = _objectSpread({}, extra.attributes, title ? { + 'title': title + } : {}, { + 'class': extra.classes.join(' ') + }); + + var styleString = joinStyles(extra.styles); + + if (styleString.length > 0) { + attributes['style'] = styleString; + } + + var val = []; + val.push({ + tag: 'span', + attributes: attributes, + children: [content] + }); + + if (title) { + val.push({ + tag: 'span', + attributes: { + class: 'sr-only' + }, + children: [title] + }); + } + + return val; + } + + var noop$1 = function noop() {}; + + var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { + mark: noop$1, + measure: noop$1 + }; + var preamble = "FA \"5.13.0\""; + + var begin = function begin(name) { + p.mark("".concat(preamble, " ").concat(name, " begins")); + return function () { + return end(name); + }; + }; + + var end = function end(name) { + p.mark("".concat(preamble, " ").concat(name, " ends")); + p.measure("".concat(preamble, " ").concat(name), "".concat(preamble, " ").concat(name, " begins"), "".concat(preamble, " ").concat(name, " ends")); + }; + + var perf = { + begin: begin, + end: end + }; + + /** + * Internal helper to bind a function known to have 4 arguments + * to a given context. + */ + + var bindInternal4 = function bindInternal4(func, thisContext) { + return function (a, b, c, d) { + return func.call(thisContext, a, b, c, d); + }; + }; + + /** + * # Reduce + * + * A fast object `.reduce()` implementation. + * + * @param {Object} subject The object to reduce over. + * @param {Function} fn The reducer function. + * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0]. + * @param {Object} thisContext The context for the reducer. + * @return {mixed} The final result. + */ + + + var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) { + var keys = Object.keys(subject), + length = keys.length, + iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, + i, + key, + result; + + if (initialValue === undefined) { + i = 1; + result = subject[keys[0]]; + } else { + i = 0; + result = initialValue; + } + + for (; i < length; i++) { + key = keys[i]; + result = iterator(result, subject[key], key, subject); + } + + return result; + }; + + function toHex(unicode) { + var result = ''; + + for (var i = 0; i < unicode.length; i++) { + var hex = unicode.charCodeAt(i).toString(16); + result += ('000' + hex).slice(-4); + } + + return result; + } + + function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } + } + + var styles = namespace.styles, + shims = namespace.shims; + var _byUnicode = {}; + var _byLigature = {}; + var _byOldName = {}; + var build = function build() { + var lookup = function lookup(reducer) { + return reduce(styles, function (o, style, prefix) { + o[prefix] = reduce(style, reducer, {}); + return o; + }, {}); + }; + + _byUnicode = lookup(function (acc, icon, iconName) { + if (icon[3]) { + acc[icon[3]] = iconName; + } + + return acc; + }); + _byLigature = lookup(function (acc, icon, iconName) { + var ligatures = icon[2]; + acc[iconName] = iconName; + ligatures.forEach(function (ligature) { + acc[ligature] = iconName; + }); + return acc; + }); + var hasRegular = 'far' in styles; + _byOldName = reduce(shims, function (acc, shim) { + var oldName = shim[0]; + var prefix = shim[1]; + var iconName = shim[2]; + + if (prefix === 'far' && !hasRegular) { + prefix = 'fas'; + } + + acc[oldName] = { + prefix: prefix, + iconName: iconName + }; + return acc; + }, {}); + }; + build(); + function byUnicode(prefix, unicode) { + return (_byUnicode[prefix] || {})[unicode]; + } + function byLigature(prefix, ligature) { + return (_byLigature[prefix] || {})[ligature]; + } + function byOldName(name) { + return _byOldName[name] || { + prefix: null, + iconName: null + }; + } + + var styles$1 = namespace.styles; + var emptyCanonicalIcon = function emptyCanonicalIcon() { + return { + prefix: null, + iconName: null, + rest: [] + }; + }; + function getCanonicalIcon(values) { + return values.reduce(function (acc, cls) { + var iconName = getIconName(config.familyPrefix, cls); + + if (styles$1[cls]) { + acc.prefix = cls; + } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fad', 'fab', 'fa'].indexOf(cls) > -1) { + acc.prefix = cls; + } else if (iconName) { + var shim = acc.prefix === 'fa' ? byOldName(iconName) : {}; + acc.iconName = shim.iconName || iconName; + acc.prefix = shim.prefix || acc.prefix; + } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) { + acc.rest.push(cls); + } + + return acc; + }, emptyCanonicalIcon()); + } + function iconFromMapping(mapping, prefix, iconName) { + if (mapping && mapping[prefix] && mapping[prefix][iconName]) { + return { + prefix: prefix, + iconName: iconName, + icon: mapping[prefix][iconName] + }; + } + } + + function toHtml(abstractNodes) { + var tag = abstractNodes.tag, + _abstractNodes$attrib = abstractNodes.attributes, + attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib, + _abstractNodes$childr = abstractNodes.children, + children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr; + + if (typeof abstractNodes === 'string') { + return htmlEscape(abstractNodes); + } else { + return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(''), ""); + } + } + + var noop$2 = function noop() {}; + + function isWatched(node) { + var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null; + return typeof i2svg === 'string'; + } + + function getMutator() { + if (config.autoReplaceSvg === true) { + return mutators.replace; + } + + var mutator = mutators[config.autoReplaceSvg]; + return mutator || mutators.replace; + } + + var mutators = { + replace: function replace(mutation) { + var node = mutation[0]; + var abstract = mutation[1]; + var newOuterHTML = abstract.map(function (a) { + return toHtml(a); + }).join('\n'); + + if (node.parentNode && node.outerHTML) { + node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? "") : ''); + } else if (node.parentNode) { + var newNode = document.createElement('span'); + node.parentNode.replaceChild(newNode, node); + newNode.outerHTML = newOuterHTML; + } + }, + nest: function nest(mutation) { + var node = mutation[0]; + var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it. + // Short-circuit to the standard replacement + + if (~classArray(node).indexOf(config.replacementClass)) { + return mutators.replace(mutation); + } + + var forSvg = new RegExp("".concat(config.familyPrefix, "-.*")); + delete abstract[0].attributes.style; + delete abstract[0].attributes.id; + var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) { + if (cls === config.replacementClass || cls.match(forSvg)) { + acc.toSvg.push(cls); + } else { + acc.toNode.push(cls); + } + + return acc; + }, { + toNode: [], + toSvg: [] + }); + abstract[0].attributes.class = splitClasses.toSvg.join(' '); + var newInnerHTML = abstract.map(function (a) { + return toHtml(a); + }).join('\n'); + node.setAttribute('class', splitClasses.toNode.join(' ')); + node.setAttribute(DATA_FA_I2SVG, ''); + node.innerHTML = newInnerHTML; + } + }; + + function performOperationSync(op) { + op(); + } + + function perform(mutations, callback) { + var callbackFunction = typeof callback === 'function' ? callback : noop$2; + + if (mutations.length === 0) { + callbackFunction(); + } else { + var frame = performOperationSync; + + if (config.mutateApproach === MUTATION_APPROACH_ASYNC) { + frame = WINDOW.requestAnimationFrame || performOperationSync; + } + + frame(function () { + var mutator = getMutator(); + var mark = perf.begin('mutate'); + mutations.map(mutator); + mark(); + callbackFunction(); + }); + } + } + var disabled = false; + function disableObservation() { + disabled = true; + } + function enableObservation() { + disabled = false; + } + var mo = null; + function observe(options) { + if (!MUTATION_OBSERVER) { + return; + } + + if (!config.observeMutations) { + return; + } + + var treeCallback = options.treeCallback, + nodeCallback = options.nodeCallback, + pseudoElementsCallback = options.pseudoElementsCallback, + _options$observeMutat = options.observeMutationsRoot, + observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat; + mo = new MUTATION_OBSERVER(function (objects) { + if (disabled) return; + toArray(objects).forEach(function (mutationRecord) { + if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) { + if (config.searchPseudoElements) { + pseudoElementsCallback(mutationRecord.target); + } + + treeCallback(mutationRecord.target); + } + + if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) { + pseudoElementsCallback(mutationRecord.target.parentNode); + } + + if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) { + if (mutationRecord.attributeName === 'class') { + var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)), + prefix = _getCanonicalIcon.prefix, + iconName = _getCanonicalIcon.iconName; + + if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix); + if (iconName) mutationRecord.target.setAttribute('data-icon', iconName); + } else { + nodeCallback(mutationRecord.target); + } + } + }); + }); + if (!IS_DOM) return; + mo.observe(observeMutationsRoot, { + childList: true, + attributes: true, + characterData: true, + subtree: true + }); + } + function disconnect() { + if (!mo) return; + mo.disconnect(); + } + + function styleParser (node) { + var style = node.getAttribute('style'); + var val = []; + + if (style) { + val = style.split(';').reduce(function (acc, style) { + var styles = style.split(':'); + var prop = styles[0]; + var value = styles.slice(1); + + if (prop && value.length > 0) { + acc[prop] = value.join(':').trim(); + } + + return acc; + }, {}); + } + + return val; + } + + function classParser (node) { + var existingPrefix = node.getAttribute('data-prefix'); + var existingIconName = node.getAttribute('data-icon'); + var innerText = node.innerText !== undefined ? node.innerText.trim() : ''; + var val = getCanonicalIcon(classArray(node)); + + if (existingPrefix && existingIconName) { + val.prefix = existingPrefix; + val.iconName = existingIconName; + } + + if (val.prefix && innerText.length > 1) { + val.iconName = byLigature(val.prefix, node.innerText); + } else if (val.prefix && innerText.length === 1) { + val.iconName = byUnicode(val.prefix, toHex(node.innerText)); + } + + return val; + } + + var parseTransformString = function parseTransformString(transformString) { + var transform = { + size: 16, + x: 0, + y: 0, + flipX: false, + flipY: false, + rotate: 0 + }; + + if (!transformString) { + return transform; + } else { + return transformString.toLowerCase().split(' ').reduce(function (acc, n) { + var parts = n.toLowerCase().split('-'); + var first = parts[0]; + var rest = parts.slice(1).join('-'); + + if (first && rest === 'h') { + acc.flipX = true; + return acc; + } + + if (first && rest === 'v') { + acc.flipY = true; + return acc; + } + + rest = parseFloat(rest); + + if (isNaN(rest)) { + return acc; + } + + switch (first) { + case 'grow': + acc.size = acc.size + rest; + break; + + case 'shrink': + acc.size = acc.size - rest; + break; + + case 'left': + acc.x = acc.x - rest; + break; + + case 'right': + acc.x = acc.x + rest; + break; + + case 'up': + acc.y = acc.y - rest; + break; + + case 'down': + acc.y = acc.y + rest; + break; + + case 'rotate': + acc.rotate = acc.rotate + rest; + break; + } + + return acc; + }, transform); + } + }; + function transformParser (node) { + return parseTransformString(node.getAttribute('data-fa-transform')); + } + + function symbolParser (node) { + var symbol = node.getAttribute('data-fa-symbol'); + return symbol === null ? false : symbol === '' ? true : symbol; + } + + function attributesParser (node) { + var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) { + if (acc.name !== 'class' && acc.name !== 'style') { + acc[attr.name] = attr.value; + } + + return acc; + }, {}); + var title = node.getAttribute('title'); + var titleId = node.getAttribute('data-fa-title-id'); + + if (config.autoA11y) { + if (title) { + extraAttributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + extraAttributes['aria-hidden'] = 'true'; + extraAttributes['focusable'] = 'false'; + } + } + + return extraAttributes; + } + + function maskParser (node) { + var mask = node.getAttribute('data-fa-mask'); + + if (!mask) { + return emptyCanonicalIcon(); + } else { + return getCanonicalIcon(mask.split(' ').map(function (i) { + return i.trim(); + })); + } + } + + function blankMeta() { + return { + iconName: null, + title: null, + titleId: null, + prefix: null, + transform: meaninglessTransform, + symbol: false, + mask: null, + maskId: null, + extra: { + classes: [], + styles: {}, + attributes: {} + } + }; + } + function parseMeta(node) { + var _classParser = classParser(node), + iconName = _classParser.iconName, + prefix = _classParser.prefix, + extraClasses = _classParser.rest; + + var extraStyles = styleParser(node); + var transform = transformParser(node); + var symbol = symbolParser(node); + var extraAttributes = attributesParser(node); + var mask = maskParser(node); + return { + iconName: iconName, + title: node.getAttribute('title'), + titleId: node.getAttribute('data-fa-title-id'), + prefix: prefix, + transform: transform, + symbol: symbol, + mask: mask, + maskId: node.getAttribute('data-fa-mask-id'), + extra: { + classes: extraClasses, + styles: extraStyles, + attributes: extraAttributes + } + }; + } + + function MissingIcon(error) { + this.name = 'MissingIcon'; + this.message = error || 'Icon unavailable'; + this.stack = new Error().stack; + } + MissingIcon.prototype = Object.create(Error.prototype); + MissingIcon.prototype.constructor = MissingIcon; + + var FILL = { + fill: 'currentColor' + }; + var ANIMATION_BASE = { + attributeType: 'XML', + repeatCount: 'indefinite', + dur: '2s' + }; + var RING = { + tag: 'path', + attributes: _objectSpread({}, FILL, { + d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z' + }) + }; + + var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, { + attributeName: 'opacity' + }); + + var DOT = { + tag: 'circle', + attributes: _objectSpread({}, FILL, { + cx: '256', + cy: '364', + r: '28' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, ANIMATION_BASE, { + attributeName: 'r', + values: '28;14;28;28;14;28;' + }) + }, { + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;1;1;0;1;' + }) + }] + }; + var QUESTION = { + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '1', + d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;0;0;0;1;' + }) + }] + }; + var EXCLAMATION = { + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '0', + d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '0;0;1;1;0;0;' + }) + }] + }; + var missing = { + tag: 'g', + children: [RING, DOT, QUESTION, EXCLAMATION] + }; + + var styles$2 = namespace.styles; + function asFoundIcon(icon) { + var width = icon[0]; + var height = icon[1]; + + var _icon$slice = icon.slice(4), + _icon$slice2 = _slicedToArray(_icon$slice, 1), + vectorData = _icon$slice2[0]; + + var element = null; + + if (Array.isArray(vectorData)) { + element = { + tag: 'g', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.GROUP) + }, + children: [{ + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY), + fill: 'currentColor', + d: vectorData[0] + } + }, { + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY), + fill: 'currentColor', + d: vectorData[1] + } + }] + }; + } else { + element = { + tag: 'path', + attributes: { + fill: 'currentColor', + d: vectorData + } + }; + } + + return { + found: true, + width: width, + height: height, + icon: element + }; + } + function findIcon(iconName, prefix) { + return new picked(function (resolve, reject) { + var val = { + found: false, + width: 512, + height: 512, + icon: missing + }; + + if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) { + var icon = styles$2[prefix][iconName]; + return resolve(asFoundIcon(icon)); + } + + var headers = {}; + + if (_typeof(WINDOW.FontAwesomeKitConfig) === 'object' && typeof window.FontAwesomeKitConfig.token === 'string') { + headers['fa-kit-token'] = WINDOW.FontAwesomeKitConfig.token; + } + + if (iconName && prefix && !config.showMissingIcons) { + reject(new MissingIcon("Icon is missing for prefix ".concat(prefix, " with icon name ").concat(iconName))); + } else { + resolve(val); + } + }); + } + + var styles$3 = namespace.styles; + + function generateSvgReplacementMutation(node, nodeMeta) { + var iconName = nodeMeta.iconName, + title = nodeMeta.title, + titleId = nodeMeta.titleId, + prefix = nodeMeta.prefix, + transform = nodeMeta.transform, + symbol = nodeMeta.symbol, + mask = nodeMeta.mask, + maskId = nodeMeta.maskId, + extra = nodeMeta.extra; + return new picked(function (resolve, reject) { + picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + main = _ref2[0], + mask = _ref2[1]; + + resolve([node, makeInlineSvgAbstract({ + icons: { + main: main, + mask: mask + }, + prefix: prefix, + iconName: iconName, + transform: transform, + symbol: symbol, + mask: mask, + maskId: maskId, + title: title, + titleId: titleId, + extra: extra, + watchable: true + })]); + }); + }); + } + + function generateLayersText(node, nodeMeta) { + var title = nodeMeta.title, + transform = nodeMeta.transform, + extra = nodeMeta.extra; + var width = null; + var height = null; + + if (IS_IE) { + var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10); + var boundingClientRect = node.getBoundingClientRect(); + width = boundingClientRect.width / computedFontSize; + height = boundingClientRect.height / computedFontSize; + } + + if (config.autoA11y && !title) { + extra.attributes['aria-hidden'] = 'true'; + } + + return picked.resolve([node, makeLayersTextAbstract({ + content: node.innerHTML, + width: width, + height: height, + transform: transform, + title: title, + extra: extra, + watchable: true + })]); + } + + function generateMutation(node) { + var nodeMeta = parseMeta(node); + + if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) { + return generateLayersText(node, nodeMeta); + } else { + return generateSvgReplacementMutation(node, nodeMeta); + } + } + + function onTree(root) { + var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + if (!IS_DOM) return; + var htmlClassList = DOCUMENT.documentElement.classList; + + var hclAdd = function hclAdd(suffix) { + return htmlClassList.add("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); + }; + + var hclRemove = function hclRemove(suffix) { + return htmlClassList.remove("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); + }; + + var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3); + var prefixesDomQuery = [".".concat(LAYERS_TEXT_CLASSNAME, ":not([").concat(DATA_FA_I2SVG, "])")].concat(prefixes.map(function (p) { + return ".".concat(p, ":not([").concat(DATA_FA_I2SVG, "])"); + })).join(', '); + + if (prefixesDomQuery.length === 0) { + return; + } + + var candidates = []; + + try { + candidates = toArray(root.querySelectorAll(prefixesDomQuery)); + } catch (e) {// noop + } + + if (candidates.length > 0) { + hclAdd('pending'); + hclRemove('complete'); + } else { + return; + } + + var mark = perf.begin('onTree'); + var mutations = candidates.reduce(function (acc, node) { + try { + var mutation = generateMutation(node); + + if (mutation) { + acc.push(mutation); + } + } catch (e) { + if (!PRODUCTION) { + if (e instanceof MissingIcon) { + console.error(e); + } + } + } + + return acc; + }, []); + return new picked(function (resolve, reject) { + picked.all(mutations).then(function (resolvedMutations) { + perform(resolvedMutations, function () { + hclAdd('active'); + hclAdd('complete'); + hclRemove('pending'); + if (typeof callback === 'function') callback(); + mark(); + resolve(); + }); + }).catch(function () { + mark(); + reject(); + }); + }); + } + function onNode(node) { + var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + generateMutation(node).then(function (mutation) { + if (mutation) { + perform([mutation], callback); + } + }); + } + + function replaceForPosition(node, position) { + var pendingAttribute = "".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-')); + return new picked(function (resolve, reject) { + if (node.getAttribute(pendingAttribute) !== null) { + // This node is already being processed + return resolve(); + } + + var children = toArray(node.children); + var alreadyProcessedPseudoElement = children.filter(function (c) { + return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position; + })[0]; + var styles = WINDOW.getComputedStyle(node, position); + var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN); + var fontWeight = styles.getPropertyValue('font-weight'); + var content = styles.getPropertyValue('content'); + + if (alreadyProcessedPseudoElement && !fontFamily) { + // If we've already processed it but the current computed style does not result in a font-family, + // that probably means that a class name that was previously present to make the icon has been + // removed. So we now should delete the icon. + node.removeChild(alreadyProcessedPseudoElement); + return resolve(); + } else if (fontFamily && content !== 'none' && content !== '') { + var prefix = ~['Solid', 'Regular', 'Light', 'Duotone', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight]; + var hexValue = toHex(content.length === 3 ? content.substr(1, 1) : content); + var iconName = byUnicode(prefix, hexValue); + var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't + // already done so with the same prefix and iconName + + if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) { + node.setAttribute(pendingAttribute, iconIdentifier); + + if (alreadyProcessedPseudoElement) { + // Delete the old one, since we're replacing it with a new one + node.removeChild(alreadyProcessedPseudoElement); + } + + var meta = blankMeta(); + var extra = meta.extra; + extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position; + findIcon(iconName, prefix).then(function (main) { + var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, { + icons: { + main: main, + mask: emptyCanonicalIcon() + }, + prefix: prefix, + iconName: iconIdentifier, + extra: extra, + watchable: true + })); + var element = DOCUMENT.createElement('svg'); + + if (position === ':before') { + node.insertBefore(element, node.firstChild); + } else { + node.appendChild(element); + } + + element.outerHTML = abstract.map(function (a) { + return toHtml(a); + }).join('\n'); + node.removeAttribute(pendingAttribute); + resolve(); + }).catch(reject); + } else { + resolve(); + } + } else { + resolve(); + } + }); + } + + function replace(node) { + return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]); + } + + function processable(node) { + return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg'); + } + + function searchPseudoElements (root) { + if (!IS_DOM) return; + return new picked(function (resolve, reject) { + var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace); + var end = perf.begin('searchPseudoElements'); + disableObservation(); + picked.all(operations).then(function () { + end(); + enableObservation(); + resolve(); + }).catch(function () { + end(); + enableObservation(); + reject(); + }); + }); + } + + var baseStyles = "svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff}"; + + function css () { + var dfp = DEFAULT_FAMILY_PREFIX; + var drc = DEFAULT_REPLACEMENT_CLASS; + var fp = config.familyPrefix; + var rc = config.replacementClass; + var s = baseStyles; + + if (fp !== dfp || rc !== drc) { + var dPatt = new RegExp("\\.".concat(dfp, "\\-"), 'g'); + var customPropPatt = new RegExp("\\--".concat(dfp, "\\-"), 'g'); + var rPatt = new RegExp("\\.".concat(drc), 'g'); + s = s.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc)); + } + + return s; + } + + var Library = + /*#__PURE__*/ + function () { + function Library() { + _classCallCheck(this, Library); + + this.definitions = {}; + } + + _createClass(Library, [{ + key: "add", + value: function add() { + var _this = this; + + for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) { + definitions[_key] = arguments[_key]; + } + + var additions = definitions.reduce(this._pullDefinitions, {}); + Object.keys(additions).forEach(function (key) { + _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]); + defineIcons(key, additions[key]); + build(); + }); + } + }, { + key: "reset", + value: function reset() { + this.definitions = {}; + } + }, { + key: "_pullDefinitions", + value: function _pullDefinitions(additions, definition) { + var normalized = definition.prefix && definition.iconName && definition.icon ? { + 0: definition + } : definition; + Object.keys(normalized).map(function (key) { + var _normalized$key = normalized[key], + prefix = _normalized$key.prefix, + iconName = _normalized$key.iconName, + icon = _normalized$key.icon; + if (!additions[prefix]) additions[prefix] = {}; + additions[prefix][iconName] = icon; + }); + return additions; + } + }]); + + return Library; + }(); + + function ensureCss() { + if (config.autoAddCss && !_cssInserted) { + insertCss(css()); + + _cssInserted = true; + } + } + + function apiObject(val, abstractCreator) { + Object.defineProperty(val, 'abstract', { + get: abstractCreator + }); + Object.defineProperty(val, 'html', { + get: function get() { + return val.abstract.map(function (a) { + return toHtml(a); + }); + } + }); + Object.defineProperty(val, 'node', { + get: function get() { + if (!IS_DOM) return; + var container = DOCUMENT.createElement('div'); + container.innerHTML = val.html; + return container.children; + } + }); + return val; + } + + function findIconDefinition(iconLookup) { + var _iconLookup$prefix = iconLookup.prefix, + prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix, + iconName = iconLookup.iconName; + if (!iconName) return; + return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName); + } + + function resolveIcons(next) { + return function (maybeIconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); + var mask = params.mask; + + if (mask) { + mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); + } + + return next(iconDefinition, _objectSpread({}, params, { + mask: mask + })); + }; + } + + var library = new Library(); + var noAuto = function noAuto() { + config.autoReplaceSvg = false; + config.observeMutations = false; + disconnect(); + }; + var _cssInserted = false; + var dom = { + i2svg: function i2svg() { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + if (IS_DOM) { + ensureCss(); + var _params$node = params.node, + node = _params$node === void 0 ? DOCUMENT : _params$node, + _params$callback = params.callback, + callback = _params$callback === void 0 ? function () {} : _params$callback; + + if (config.searchPseudoElements) { + searchPseudoElements(node); + } + + return onTree(node, callback); + } else { + return picked.reject('Operation requires a DOM of some kind.'); + } + }, + css: css, + insertCss: function insertCss$$1() { + if (!_cssInserted) { + insertCss(css()); + + _cssInserted = true; + } + }, + watch: function watch() { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var autoReplaceSvgRoot = params.autoReplaceSvgRoot, + observeMutationsRoot = params.observeMutationsRoot; + + if (config.autoReplaceSvg === false) { + config.autoReplaceSvg = true; + } + + config.observeMutations = true; + domready(function () { + autoReplace({ + autoReplaceSvgRoot: autoReplaceSvgRoot + }); + observe({ + treeCallback: onTree, + nodeCallback: onNode, + pseudoElementsCallback: searchPseudoElements, + observeMutationsRoot: observeMutationsRoot + }); + }); + } + }; + var parse = { + transform: function transform(transformString) { + return parseTransformString(transformString); + } + }; + var icon = resolveIcons(function (iconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$transform = params.transform, + transform = _params$transform === void 0 ? meaninglessTransform : _params$transform, + _params$symbol = params.symbol, + symbol = _params$symbol === void 0 ? false : _params$symbol, + _params$mask = params.mask, + mask = _params$mask === void 0 ? null : _params$mask, + _params$maskId = params.maskId, + maskId = _params$maskId === void 0 ? null : _params$maskId, + _params$title = params.title, + title = _params$title === void 0 ? null : _params$title, + _params$titleId = params.titleId, + titleId = _params$titleId === void 0 ? null : _params$titleId, + _params$classes = params.classes, + classes = _params$classes === void 0 ? [] : _params$classes, + _params$attributes = params.attributes, + attributes = _params$attributes === void 0 ? {} : _params$attributes, + _params$styles = params.styles, + styles = _params$styles === void 0 ? {} : _params$styles; + if (!iconDefinition) return; + var prefix = iconDefinition.prefix, + iconName = iconDefinition.iconName, + icon = iconDefinition.icon; + return apiObject(_objectSpread({ + type: 'icon' + }, iconDefinition), function () { + ensureCss(); + + if (config.autoA11y) { + if (title) { + attributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + attributes['aria-hidden'] = 'true'; + attributes['focusable'] = 'false'; + } + } + + return makeInlineSvgAbstract({ + icons: { + main: asFoundIcon(icon), + mask: mask ? asFoundIcon(mask.icon) : { + found: false, + width: null, + height: null, + icon: {} + } + }, + prefix: prefix, + iconName: iconName, + transform: _objectSpread({}, meaninglessTransform, transform), + symbol: symbol, + title: title, + maskId: maskId, + titleId: titleId, + extra: { + attributes: attributes, + styles: styles, + classes: classes + } + }); + }); + }); + var text = function text(content) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$transform2 = params.transform, + transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2, + _params$title2 = params.title, + title = _params$title2 === void 0 ? null : _params$title2, + _params$classes2 = params.classes, + classes = _params$classes2 === void 0 ? [] : _params$classes2, + _params$attributes2 = params.attributes, + attributes = _params$attributes2 === void 0 ? {} : _params$attributes2, + _params$styles2 = params.styles, + styles = _params$styles2 === void 0 ? {} : _params$styles2; + return apiObject({ + type: 'text', + content: content + }, function () { + ensureCss(); + return makeLayersTextAbstract({ + content: content, + transform: _objectSpread({}, meaninglessTransform, transform), + title: title, + extra: { + attributes: attributes, + styles: styles, + classes: ["".concat(config.familyPrefix, "-layers-text")].concat(_toConsumableArray(classes)) + } + }); + }); + }; + var counter = function counter(content) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$title3 = params.title, + title = _params$title3 === void 0 ? null : _params$title3, + _params$classes3 = params.classes, + classes = _params$classes3 === void 0 ? [] : _params$classes3, + _params$attributes3 = params.attributes, + attributes = _params$attributes3 === void 0 ? {} : _params$attributes3, + _params$styles3 = params.styles, + styles = _params$styles3 === void 0 ? {} : _params$styles3; + return apiObject({ + type: 'counter', + content: content + }, function () { + ensureCss(); + return makeLayersCounterAbstract({ + content: content.toString(), + title: title, + extra: { + attributes: attributes, + styles: styles, + classes: ["".concat(config.familyPrefix, "-layers-counter")].concat(_toConsumableArray(classes)) + } + }); + }); + }; + var layer = function layer(assembler) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$classes4 = params.classes, + classes = _params$classes4 === void 0 ? [] : _params$classes4; + return apiObject({ + type: 'layer' + }, function () { + ensureCss(); + var children = []; + assembler(function (args) { + Array.isArray(args) ? args.map(function (a) { + children = children.concat(a.abstract); + }) : children = children.concat(args.abstract); + }); + return [{ + tag: 'span', + attributes: { + class: ["".concat(config.familyPrefix, "-layers")].concat(_toConsumableArray(classes)).join(' ') + }, + children: children + }]; + }); + }; + var api = { + noAuto: noAuto, + config: config, + dom: dom, + library: library, + parse: parse, + findIconDefinition: findIconDefinition, + icon: icon, + text: text, + counter: counter, + layer: layer, + toHtml: toHtml + }; + + var autoReplace = function autoReplace() { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _params$autoReplaceSv = params.autoReplaceSvgRoot, + autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv; + if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({ + node: autoReplaceSvgRoot + }); + }; + + function bootstrap() { + if (IS_BROWSER) { + if (!WINDOW.FontAwesome) { + WINDOW.FontAwesome = api; + } + + domready(function () { + autoReplace(); + observe({ + treeCallback: onTree, + nodeCallback: onNode, + pseudoElementsCallback: searchPseudoElements + }); + }); + } + + namespace.hooks = _objectSpread({}, namespace.hooks, { + addPack: function addPack(prefix, icons) { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, icons); + build(); + autoReplace(); + }, + addShims: function addShims(shims) { + var _namespace$shims; + + (_namespace$shims = namespace.shims).push.apply(_namespace$shims, _toConsumableArray(shims)); + + build(); + autoReplace(); + } + }); + } + + bunker(bootstrap); + +}()); diff --git a/docs/docs/javascripts/regular.js b/docs/docs/javascripts/regular.js new file mode 100644 index 000000000000..7ef76553cc5a --- /dev/null +++ b/docs/docs/javascripts/regular.js @@ -0,0 +1,280 @@ +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +(function () { + 'use strict'; + + var _WINDOW = {}; + var _DOCUMENT = {}; + + try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + } catch (e) {} + + var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + + var WINDOW = _WINDOW; + var DOCUMENT = _DOCUMENT; + var IS_BROWSER = !!WINDOW.document; + var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; + var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + + var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; + var PRODUCTION = function () { + try { + return "production" === 'production'; + } catch (e) { + return false; + } + }(); + + function bunker(fn) { + try { + fn(); + } catch (e) { + if (!PRODUCTION) { + throw e; + } + } + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + var w = WINDOW || {}; + if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; + if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; + if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; + if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; + var namespace = w[NAMESPACE_IDENTIFIER]; + + function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } + } + + var icons = { + "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"], + "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z"], + "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z"], + "arrow-alt-circle-down": [512, 512, [], "f358", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"], + "arrow-alt-circle-left": [512, 512, [], "f359", "M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"], + "arrow-alt-circle-right": [512, 512, [], "f35a", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"], + "arrow-alt-circle-up": [512, 512, [], "f35b", "M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"], + "bell": [448, 512, [], "f0f3", "M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"], + "bell-slash": [640, 512, [], "f1f6", "M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"], + "bookmark": [384, 512, [], "f02e", "M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z"], + "building": [448, 512, [], "f1ad", "M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"], + "calendar": [448, 512, [], "f133", "M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z"], + "calendar-alt": [448, 512, [], "f073", "M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "calendar-check": [448, 512, [], "f274", "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z"], + "calendar-minus": [448, 512, [], "f272", "M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "calendar-plus": [448, 512, [], "f271", "M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "calendar-times": [448, 512, [], "f273", "M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "caret-square-down": [448, 512, [], "f150", "M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "caret-square-left": [448, 512, [], "f191", "M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "caret-square-right": [448, 512, [], "f152", "M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "caret-square-up": [448, 512, [], "f151", "M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "chart-bar": [512, 512, [], "f080", "M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z"], + "check-circle": [512, 512, [], "f058", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"], + "check-square": [448, 512, [], "f14a", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"], + "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z"], + "clipboard": [384, 512, [], "f328", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z"], + "clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"], + "clone": [512, 512, [], "f24d", "M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"], + "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z"], + "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"], + "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z"], + "comment-dots": [512, 512, [], "f4ad", "M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"], + "comments": [576, 512, [], "f086", "M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z"], + "compass": [496, 512, [], "f14e", "M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"], + "copy": [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"], + "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z"], + "credit-card": [576, 512, [], "f09d", "M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"], + "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z"], + "dot-circle": [512, 512, [], "f192", "M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"], + "edit": [576, 512, [], "f044", "M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z"], + "envelope": [512, 512, [], "f0e0", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"], + "envelope-open": [512, 512, [], "f2b6", "M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z"], + "eye": [576, 512, [], "f06e", "M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z"], + "eye-slash": [640, 512, [], "f070", "M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z"], + "file": [384, 512, [], "f15b", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z"], + "file-alt": [384, 512, [], "f15c", "M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"], + "file-archive": [384, 512, [], "f1c6", "M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z"], + "file-audio": [384, 512, [], "f1c7", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z"], + "file-code": [384, 512, [], "f1c9", "M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z"], + "file-excel": [384, 512, [], "f1c3", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z"], + "file-image": [384, 512, [], "f1c5", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"], + "file-pdf": [384, 512, [], "f1c1", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"], + "file-powerpoint": [384, 512, [], "f1c4", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"], + "file-video": [384, 512, [], "f1c8", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z"], + "file-word": [384, 512, [], "f1c2", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z"], + "flag": [512, 512, [], "f024", "M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z"], + "flushed": [496, 512, [], "f579", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], + "folder": [512, 512, [], "f07b", "M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z"], + "folder-open": [576, 512, [], "f07c", "M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z"], + "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], + "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z"], + "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z"], + "futbol": [496, 512, [], "f1e3", "M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z"], + "gem": [576, 512, [], "f3a5", "M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"], + "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z"], + "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"], + "grin-alt": [496, 512, [], "f581", "M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z"], + "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z"], + "grin-beam-sweat": [496, 512, [], "f583", "M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"], + "grin-hearts": [496, 512, [], "f584", "M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z"], + "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z"], + "grin-squint-tears": [512, 512, [], "f586", "M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z"], + "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z"], + "grin-tears": [640, 512, [], "f588", "M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"], + "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], + "grin-tongue-squint": [496, 512, [], "f58a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z"], + "grin-tongue-wink": [496, 512, [], "f58b", "M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z"], + "grin-wink": [496, 512, [], "f58c", "M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"], + "hand-lizard": [576, 512, [], "f258", "M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z"], + "hand-paper": [448, 512, [], "f256", "M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z"], + "hand-peace": [448, 512, [], "f25b", "M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z"], + "hand-point-down": [448, 512, [], "f0a7", "M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"], + "hand-point-left": [512, 512, [], "f0a5", "M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"], + "hand-point-right": [512, 512, [], "f0a4", "M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"], + "hand-point-up": [448, 512, [], "f0a6", "M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"], + "hand-pointer": [448, 512, [], "f25a", "M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z"], + "hand-rock": [512, 512, [], "f255", "M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z"], + "hand-scissors": [512, 512, [], "f257", "M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z"], + "hand-spock": [512, 512, [], "f259", "M501.03053,116.17605c-19.39059-31.50779-51.24406-35.72849-66.31044-35.01756-14.11325-50.81051-62.0038-54.08-70.73816-54.08a74.03091,74.03091,0,0,0-72.23816,58.916l-4.64648,22.66014-13.68357-53.207c-9.09569-35.37107-46.412-64.05074-89.66-53.07223a73.89749,73.89749,0,0,0-55.121,78.94722,73.68273,73.68273,0,0,0-64.8495,94.42181l24.35933,82.19721c-38.24017-7.54492-62.79677,16.18358-68.11512,21.84764a73.6791,73.6791,0,0,0,3.19921,104.19329l91.36509,85.9765A154.164,154.164,0,0,0,220.62279,512h107.4549A127.30079,127.30079,0,0,0,452.3392,413.86139l57.623-241.96272A73.20274,73.20274,0,0,0,501.03053,116.17605Zm-37.7597,44.60544L405.64788,402.74812a79.46616,79.46616,0,0,1-77.57019,61.25972H220.62279a106.34052,106.34052,0,0,1-73.1366-28.998l-91.369-85.98041C31.34381,325.72669,66.61133,288.131,91.39644,311.5392l51.123,48.10739c5.42577,5.10937,13.48239.71679,13.48239-5.82617a246.79914,246.79914,0,0,0-10.17771-70.1523l-36.01362-121.539c-9.7324-32.88279,39.69916-47.27145,49.38664-14.625l31.3437,105.77923c5.59374,18.90428,33.78119,10.71288,28.9648-8.00781L177.06427,80.23662c-8.50389-33.1035,41.43157-45.64646,49.86515-12.83593l47.32609,184.035c4.42773,17.24218,29.16207,16.5039,32.71089-.80468l31.791-154.9706c6.81054-33.1074,57.51748-24.10741,50.11906,11.96288L360.32764,246.78924c-3.72265,18.10936,23.66793,24.63084,28.05659,6.21679L413.185,148.85962C421.1498,115.512,471.14,127.79713,463.27083,160.78149Z"], + "handshake": [640, 512, [], "f2b5", "M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z"], + "hdd": [576, 512, [], "f0a0", "M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z"], + "heart": [512, 512, [], "f004", "M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z"], + "hospital": [448, 512, [], "f0f8", "M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z"], + "hourglass": [384, 512, [], "f254", "M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z"], + "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"], + "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"], + "image": [512, 512, [], "f03e", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"], + "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z"], + "keyboard": [576, 512, [], "f11c", "M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z"], + "kiss": [496, 512, [], "f596", "M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], + "kiss-beam": [496, 512, [], "f597", "M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z"], + "kiss-wink-heart": [504, 512, [], "f598", "M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z"], + "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], + "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], + "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], + "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], + "lemon": [512, 512, [], "f094", "M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z"], + "life-ring": [512, 512, [], "f1cd", "M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"], + "lightbulb": [352, 512, [], "f0eb", "M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z"], + "list-alt": [512, 512, [], "f022", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"], + "map": [576, 512, [], "f279", "M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z"], + "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], + "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], + "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], + "minus-square": [448, 512, [], "f146", "M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "money-bill-alt": [640, 512, [], "f3d1", "M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z"], + "moon": [512, 512, [], "f186", "M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z"], + "newspaper": [576, 512, [], "f1ea", "M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z"], + "object-group": [512, 512, [], "f247", "M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z"], + "object-ungroup": [576, 512, [], "f248", "M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z"], + "paper-plane": [512, 512, [], "f1d8", "M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"], + "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z"], + "play-circle": [512, 512, [], "f144", "M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z"], + "plus-square": [448, 512, [], "f0fe", "M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], + "question-circle": [512, 512, [], "f059", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"], + "registered": [512, 512, [], "f25d", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z"], + "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z"], + "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z"], + "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z"], + "share-square": [576, 512, [], "f14d", "M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z"], + "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z"], + "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z"], + "smile-wink": [496, 512, [], "f4da", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z"], + "snowflake": [448, 512, [], "f2dc", "M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z"], + "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"], + "star": [576, 512, [], "f005", "M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"], + "star-half": [576, 512, [], "f089", "M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z"], + "sticky-note": [448, 512, [], "f249", "M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z"], + "stop-circle": [512, 512, [], "f28d", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z"], + "sun": [512, 512, [], "f185", "M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z"], + "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], + "thumbs-down": [512, 512, [], "f165", "M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z"], + "thumbs-up": [512, 512, [], "f164", "M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"], + "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"], + "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z"], + "trash-alt": [448, 512, [], "f2ed", "M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z"], + "user": [448, 512, [], "f007", "M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"], + "user-circle": [496, 512, [], "f2bd", "M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z"], + "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z"], + "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z"], + "window-minimize": [512, 512, [], "f2d1", "M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z"], + "window-restore": [512, 512, [], "f2d2", "M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z"] + }; + + bunker(function () { + defineIcons('far', icons); + }); + +}()); diff --git a/docs/docs/javascripts/solid.js b/docs/docs/javascripts/solid.js new file mode 100644 index 000000000000..41cf03361569 --- /dev/null +++ b/docs/docs/javascripts/solid.js @@ -0,0 +1,1124 @@ +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +(function () { + 'use strict'; + + var _WINDOW = {}; + var _DOCUMENT = {}; + + try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + } catch (e) {} + + var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + + var WINDOW = _WINDOW; + var DOCUMENT = _DOCUMENT; + var IS_BROWSER = !!WINDOW.document; + var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; + var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + + var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; + var PRODUCTION = function () { + try { + return "production" === 'production'; + } catch (e) { + return false; + } + }(); + + function bunker(fn) { + try { + fn(); + } catch (e) { + if (!PRODUCTION) { + throw e; + } + } + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + var w = WINDOW || {}; + if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; + if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; + if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; + if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; + var namespace = w[NAMESPACE_IDENTIFIER]; + + function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } + } + + var icons = { + "ad": [512, 512, [], "f641", "M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z"], + "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], + "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"], + "adjust": [512, 512, [], "f042", "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"], + "air-freshener": [384, 512, [], "f5d0", "M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z"], + "align-center": [448, 512, [], "f037", "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z"], + "align-justify": [448, 512, [], "f039", "M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "align-left": [448, 512, [], "f036", "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "align-right": [448, 512, [], "f038", "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z"], + "allergies": [448, 512, [], "f461", "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], + "ambulance": [640, 512, [], "f0f9", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], + "american-sign-language-interpreting": [640, 512, [], "f2a3", "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"], + "anchor": [576, 512, [], "f13d", "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"], + "angle-double-down": [320, 512, [], "f103", "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"], + "angle-double-left": [448, 512, [], "f100", "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"], + "angle-double-right": [448, 512, [], "f101", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"], + "angle-double-up": [320, 512, [], "f102", "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"], + "angle-down": [320, 512, [], "f107", "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"], + "angle-left": [256, 512, [], "f104", "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"], + "angle-right": [256, 512, [], "f105", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"], + "angle-up": [320, 512, [], "f106", "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"], + "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z"], + "ankh": [320, 512, [], "f644", "M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z"], + "apple-alt": [448, 512, [], "f5d1", "M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z"], + "archive": [512, 512, [], "f187", "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"], + "archway": [576, 512, [], "f557", "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"], + "arrow-alt-circle-down": [512, 512, [], "f358", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"], + "arrow-alt-circle-left": [512, 512, [], "f359", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"], + "arrow-alt-circle-right": [512, 512, [], "f35a", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"], + "arrow-alt-circle-up": [512, 512, [], "f35b", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"], + "arrow-circle-down": [512, 512, [], "f0ab", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"], + "arrow-circle-left": [512, 512, [], "f0a8", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"], + "arrow-circle-right": [512, 512, [], "f0a9", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"], + "arrow-circle-up": [512, 512, [], "f0aa", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"], + "arrow-down": [448, 512, [], "f063", "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"], + "arrow-left": [448, 512, [], "f060", "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"], + "arrow-right": [448, 512, [], "f061", "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"], + "arrow-up": [448, 512, [], "f062", "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"], + "arrows-alt": [512, 512, [], "f0b2", "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"], + "arrows-alt-h": [512, 512, [], "f337", "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"], + "arrows-alt-v": [256, 512, [], "f338", "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"], + "assistive-listening-systems": [512, 512, [], "f2a2", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"], + "asterisk": [512, 512, [], "f069", "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"], + "at": [512, 512, [], "f1fa", "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"], + "atlas": [448, 512, [], "f558", "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z"], + "atom": [448, 512, [], "f5d2", "M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z"], + "audio-description": [512, 512, [], "f29e", "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"], + "award": [384, 512, [], "f559", "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z"], + "baby": [384, 512, [], "f77c", "M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z"], + "baby-carriage": [512, 512, [], "f77d", "M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z"], + "backspace": [640, 512, [], "f55a", "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"], + "backward": [512, 512, [], "f04a", "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"], + "bacon": [576, 512, [], "f7e5", "M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z"], + "bahai": [512, 512, [], "f666", "M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z"], + "balance-scale": [640, 512, [], "f24e", "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "balance-scale-left": [640, 512, [], "f515", "M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z"], + "balance-scale-right": [640, 512, [], "f516", "M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z"], + "ban": [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"], + "band-aid": [640, 512, [], "f462", "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"], + "barcode": [512, 512, [], "f02a", "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"], + "bars": [448, 512, [], "f0c9", "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"], + "baseball-ball": [496, 512, [], "f433", "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"], + "basketball-ball": [496, 512, [], "f434", "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"], + "bath": [512, 512, [], "f2cd", "M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z"], + "battery-empty": [640, 512, [], "f244", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"], + "battery-full": [640, 512, [], "f240", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"], + "battery-half": [640, 512, [], "f242", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"], + "battery-quarter": [640, 512, [], "f243", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"], + "battery-three-quarters": [640, 512, [], "f241", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"], + "bed": [640, 512, [], "f236", "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"], + "beer": [448, 512, [], "f0fc", "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"], + "bell": [448, 512, [], "f0f3", "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"], + "bell-slash": [640, 512, [], "f1f6", "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"], + "bezier-curve": [640, 512, [], "f55b", "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], + "bible": [448, 512, [], "f647", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"], + "bicycle": [640, 512, [], "f206", "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"], + "biking": [640, 512, [], "f84a", "M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z"], + "binoculars": [512, 512, [], "f1e5", "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z"], + "biohazard": [576, 512, [], "f780", "M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], + "birthday-cake": [448, 512, [], "f1fd", "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"], + "blender": [512, 512, [], "f517", "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"], + "blender-phone": [576, 512, [], "f6b6", "M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "blind": [384, 512, [], "f29d", "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"], + "blog": [512, 512, [], "f781", "M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z"], + "bold": [384, 512, [], "f032", "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z"], + "bolt": [320, 512, [], "f0e7", "M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z"], + "bomb": [512, 512, [], "f1e2", "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z"], + "bone": [640, 512, [], "f5d7", "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z"], + "bong": [448, 512, [], "f55c", "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z"], + "book": [448, 512, [], "f02d", "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"], + "book-dead": [448, 512, [], "f6b7", "M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z"], + "book-medical": [448, 512, [], "f7e6", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z"], + "book-open": [576, 512, [], "f518", "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"], + "book-reader": [512, 512, [], "f5da", "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z"], + "bookmark": [384, 512, [], "f02e", "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"], + "border-all": [448, 512, [], "f84c", "M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z"], + "border-none": [448, 512, [], "f850", "M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "border-style": [448, 512, [], "f853", "M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "bowling-ball": [496, 512, [], "f436", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "box": [512, 512, [], "f466", "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"], + "box-open": [640, 512, [], "f49e", "M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z"], + "box-tissue": [512, 512, [], "f95b", "M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z"], + "boxes": [576, 512, [], "f468", "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"], + "braille": [640, 512, [], "f2a1", "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"], + "brain": [576, 512, [], "f5dc", "M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z"], + "bread-slice": [576, 512, [], "f7ec", "M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z"], + "briefcase": [512, 512, [], "f0b1", "M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z"], + "briefcase-medical": [512, 512, [], "f469", "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z"], + "broadcast-tower": [640, 512, [], "f519", "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z"], + "broom": [640, 512, [], "f51a", "M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z"], + "brush": [384, 512, [], "f55d", "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z"], + "bug": [512, 512, [], "f188", "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"], + "building": [448, 512, [], "f1ad", "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"], + "bullhorn": [576, 512, [], "f0a1", "M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z"], + "bullseye": [496, 512, [], "f140", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z"], + "burn": [384, 512, [], "f46a", "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z"], + "bus": [512, 512, [], "f207", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "bus-alt": [512, 512, [], "f55e", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "business-time": [640, 512, [], "f64a", "M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z"], + "calculator": [448, 512, [], "f1ec", "M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z"], + "calendar": [448, 512, [], "f133", "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"], + "calendar-alt": [448, 512, [], "f073", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"], + "calendar-check": [448, 512, [], "f274", "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"], + "calendar-day": [448, 512, [], "f783", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"], + "calendar-minus": [448, 512, [], "f272", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"], + "calendar-plus": [448, 512, [], "f271", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"], + "calendar-times": [448, 512, [], "f273", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"], + "calendar-week": [448, 512, [], "f784", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"], + "camera": [512, 512, [], "f030", "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"], + "camera-retro": [512, 512, [], "f083", "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"], + "campground": [640, 512, [], "f6bb", "M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z"], + "candy-cane": [512, 512, [], "f786", "M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z"], + "cannabis": [512, 512, [], "f55f", "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z"], + "capsules": [576, 512, [], "f46b", "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z"], + "car": [512, 512, [], "f1b9", "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"], + "car-alt": [480, 512, [], "f5de", "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"], + "car-battery": [512, 512, [], "f5df", "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z"], + "car-crash": [640, 512, [], "f5e1", "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z"], + "car-side": [640, 512, [], "f5e4", "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"], + "caravan": [640, 512, [], "f8ff", "M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z"], + "caret-down": [320, 512, [], "f0d7", "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"], + "caret-left": [192, 512, [], "f0d9", "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"], + "caret-right": [192, 512, [], "f0da", "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"], + "caret-square-down": [448, 512, [], "f150", "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"], + "caret-square-left": [448, 512, [], "f191", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"], + "caret-square-right": [448, 512, [], "f152", "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"], + "caret-square-up": [448, 512, [], "f151", "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"], + "caret-up": [320, 512, [], "f0d8", "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"], + "carrot": [512, 512, [], "f787", "M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z"], + "cart-arrow-down": [576, 512, [], "f218", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"], + "cart-plus": [576, 512, [], "f217", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"], + "cash-register": [512, 512, [], "f788", "M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z"], + "cat": [512, 512, [], "f6be", "M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"], + "certificate": [512, 512, [], "f0a3", "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"], + "chair": [448, 512, [], "f6c0", "M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z"], + "chalkboard": [640, 512, [], "f51b", "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "chalkboard-teacher": [640, 512, [], "f51c", "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z"], + "charging-station": [576, 512, [], "f5e7", "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"], + "chart-area": [512, 512, [], "f1fe", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"], + "chart-bar": [512, 512, [], "f080", "M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "chart-line": [512, 512, [], "f201", "M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z"], + "chart-pie": [544, 512, [], "f200", "M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z"], + "check": [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"], + "check-circle": [512, 512, [], "f058", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"], + "check-double": [512, 512, [], "f560", "M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z"], + "check-square": [448, 512, [], "f14a", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"], + "cheese": [512, 512, [], "f7ef", "M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z"], + "chess": [512, 512, [], "f439", "M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z"], + "chess-bishop": [320, 512, [], "f43a", "M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "chess-board": [512, 512, [], "f43c", "M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z"], + "chess-king": [448, 512, [], "f43f", "M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z"], + "chess-knight": [384, 512, [], "f441", "M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "chess-pawn": [320, 512, [], "f443", "M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "chess-queen": [512, 512, [], "f445", "M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z"], + "chess-rook": [384, 512, [], "f447", "M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "chevron-circle-down": [512, 512, [], "f13a", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"], + "chevron-circle-left": [512, 512, [], "f137", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"], + "chevron-circle-right": [512, 512, [], "f138", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"], + "chevron-circle-up": [512, 512, [], "f139", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"], + "chevron-down": [448, 512, [], "f078", "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"], + "chevron-left": [320, 512, [], "f053", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"], + "chevron-right": [320, 512, [], "f054", "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"], + "chevron-up": [448, 512, [], "f077", "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"], + "child": [384, 512, [], "f1ae", "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"], + "church": [640, 512, [], "f51d", "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z"], + "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"], + "circle-notch": [512, 512, [], "f1ce", "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"], + "city": [640, 512, [], "f64f", "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z"], + "clinic-medical": [576, 512, [], "f7f2", "M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z"], + "clipboard": [384, 512, [], "f328", "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"], + "clipboard-check": [384, 512, [], "f46c", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"], + "clipboard-list": [384, 512, [], "f46d", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"], + "clock": [512, 512, [], "f017", "M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z"], + "clone": [512, 512, [], "f24d", "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"], + "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"], + "cloud": [640, 512, [], "f0c2", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"], + "cloud-download-alt": [640, 512, [], "f381", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z"], + "cloud-meatball": [512, 512, [], "f73b", "M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z"], + "cloud-moon": [576, 512, [], "f6c3", "M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z"], + "cloud-moon-rain": [576, 512, [], "f73c", "M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"], + "cloud-rain": [512, 512, [], "f73d", "M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z"], + "cloud-showers-heavy": [512, 512, [], "f740", "M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z"], + "cloud-sun": [640, 512, [], "f6c4", "M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z"], + "cloud-sun-rain": [576, 512, [], "f743", "M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"], + "cloud-upload-alt": [640, 512, [], "f382", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z"], + "cocktail": [576, 512, [], "f561", "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z"], + "code": [640, 512, [], "f121", "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"], + "code-branch": [384, 512, [], "f126", "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"], + "coffee": [640, 512, [], "f0f4", "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"], + "cog": [512, 512, [], "f013", "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "cogs": [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"], + "coins": [512, 512, [], "f51e", "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z"], + "columns": [512, 512, [], "f0db", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"], + "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z"], + "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"], + "comment-dollar": [512, 512, [], "f651", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z"], + "comment-dots": [512, 512, [], "f4ad", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "comment-medical": [512, 512, [], "f7f5", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z"], + "comment-slash": [640, 512, [], "f4b3", "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"], + "comments": [576, 512, [], "f086", "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"], + "comments-dollar": [576, 512, [], "f653", "M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z"], + "compact-disc": [496, 512, [], "f51f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], + "compass": [496, 512, [], "f14e", "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z"], + "compress": [448, 512, [], "f066", "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"], + "compress-alt": [448, 512, [], "f422", "M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z"], + "compress-arrows-alt": [512, 512, [], "f78c", "M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z"], + "concierge-bell": [512, 512, [], "f562", "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "cookie": [512, 512, [], "f563", "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "cookie-bite": [512, 512, [], "f564", "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "copy": [448, 512, [], "f0c5", "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"], + "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"], + "couch": [640, 512, [], "f4b8", "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"], + "credit-card": [576, 512, [], "f09d", "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"], + "crop": [512, 512, [], "f125", "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], + "crop-alt": [512, 512, [], "f565", "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z"], + "cross": [384, 512, [], "f654", "M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"], + "crosshairs": [512, 512, [], "f05b", "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"], + "crow": [640, 512, [], "f520", "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], + "crown": [640, 512, [], "f521", "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z"], + "crutch": [512, 512, [], "f7f7", "M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z"], + "cube": [512, 512, [], "f1b2", "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"], + "cubes": [512, 512, [], "f1b3", "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"], + "cut": [448, 512, [], "f0c4", "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"], + "database": [448, 512, [], "f1c0", "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"], + "deaf": [512, 512, [], "f2a4", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"], + "democrat": [640, 512, [], "f747", "M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z"], + "desktop": [576, 512, [], "f108", "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"], + "dharmachakra": [512, 512, [], "f655", "M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z"], + "diagnoses": [640, 512, [], "f470", "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], + "dice": [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], + "dice-d20": [480, 512, [], "f6cf", "M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z"], + "dice-d6": [448, 512, [], "f6d1", "M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z"], + "dice-five": [448, 512, [], "f523", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "dice-four": [448, 512, [], "f524", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "dice-one": [448, 512, [], "f525", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "dice-six": [448, 512, [], "f526", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "dice-three": [448, 512, [], "f527", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "dice-two": [448, 512, [], "f528", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "digital-tachograph": [640, 512, [], "f566", "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z"], + "directions": [512, 512, [], "f5eb", "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"], + "disease": [512, 512, [], "f7fa", "M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z"], + "divide": [448, 512, [], "f529", "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], + "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z"], + "dna": [448, 512, [], "f471", "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z"], + "dog": [576, 512, [], "f6d3", "M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z"], + "dollar-sign": [288, 512, [], "f155", "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z"], + "dolly": [576, 512, [], "f472", "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], + "dolly-flatbed": [640, 512, [], "f474", "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], + "donate": [512, 512, [], "f4b9", "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z"], + "door-closed": [640, 512, [], "f52a", "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z"], + "door-open": [640, 512, [], "f52b", "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"], + "dot-circle": [512, 512, [], "f192", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"], + "dove": [512, 512, [], "f4ba", "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], + "download": [512, 512, [], "f019", "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"], + "drafting-compass": [512, 512, [], "f568", "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"], + "dragon": [640, 512, [], "f6d5", "M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z"], + "draw-polygon": [448, 512, [], "f5ee", "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z"], + "drum": [512, 512, [], "f569", "M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z"], + "drum-steelpan": [576, 512, [], "f56a", "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z"], + "drumstick-bite": [512, 512, [], "f6d7", "M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z"], + "dumbbell": [640, 512, [], "f44b", "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"], + "dumpster": [576, 512, [], "f793", "M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], + "dumpster-fire": [640, 512, [], "f794", "M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z"], + "dungeon": [512, 512, [], "f6d9", "M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z"], + "edit": [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"], + "egg": [384, 512, [], "f7fb", "M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z"], + "eject": [448, 512, [], "f052", "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"], + "ellipsis-h": [512, 512, [], "f141", "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"], + "ellipsis-v": [192, 512, [], "f142", "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"], + "envelope": [512, 512, [], "f0e0", "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"], + "envelope-open": [512, 512, [], "f2b6", "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"], + "envelope-open-text": [512, 512, [], "f658", "M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z"], + "envelope-square": [448, 512, [], "f199", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"], + "equals": [448, 512, [], "f52c", "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], + "eraser": [512, 512, [], "f12d", "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"], + "ethernet": [512, 512, [], "f796", "M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z"], + "euro-sign": [320, 512, [], "f153", "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"], + "exchange-alt": [512, 512, [], "f362", "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"], + "exclamation": [192, 512, [], "f12a", "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"], + "exclamation-circle": [512, 512, [], "f06a", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"], + "exclamation-triangle": [576, 512, [], "f071", "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"], + "expand": [448, 512, [], "f065", "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"], + "expand-alt": [448, 512, [], "f424", "M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z"], + "expand-arrows-alt": [448, 512, [], "f31e", "M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z"], + "external-link-alt": [512, 512, [], "f35d", "M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z"], + "external-link-square-alt": [448, 512, [], "f360", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"], + "eye": [576, 512, [], "f06e", "M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"], + "eye-dropper": [512, 512, [], "f1fb", "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z"], + "eye-slash": [640, 512, [], "f070", "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"], + "fan": [512, 512, [], "f863", "M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"], + "fast-backward": [512, 512, [], "f049", "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"], + "fast-forward": [512, 512, [], "f050", "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"], + "faucet": [512, 512, [], "f905", "M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z"], + "fax": [512, 512, [], "f1ac", "M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z"], + "feather": [512, 512, [], "f52d", "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z"], + "feather-alt": [512, 512, [], "f56b", "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"], + "female": [256, 512, [], "f182", "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"], + "fighter-jet": [640, 512, [], "f0fb", "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"], + "file": [384, 512, [], "f15b", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "file-alt": [384, 512, [], "f15c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "file-archive": [384, 512, [], "f1c6", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z"], + "file-audio": [384, 512, [], "f1c7", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "file-code": [384, 512, [], "f1c9", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"], + "file-contract": [384, 512, [], "f56c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], + "file-csv": [384, 512, [], "f6dd", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], + "file-download": [384, 512, [], "f56d", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], + "file-excel": [384, 512, [], "f1c3", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "file-export": [576, 512, [], "f56e", "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z"], + "file-image": [384, 512, [], "f1c5", "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"], + "file-import": [512, 512, [], "f56f", "M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z"], + "file-invoice": [384, 512, [], "f570", "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z"], + "file-invoice-dollar": [384, 512, [], "f571", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z"], + "file-medical": [384, 512, [], "f477", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z"], + "file-medical-alt": [448, 512, [], "f478", "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], + "file-pdf": [384, 512, [], "f1c1", "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"], + "file-powerpoint": [384, 512, [], "f1c4", "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"], + "file-prescription": [384, 512, [], "f572", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "file-signature": [576, 512, [], "f573", "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z"], + "file-upload": [384, 512, [], "f574", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], + "file-video": [384, 512, [], "f1c8", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"], + "file-word": [384, 512, [], "f1c2", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], + "fill": [512, 512, [], "f575", "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z"], + "fill-drip": [576, 512, [], "f576", "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z"], + "film": [512, 512, [], "f008", "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"], + "filter": [512, 512, [], "f0b0", "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"], + "fingerprint": [512, 512, [], "f577", "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"], + "fire": [384, 512, [], "f06d", "M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z"], + "fire-alt": [448, 512, [], "f7e4", "M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z"], + "fire-extinguisher": [448, 512, [], "f134", "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"], + "first-aid": [576, 512, [], "f479", "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], + "fish": [576, 512, [], "f578", "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"], + "fist-raised": [384, 512, [], "f6de", "M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z"], + "flag": [512, 512, [], "f024", "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"], + "flag-checkered": [512, 512, [], "f11e", "M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z"], + "flag-usa": [512, 512, [], "f74d", "M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z"], + "flask": [448, 512, [], "f0c3", "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"], + "flushed": [496, 512, [], "f579", "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z"], + "folder": [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"], + "folder-minus": [512, 512, [], "f65d", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z"], + "folder-open": [576, 512, [], "f07c", "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"], + "folder-plus": [512, 512, [], "f65e", "M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z"], + "font": [448, 512, [], "f031", "M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"], + "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], + "football-ball": [496, 512, [], "f44e", "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"], + "forward": [512, 512, [], "f04e", "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"], + "frog": [576, 512, [], "f52e", "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"], + "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z"], + "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "funnel-dollar": [640, 512, [], "f662", "M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z"], + "futbol": [512, 512, [], "f1e3", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"], + "gamepad": [640, 512, [], "f11b", "M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z"], + "gas-pump": [512, 512, [], "f52f", "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z"], + "gavel": [512, 512, [], "f0e3", "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"], + "gem": [576, 512, [], "f3a5", "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"], + "genderless": [288, 512, [], "f22d", "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"], + "ghost": [384, 512, [], "f6e2", "M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "gift": [512, 512, [], "f06b", "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z"], + "gifts": [640, 512, [], "f79c", "M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z"], + "glass-cheers": [640, 512, [], "f79f", "M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z"], + "glass-martini": [512, 512, [], "f000", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z"], + "glass-martini-alt": [512, 512, [], "f57b", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z"], + "glass-whiskey": [512, 512, [], "f7a0", "M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z"], + "glasses": [576, 512, [], "f530", "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z"], + "globe": [496, 512, [], "f0ac", "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"], + "globe-africa": [496, 512, [], "f57c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z"], + "globe-americas": [496, 512, [], "f57d", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z"], + "globe-asia": [496, 512, [], "f57e", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z"], + "globe-europe": [496, 512, [], "f7a2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z"], + "golf-ball": [416, 512, [], "f450", "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"], + "gopuram": [512, 512, [], "f664", "M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z"], + "graduation-cap": [640, 512, [], "f19d", "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z"], + "greater-than": [384, 512, [], "f531", "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z"], + "greater-than-equal": [448, 512, [], "f532", "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], + "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z"], + "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-alt": [496, 512, [], "f581", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-beam-sweat": [504, 512, [], "f583", "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-hearts": [496, 512, [], "f584", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z"], + "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-squint-tears": [512, 512, [], "f586", "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z"], + "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z"], + "grin-tears": [640, 512, [], "f588", "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], + "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"], + "grin-tongue-squint": [496, 512, [], "f58a", "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z"], + "grin-tongue-wink": [496, 512, [], "f58b", "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"], + "grin-wink": [496, 512, [], "f58c", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z"], + "grip-horizontal": [448, 512, [], "f58d", "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"], + "grip-lines": [512, 512, [], "f7a4", "M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], + "grip-lines-vertical": [256, 512, [], "f7a5", "M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z"], + "grip-vertical": [320, 512, [], "f58e", "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"], + "guitar": [512, 512, [], "f7a6", "M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z"], + "h-square": [448, 512, [], "f0fd", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"], + "hamburger": [512, 512, [], "f805", "M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z"], + "hammer": [576, 512, [], "f6e3", "M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z"], + "hamsa": [512, 512, [], "f665", "M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"], + "hand-holding": [576, 512, [], "f4bd", "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"], + "hand-holding-heart": [576, 512, [], "f4be", "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"], + "hand-holding-medical": [576, 512, [], "f95c", "M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z"], + "hand-holding-usd": [576, 512, [], "f4c0", "M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z"], + "hand-holding-water": [576, 512, [], "f4c1", "M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"], + "hand-lizard": [576, 512, [], "f258", "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"], + "hand-middle-finger": [512, 512, [], "f806", "M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z"], + "hand-paper": [448, 512, [], "f256", "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"], + "hand-peace": [448, 512, [], "f25b", "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"], + "hand-point-down": [384, 512, [], "f0a7", "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"], + "hand-point-left": [512, 512, [], "f0a5", "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"], + "hand-point-right": [512, 512, [], "f0a4", "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"], + "hand-point-up": [384, 512, [], "f0a6", "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"], + "hand-pointer": [448, 512, [], "f25a", "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"], + "hand-rock": [512, 512, [], "f255", "M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z"], + "hand-scissors": [512, 512, [], "f257", "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"], + "hand-sparkles": [640, 512, [], "f95d", "M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z"], + "hand-spock": [512, 512, [], "f259", "M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z"], + "hands": [640, 512, [], "f4c2", "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z"], + "hands-helping": [640, 512, [], "f4c4", "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z"], + "hands-wash": [576, 512, [], "f95e", "M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z"], + "handshake": [640, 512, [], "f2b5", "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"], + "handshake-alt-slash": [640, 512, [], "f95f", "M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z"], + "handshake-slash": [640, 512, [], "f960", "M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z"], + "hanukiah": [640, 512, [], "f6e6", "M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z"], + "hard-hat": [512, 512, [], "f807", "M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "hashtag": [448, 512, [], "f292", "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"], + "hat-cowboy": [640, 512, [], "f8c0", "M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z"], + "hat-cowboy-side": [640, 512, [], "f8c1", "M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z"], + "hat-wizard": [512, 512, [], "f6e8", "M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z"], + "hdd": [576, 512, [], "f0a0", "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"], + "head-side-cough": [640, 512, [], "f961", "M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z"], + "head-side-cough-slash": [640, 512, [], "f962", "M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z"], + "head-side-mask": [512, 512, [], "f963", "M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z"], + "head-side-virus": [512, 512, [], "f964", "M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z"], + "heading": [512, 512, [], "f1dc", "M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z"], + "headphones": [512, 512, [], "f025", "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"], + "headphones-alt": [512, 512, [], "f58f", "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z"], + "headset": [512, 512, [], "f590", "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z"], + "heart": [512, 512, [], "f004", "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"], + "heart-broken": [512, 512, [], "f7a9", "M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z"], + "heartbeat": [512, 512, [], "f21e", "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"], + "helicopter": [640, 512, [], "f533", "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z"], + "highlighter": [544, 512, [], "f591", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"], + "hiking": [384, 512, [], "f6ec", "M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z"], + "hippo": [640, 512, [], "f6ed", "M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"], + "history": [512, 512, [], "f1da", "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"], + "hockey-puck": [512, 512, [], "f453", "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"], + "holly-berry": [448, 512, [], "f7aa", "M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z"], + "home": [576, 512, [], "f015", "M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"], + "horse": [576, 512, [], "f6f0", "M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"], + "horse-head": [512, 512, [], "f7ab", "M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z"], + "hospital": [448, 512, [], "f0f8", "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"], + "hospital-alt": [576, 512, [], "f47d", "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"], + "hospital-symbol": [512, 512, [], "f47e", "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"], + "hospital-user": [640, 512, [], "f80d", "M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z"], + "hot-tub": [512, 512, [], "f593", "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z"], + "hotdog": [512, 512, [], "f80f", "M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z"], + "hotel": [576, 512, [], "f594", "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"], + "hourglass": [384, 512, [], "f254", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"], + "hourglass-end": [384, 512, [], "f253", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"], + "hourglass-half": [384, 512, [], "f252", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"], + "hourglass-start": [384, 512, [], "f251", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"], + "house-damage": [576, 512, [], "f6f1", "M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z"], + "house-user": [576, 512, [], "f965", "M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z"], + "hryvnia": [384, 512, [], "f6f2", "M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z"], + "i-cursor": [256, 512, [], "f246", "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"], + "ice-cream": [448, 512, [], "f810", "M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z"], + "icicles": [512, 512, [], "f7ad", "M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z"], + "icons": [512, 512, [], "f86d", "M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z"], + "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], + "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"], + "id-card-alt": [576, 512, [], "f47f", "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"], + "igloo": [576, 512, [], "f7ae", "M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z"], + "image": [512, 512, [], "f03e", "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"], + "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"], + "inbox": [576, 512, [], "f01c", "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"], + "indent": [448, 512, [], "f03c", "M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "industry": [512, 512, [], "f275", "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"], + "infinity": [640, 512, [], "f534", "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"], + "info": [192, 512, [], "f129", "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"], + "info-circle": [512, 512, [], "f05a", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"], + "italic": [320, 512, [], "f033", "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z"], + "jedi": [576, 512, [], "f669", "M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z"], + "joint": [640, 512, [], "f595", "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"], + "journal-whills": [448, 512, [], "f66a", "M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"], + "kaaba": [576, 512, [], "f66b", "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z"], + "key": [512, 512, [], "f084", "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"], + "keyboard": [576, 512, [], "f11c", "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"], + "khanda": [512, 512, [], "f66d", "M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z"], + "kiss": [496, 512, [], "f596", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "kiss-beam": [496, 512, [], "f597", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z"], + "kiss-wink-heart": [504, 512, [], "f598", "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z"], + "kiwi-bird": [576, 512, [], "f535", "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z"], + "landmark": [512, 512, [], "f66f", "M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "language": [640, 512, [], "f1ab", "M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z"], + "laptop": [640, 512, [], "f109", "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"], + "laptop-code": [640, 512, [], "f5fc", "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"], + "laptop-house": [640, 512, [], "f966", "M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z"], + "laptop-medical": [640, 512, [], "f812", "M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z"], + "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z"], + "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], + "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], + "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], + "layer-group": [512, 512, [], "f5fd", "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"], + "leaf": [576, 512, [], "f06c", "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z"], + "lemon": [512, 512, [], "f094", "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"], + "less-than": [384, 512, [], "f536", "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z"], + "less-than-equal": [448, 512, [], "f537", "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], + "level-down-alt": [320, 512, [], "f3be", "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"], + "level-up-alt": [320, 512, [], "f3bf", "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"], + "life-ring": [512, 512, [], "f1cd", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"], + "lightbulb": [352, 512, [], "f0eb", "M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"], + "link": [512, 512, [], "f0c1", "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"], + "lira-sign": [384, 512, [], "f195", "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"], + "list": [512, 512, [], "f03a", "M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "list-alt": [512, 512, [], "f022", "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"], + "list-ol": [512, 512, [], "f0cb", "M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"], + "list-ul": [512, 512, [], "f0ca", "M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "location-arrow": [512, 512, [], "f124", "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z"], + "lock": [448, 512, [], "f023", "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"], + "lock-open": [576, 512, [], "f3c1", "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"], + "long-arrow-alt-down": [256, 512, [], "f309", "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"], + "long-arrow-alt-left": [448, 512, [], "f30a", "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"], + "long-arrow-alt-right": [448, 512, [], "f30b", "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"], + "long-arrow-alt-up": [256, 512, [], "f30c", "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"], + "low-vision": [576, 512, [], "f2a8", "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"], + "luggage-cart": [640, 512, [], "f59d", "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z"], + "lungs": [640, 512, [], "f604", "M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z"], + "lungs-virus": [640, 512, [], "f967", "M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z"], + "magic": [512, 512, [], "f0d0", "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"], + "magnet": [512, 512, [], "f076", "M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z"], + "mail-bulk": [576, 512, [], "f674", "M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z"], + "male": [192, 512, [], "f183", "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"], + "map": [576, 512, [], "f279", "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z"], + "map-marked": [576, 512, [], "f59f", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"], + "map-marked-alt": [576, 512, [], "f5a0", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"], + "map-marker": [384, 512, [], "f041", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"], + "map-marker-alt": [384, 512, [], "f3c5", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"], + "map-pin": [288, 512, [], "f276", "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"], + "map-signs": [512, 512, [], "f277", "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z"], + "marker": [512, 512, [], "f5a1", "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z"], + "mars": [384, 512, [], "f222", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "mars-double": [512, 512, [], "f227", "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"], + "mars-stroke": [384, 512, [], "f229", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "mars-stroke-h": [480, 512, [], "f22b", "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"], + "mars-stroke-v": [288, 512, [], "f22a", "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"], + "mask": [640, 512, [], "f6fa", "M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z"], + "medal": [512, 512, [], "f5a2", "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"], + "medkit": [512, 512, [], "f0fa", "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"], + "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z"], + "memory": [640, 512, [], "f538", "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z"], + "menorah": [640, 512, [], "f676", "M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z"], + "mercury": [288, 512, [], "f223", "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"], + "meteor": [512, 512, [], "f753", "M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z"], + "microchip": [512, 512, [], "f2db", "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"], + "microphone": [352, 512, [], "f130", "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"], + "microphone-alt": [352, 512, [], "f3c9", "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z"], + "microphone-alt-slash": [640, 512, [], "f539", "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"], + "microphone-slash": [640, 512, [], "f131", "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"], + "microscope": [512, 512, [], "f610", "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z"], + "minus": [448, 512, [], "f068", "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], + "minus-circle": [512, 512, [], "f056", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"], + "minus-square": [448, 512, [], "f146", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"], + "mitten": [448, 512, [], "f7b5", "M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z"], + "mobile": [320, 512, [], "f10b", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "mobile-alt": [320, 512, [], "f3cd", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"], + "money-bill": [640, 512, [], "f0d6", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"], + "money-bill-alt": [640, 512, [], "f3d1", "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"], + "money-bill-wave": [640, 512, [], "f53a", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z"], + "money-bill-wave-alt": [640, 512, [], "f53b", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z"], + "money-check": [640, 512, [], "f53c", "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z"], + "money-check-alt": [640, 512, [], "f53d", "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z"], + "monument": [384, 512, [], "f5a6", "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"], + "moon": [512, 512, [], "f186", "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"], + "mortar-pestle": [512, 512, [], "f5a7", "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], + "mosque": [640, 512, [], "f678", "M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z"], + "motorcycle": [640, 512, [], "f21c", "M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z"], + "mountain": [640, 512, [], "f6fc", "M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z"], + "mouse": [384, 512, [], "f8cc", "M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z"], + "mouse-pointer": [320, 512, [], "f245", "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"], + "mug-hot": [512, 512, [], "f7b6", "M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z"], + "music": [512, 512, [], "f001", "M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z"], + "network-wired": [640, 512, [], "f6ff", "M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z"], + "neuter": [288, 512, [], "f22c", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "newspaper": [576, 512, [], "f1ea", "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"], + "not-equal": [448, 512, [], "f53e", "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z"], + "notes-medical": [384, 512, [], "f481", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z"], + "object-group": [512, 512, [], "f247", "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"], + "object-ungroup": [576, 512, [], "f248", "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"], + "oil-can": [640, 512, [], "f613", "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z"], + "om": [512, 512, [], "f679", "M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z"], + "otter": [640, 512, [], "f700", "M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z"], + "outdent": [448, 512, [], "f03b", "M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "pager": [512, 512, [], "f815", "M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z"], + "paint-brush": [512, 512, [], "f1fc", "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"], + "paint-roller": [512, 512, [], "f5aa", "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"], + "palette": [512, 512, [], "f53f", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "pallet": [640, 512, [], "f482", "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"], + "paper-plane": [512, 512, [], "f1d8", "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"], + "paperclip": [448, 512, [], "f0c6", "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"], + "parachute-box": [512, 512, [], "f4cd", "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z"], + "paragraph": [448, 512, [], "f1dd", "M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z"], + "parking": [448, 512, [], "f540", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z"], + "passport": [448, 512, [], "f5ab", "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z"], + "pastafarianism": [640, 512, [], "f67b", "M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z"], + "paste": [448, 512, [], "f0ea", "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"], + "pause": [448, 512, [], "f04c", "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"], + "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"], + "paw": [512, 512, [], "f1b0", "M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z"], + "peace": [496, 512, [], "f67c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z"], + "pen": [512, 512, [], "f304", "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"], + "pen-alt": [512, 512, [], "f305", "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z"], + "pen-fancy": [512, 512, [], "f5ac", "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z"], + "pen-nib": [512, 512, [], "f5ad", "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z"], + "pen-square": [448, 512, [], "f14b", "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"], + "pencil-alt": [512, 512, [], "f303", "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"], + "pencil-ruler": [512, 512, [], "f5ae", "M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z"], + "people-arrows": [576, 512, [], "f968", "M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z"], + "people-carry": [640, 512, [], "f4ce", "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"], + "pepper-hot": [512, 512, [], "f816", "M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z"], + "percent": [448, 512, [], "f295", "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"], + "percentage": [384, 512, [], "f541", "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z"], + "person-booth": [576, 512, [], "f756", "M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z"], + "phone": [512, 512, [], "f095", "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"], + "phone-alt": [512, 512, [], "f879", "M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z"], + "phone-slash": [640, 512, [], "f3dd", "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"], + "phone-square": [448, 512, [], "f098", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"], + "phone-square-alt": [448, 512, [], "f87b", "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z"], + "phone-volume": [384, 512, [], "f2a0", "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"], + "photo-video": [640, 512, [], "f87c", "M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z"], + "piggy-bank": [576, 512, [], "f4d3", "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z"], + "pills": [576, 512, [], "f484", "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"], + "pizza-slice": [512, 512, [], "f818", "M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"], + "place-of-worship": [640, 512, [], "f67f", "M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z"], + "plane": [576, 512, [], "f072", "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z"], + "plane-arrival": [640, 512, [], "f5af", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z"], + "plane-departure": [640, 512, [], "f5b0", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"], + "plane-slash": [640, 512, [], "f969", "M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z"], + "play": [448, 512, [], "f04b", "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"], + "play-circle": [512, 512, [], "f144", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"], + "plug": [384, 512, [], "f1e6", "M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"], + "plus": [448, 512, [], "f067", "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], + "plus-circle": [512, 512, [], "f055", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"], + "plus-square": [448, 512, [], "f0fe", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"], + "podcast": [448, 512, [], "f2ce", "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"], + "poll": [448, 512, [], "f681", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z"], + "poll-h": [448, 512, [], "f682", "M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z"], + "poo": [512, 512, [], "f2fe", "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "poo-storm": [448, 512, [], "f75a", "M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z"], + "poop": [512, 512, [], "f619", "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z"], + "portrait": [384, 512, [], "f3e0", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], + "pound-sign": [320, 512, [], "f154", "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"], + "power-off": [512, 512, [], "f011", "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"], + "pray": [384, 512, [], "f683", "M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z"], + "praying-hands": [640, 512, [], "f684", "M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z"], + "prescription": [384, 512, [], "f5b1", "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z"], + "prescription-bottle": [384, 512, [], "f485", "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z"], + "prescription-bottle-alt": [384, 512, [], "f486", "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z"], + "print": [512, 512, [], "f02f", "M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], + "procedures": [640, 512, [], "f487", "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"], + "project-diagram": [640, 512, [], "f542", "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"], + "pump-medical": [384, 512, [], "f96a", "M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z"], + "pump-soap": [384, 512, [], "f96b", "M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z"], + "puzzle-piece": [576, 512, [], "f12e", "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"], + "qrcode": [448, 512, [], "f029", "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"], + "question": [384, 512, [], "f128", "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"], + "question-circle": [512, 512, [], "f059", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"], + "quidditch": [640, 512, [], "f458", "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"], + "quote-left": [512, 512, [], "f10d", "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"], + "quote-right": [512, 512, [], "f10e", "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"], + "quran": [448, 512, [], "f687", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"], + "radiation": [496, 512, [], "f7b9", "M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z"], + "radiation-alt": [496, 512, [], "f7ba", "M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"], + "rainbow": [576, 512, [], "f75b", "M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z"], + "random": [512, 512, [], "f074", "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"], + "receipt": [384, 512, [], "f543", "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z"], + "record-vinyl": [512, 512, [], "f8d9", "M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z"], + "recycle": [512, 512, [], "f1b8", "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"], + "redo": [512, 512, [], "f01e", "M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z"], + "redo-alt": [512, 512, [], "f2f9", "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"], + "registered": [512, 512, [], "f25d", "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"], + "remove-format": [640, 512, [], "f87d", "M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z"], + "reply": [512, 512, [], "f3e5", "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"], + "reply-all": [576, 512, [], "f122", "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"], + "republican": [640, 512, [], "f75e", "M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z"], + "restroom": [640, 512, [], "f7bd", "M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z"], + "retweet": [640, 512, [], "f079", "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"], + "ribbon": [448, 512, [], "f4d6", "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z"], + "ring": [512, 512, [], "f70b", "M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z"], + "road": [576, 512, [], "f018", "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z"], + "robot": [640, 512, [], "f544", "M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"], + "rocket": [512, 512, [], "f135", "M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z"], + "route": [512, 512, [], "f4d7", "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "rss": [448, 512, [], "f09e", "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"], + "rss-square": [448, 512, [], "f143", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"], + "ruble-sign": [384, 512, [], "f158", "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"], + "ruler": [640, 512, [], "f545", "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z"], + "ruler-combined": [512, 512, [], "f546", "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], + "ruler-horizontal": [576, 512, [], "f547", "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z"], + "ruler-vertical": [256, 512, [], "f548", "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"], + "running": [416, 512, [], "f70c", "M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z"], + "rupee-sign": [320, 512, [], "f156", "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"], + "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z"], + "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z"], + "satellite": [512, 512, [], "f7bf", "M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z"], + "satellite-dish": [512, 512, [], "f7c0", "M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z"], + "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"], + "school": [640, 512, [], "f549", "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"], + "screwdriver": [512, 512, [], "f54a", "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"], + "scroll": [640, 512, [], "f70e", "M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z"], + "sd-card": [384, 512, [], "f7c2", "M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z"], + "search": [512, 512, [], "f002", "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"], + "search-dollar": [512, 512, [], "f688", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z"], + "search-location": [512, 512, [], "f689", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], + "search-minus": [512, 512, [], "f010", "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"], + "search-plus": [512, 512, [], "f00e", "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"], + "seedling": [512, 512, [], "f4d8", "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z"], + "server": [512, 512, [], "f233", "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"], + "shapes": [512, 512, [], "f61f", "M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z"], + "share": [512, 512, [], "f064", "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"], + "share-alt": [448, 512, [], "f1e0", "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"], + "share-alt-square": [448, 512, [], "f1e1", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"], + "share-square": [576, 512, [], "f14d", "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"], + "shekel-sign": [448, 512, [], "f20b", "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z"], + "shield-alt": [512, 512, [], "f3ed", "M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z"], + "shield-virus": [512, 512, [], "f96c", "M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z"], + "ship": [640, 512, [], "f21a", "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"], + "shipping-fast": [640, 512, [], "f48b", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], + "shoe-prints": [640, 512, [], "f54b", "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z"], + "shopping-bag": [448, 512, [], "f290", "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"], + "shopping-basket": [576, 512, [], "f291", "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"], + "shopping-cart": [576, 512, [], "f07a", "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"], + "shower": [512, 512, [], "f2cc", "M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z"], + "shuttle-van": [640, 512, [], "f5b6", "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z"], + "sign": [512, 512, [], "f4d9", "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z"], + "sign-in-alt": [512, 512, [], "f2f6", "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"], + "sign-language": [448, 512, [], "f2a7", "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"], + "sign-out-alt": [512, 512, [], "f2f5", "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"], + "signal": [640, 512, [], "f012", "M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"], + "signature": [640, 512, [], "f5b7", "M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z"], + "sim-card": [384, 512, [], "f7c4", "M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z"], + "sitemap": [640, 512, [], "f0e8", "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], + "skating": [448, 512, [], "f7c5", "M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z"], + "skiing": [512, 512, [], "f7c9", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z"], + "skiing-nordic": [576, 512, [], "f7ca", "M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z"], + "skull": [512, 512, [], "f54c", "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"], + "skull-crossbones": [448, 512, [], "f714", "M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z"], + "slash": [640, 512, [], "f715", "M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z"], + "sleigh": [640, 512, [], "f7cc", "M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z"], + "sliders-h": [512, 512, [], "f1de", "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"], + "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"], + "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z"], + "smile-wink": [496, 512, [], "f4da", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z"], + "smog": [640, 512, [], "f75f", "M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z"], + "smoking": [640, 512, [], "f48d", "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"], + "smoking-ban": [512, 512, [], "f54d", "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z"], + "sms": [512, 512, [], "f7cd", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z"], + "snowboarding": [512, 512, [], "f7ce", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z"], + "snowflake": [448, 512, [], "f2dc", "M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"], + "snowman": [512, 512, [], "f7d0", "M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], + "snowplow": [640, 512, [], "f7d2", "M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z"], + "soap": [512, 512, [], "f96e", "M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z"], + "socks": [512, 512, [], "f696", "M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z"], + "solar-panel": [640, 512, [], "f5ba", "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"], + "sort": [320, 512, [], "f0dc", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"], + "sort-alpha-down": [448, 512, [], "f15d", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"], + "sort-alpha-down-alt": [448, 512, [], "f881", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"], + "sort-alpha-up": [448, 512, [], "f15e", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"], + "sort-alpha-up-alt": [448, 512, [], "f882", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"], + "sort-amount-down": [512, 512, [], "f160", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "sort-amount-down-alt": [512, 512, [], "f884", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"], + "sort-amount-up": [512, 512, [], "f161", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "sort-amount-up-alt": [512, 512, [], "f885", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z"], + "sort-down": [320, 512, [], "f0dd", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"], + "sort-numeric-down": [448, 512, [], "f162", "M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"], + "sort-numeric-down-alt": [448, 512, [], "f886", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"], + "sort-numeric-up": [448, 512, [], "f163", "M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z"], + "sort-numeric-up-alt": [448, 512, [], "f887", "M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"], + "sort-up": [320, 512, [], "f0de", "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"], + "spa": [576, 512, [], "f5bb", "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z"], + "space-shuttle": [640, 512, [], "f197", "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"], + "spell-check": [576, 512, [], "f891", "M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z"], + "spider": [576, 512, [], "f717", "M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z"], + "spinner": [512, 512, [], "f110", "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"], + "splotch": [512, 512, [], "f5bc", "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z"], + "spray-can": [512, 512, [], "f5bd", "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"], + "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], + "square-full": [512, 512, [], "f45c", "M512 512H0V0h512v512z"], + "square-root-alt": [576, 512, [], "f698", "M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z"], + "stamp": [512, 512, [], "f5bf", "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z"], + "star": [576, 512, [], "f005", "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"], + "star-and-crescent": [512, 512, [], "f699", "M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z"], + "star-half": [576, 512, [], "f089", "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"], + "star-half-alt": [536, 512, [], "f5c0", "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z"], + "star-of-david": [464, 512, [], "f69a", "M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z"], + "star-of-life": [480, 512, [], "f621", "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z"], + "step-backward": [448, 512, [], "f048", "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"], + "step-forward": [448, 512, [], "f051", "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"], + "stethoscope": [512, 512, [], "f0f1", "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], + "sticky-note": [448, 512, [], "f249", "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"], + "stop": [448, 512, [], "f04d", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], + "stop-circle": [512, 512, [], "f28d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"], + "stopwatch": [448, 512, [], "f2f2", "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"], + "stopwatch-20": [448, 512, [], "f96f", "M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z"], + "store": [616, 512, [], "f54e", "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"], + "store-alt": [640, 512, [], "f54f", "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z"], + "store-alt-slash": [640, 512, [], "f970", "M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z"], + "store-slash": [640, 512, [], "f971", "M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z"], + "stream": [512, 512, [], "f550", "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"], + "street-view": [512, 512, [], "f21d", "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z"], + "strikethrough": [512, 512, [], "f0cc", "M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z"], + "stroopwafel": [512, 512, [], "f551", "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z"], + "subscript": [512, 512, [], "f12c", "M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"], + "subway": [448, 512, [], "f239", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"], + "suitcase": [512, 512, [], "f0f2", "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z"], + "suitcase-rolling": [384, 512, [], "f5c1", "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z"], + "sun": [512, 512, [], "f185", "M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"], + "superscript": [512, 512, [], "f12b", "M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"], + "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "swatchbook": [512, 512, [], "f5c3", "M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z"], + "swimmer": [640, 512, [], "f5c4", "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z"], + "swimming-pool": [640, 512, [], "f5c5", "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z"], + "synagogue": [640, 512, [], "f69b", "M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z"], + "sync": [512, 512, [], "f021", "M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"], + "sync-alt": [512, 512, [], "f2f1", "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"], + "syringe": [512, 512, [], "f48e", "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"], + "table": [512, 512, [], "f0ce", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"], + "table-tennis": [512, 512, [], "f45d", "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"], + "tablet": [448, 512, [], "f10a", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], + "tablet-alt": [448, 512, [], "f3fa", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"], + "tablets": [640, 512, [], "f490", "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z"], + "tachometer-alt": [576, 512, [], "f3fd", "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "tag": [512, 512, [], "f02b", "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"], + "tags": [640, 512, [], "f02c", "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"], + "tape": [640, 512, [], "f4db", "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"], + "tasks": [512, 512, [], "f0ae", "M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "taxi": [512, 512, [], "f1ba", "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "teeth": [640, 512, [], "f62e", "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z"], + "teeth-open": [640, 512, [], "f62f", "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z"], + "temperature-high": [512, 512, [], "f769", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"], + "temperature-low": [512, 512, [], "f76b", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"], + "tenge": [384, 512, [], "f7d7", "M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z"], + "terminal": [640, 512, [], "f120", "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"], + "text-height": [576, 512, [], "f034", "M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z"], + "text-width": [448, 512, [], "f035", "M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z"], + "th": [512, 512, [], "f00a", "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"], + "th-large": [512, 512, [], "f009", "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"], + "th-list": [512, 512, [], "f00b", "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"], + "theater-masks": [640, 512, [], "f630", "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z"], + "thermometer": [512, 512, [], "f491", "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"], + "thermometer-empty": [256, 512, [], "f2cb", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], + "thermometer-full": [256, 512, [], "f2c7", "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"], + "thermometer-half": [256, 512, [], "f2c9", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], + "thermometer-quarter": [256, 512, [], "f2ca", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], + "thermometer-three-quarters": [256, 512, [], "f2c8", "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], + "thumbs-down": [512, 512, [], "f165", "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"], + "thumbs-up": [512, 512, [], "f164", "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"], + "thumbtack": [384, 512, [], "f08d", "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"], + "ticket-alt": [576, 512, [], "f3ff", "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"], + "times": [352, 512, [], "f00d", "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"], + "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"], + "tint": [352, 512, [], "f043", "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z"], + "tint-slash": [640, 512, [], "f5c7", "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"], + "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z"], + "toggle-off": [576, 512, [], "f204", "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"], + "toggle-on": [576, 512, [], "f205", "M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z"], + "toilet": [384, 512, [], "f7d8", "M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z"], + "toilet-paper": [576, 512, [], "f71e", "M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z"], + "toilet-paper-slash": [640, 512, [], "f972", "M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z"], + "toolbox": [512, 512, [], "f552", "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z"], + "tools": [512, 512, [], "f7d9", "M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"], + "tooth": [448, 512, [], "f5c9", "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z"], + "torah": [640, 512, [], "f6a0", "M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z"], + "torii-gate": [512, 512, [], "f6a1", "M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z"], + "tractor": [640, 512, [], "f722", "M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z"], + "trademark": [640, 512, [], "f25c", "M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z"], + "traffic-light": [384, 512, [], "f637", "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"], + "trailer": [640, 512, [], "f941", "M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z"], + "train": [448, 512, [], "f238", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"], + "tram": [512, 512, [], "f7da", "M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"], + "transgender": [384, 512, [], "f224", "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "transgender-alt": [480, 512, [], "f225", "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "trash": [448, 512, [], "f1f8", "M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"], + "trash-alt": [448, 512, [], "f2ed", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "trash-restore": [448, 512, [], "f829", "M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "trash-restore-alt": [448, 512, [], "f82a", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"], + "tree": [384, 512, [], "f1bb", "M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z"], + "trophy": [576, 512, [], "f091", "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"], + "truck": [640, 512, [], "f0d1", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], + "truck-loading": [640, 512, [], "f4de", "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], + "truck-monster": [640, 512, [], "f63b", "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"], + "truck-moving": [640, 512, [], "f4df", "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z"], + "truck-pickup": [640, 512, [], "f63c", "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"], + "tshirt": [640, 512, [], "f553", "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z"], + "tty": [512, 512, [], "f1e4", "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"], + "tv": [640, 512, [], "f26c", "M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z"], + "umbrella": [576, 512, [], "f0e9", "M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z"], + "umbrella-beach": [640, 512, [], "f5ca", "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z"], + "underline": [448, 512, [], "f0cd", "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"], + "undo": [512, 512, [], "f0e2", "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"], + "undo-alt": [512, 512, [], "f2ea", "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"], + "universal-access": [512, 512, [], "f29a", "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"], + "university": [512, 512, [], "f19c", "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"], + "unlink": [512, 512, [], "f127", "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"], + "unlock": [448, 512, [], "f09c", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"], + "unlock-alt": [448, 512, [], "f13e", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"], + "upload": [512, 512, [], "f093", "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"], + "user": [448, 512, [], "f007", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], + "user-alt": [512, 512, [], "f406", "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z"], + "user-alt-slash": [640, 512, [], "f4fa", "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z"], + "user-astronaut": [448, 512, [], "f4fb", "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"], + "user-check": [640, 512, [], "f4fc", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"], + "user-circle": [496, 512, [], "f2bd", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"], + "user-clock": [640, 512, [], "f4fd", "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z"], + "user-cog": [640, 512, [], "f4fe", "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"], + "user-edit": [640, 512, [], "f4ff", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z"], + "user-friends": [640, 512, [], "f500", "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"], + "user-graduate": [448, 512, [], "f501", "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z"], + "user-injured": [448, 512, [], "f728", "M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z"], + "user-lock": [640, 512, [], "f502", "M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z"], + "user-md": [448, 512, [], "f0f0", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z"], + "user-minus": [640, 512, [], "f503", "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], + "user-ninja": [448, 512, [], "f504", "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z"], + "user-nurse": [448, 512, [], "f82f", "M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z"], + "user-plus": [640, 512, [], "f234", "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], + "user-secret": [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"], + "user-shield": [640, 512, [], "f505", "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z"], + "user-slash": [640, 512, [], "f506", "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z"], + "user-tag": [640, 512, [], "f507", "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z"], + "user-tie": [448, 512, [], "f508", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z"], + "user-times": [640, 512, [], "f235", "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], + "users": [640, 512, [], "f0c0", "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"], + "users-cog": [640, 512, [], "f509", "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"], + "utensil-spoon": [512, 512, [], "f2e5", "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z"], + "utensils": [416, 512, [], "f2e7", "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"], + "vector-square": [512, 512, [], "f5cb", "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z"], + "venus": [288, 512, [], "f221", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"], + "venus-double": [512, 512, [], "f226", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"], + "venus-mars": [576, 512, [], "f228", "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], + "vial": [480, 512, [], "f492", "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"], + "vials": [640, 512, [], "f493", "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z"], + "video": [576, 512, [], "f03d", "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z"], + "video-slash": [640, 512, [], "f4e2", "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z"], + "vihara": [640, 512, [], "f6a7", "M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z"], + "virus": [512, 512, [], "f974", "M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z"], + "virus-slash": [640, 512, [], "f975", "M114,227.56H92.44a28.44,28.44,0,0,0,0,56.88H114c50.68,0,76.06,61.28,40.23,97.12L139,396.81A28.44,28.44,0,1,0,179.19,437l15.25-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-26.61,17-45.91,38.22-53.37l-244.5-189A55.58,55.58,0,0,1,114,227.56ZM633.82,458.09,470.62,332c4.17-25.39,24.91-47.52,55.39-47.52h21.55a28.44,28.44,0,1,0,0-56.88H526c-50.68,0-76.06-61.28-40.23-97.12L501,115.19A28.44,28.44,0,0,0,460.81,75L445.56,90.22c-35.84,35.84-97.11,10.46-97.11-40.23V28.45a28.45,28.45,0,0,0-56.9,0V50c0,50.69-61.27,76.07-97.11,40.23L179.19,75A28.43,28.43,0,0,0,139,75c-.13.14-.15.32-.28.46L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM335.43,227.48l-62.87-48.59A46.55,46.55,0,0,1,288,176a48,48,0,0,1,48,48C336,225.22,335.52,226.29,335.43,227.48Z"], + "viruses": [640, 512, [], "f976", "M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z"], + "voicemail": [640, 512, [], "f897", "M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z"], + "volleyball-ball": [512, 512, [], "f45f", "M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"], + "volume-down": [384, 512, [], "f027", "M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z"], + "volume-mute": [512, 512, [], "f6a9", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z"], + "volume-off": [256, 512, [], "f026", "M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z"], + "volume-up": [576, 512, [], "f028", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z"], + "vote-yea": [640, 512, [], "f772", "M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z"], + "vr-cardboard": [640, 512, [], "f729", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z"], + "walking": [320, 512, [], "f554", "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z"], + "wallet": [512, 512, [], "f555", "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], + "warehouse": [640, 512, [], "f494", "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"], + "water": [576, 512, [], "f773", "M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z"], + "wave-square": [640, 512, [], "f83e", "M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z"], + "weight": [512, 512, [], "f496", "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z"], + "weight-hanging": [512, 512, [], "f5cd", "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"], + "wheelchair": [512, 512, [], "f193", "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"], + "wifi": [640, 512, [], "f1eb", "M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z"], + "wind": [512, 512, [], "f72e", "M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z"], + "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"], + "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"], + "window-minimize": [512, 512, [], "f2d1", "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"], + "window-restore": [512, 512, [], "f2d2", "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"], + "wine-bottle": [512, 512, [], "f72f", "M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z"], + "wine-glass": [288, 512, [], "f4e3", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z"], + "wine-glass-alt": [288, 512, [], "f5ce", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z"], + "won-sign": [576, 512, [], "f159", "M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z"], + "wrench": [512, 512, [], "f0ad", "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], + "x-ray": [640, 512, [], "f497", "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z"], + "yen-sign": [384, 512, [], "f157", "M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z"], + "yin-yang": [496, 512, [], "f6ad", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"] + }; + + bunker(function () { + defineIcons('fas', icons); + }); + +}()); diff --git a/docs/docs/javascripts/splide.esm.js b/docs/docs/javascripts/splide.esm.js new file mode 100644 index 000000000000..e4e024592256 --- /dev/null +++ b/docs/docs/javascripts/splide.esm.js @@ -0,0 +1,5909 @@ +/*! + * Splide.js + * Version : 2.4.20 + * License : MIT + * Copyright: 2020 Naotoshi Fujita + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Splide"] = factory(); + else + root["Splide"] = factory(); +})(self, function() { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 311: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": () => /* binding */ module_Splide +}); + +// NAMESPACE OBJECT: ./src/js/constants/states.js +var states_namespaceObject = {}; +__webpack_require__.r(states_namespaceObject); +__webpack_require__.d(states_namespaceObject, { + "CREATED": () => CREATED, + "DESTROYED": () => DESTROYED, + "IDLE": () => IDLE, + "MOUNTED": () => MOUNTED, + "MOVING": () => MOVING +}); + +;// CONCATENATED MODULE: ./src/js/core/event.js +/** + * The function for providing an Event object simply managing events. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The function for providing an Event object simply managing events. + */ +/* harmony default export */ const core_event = (function () { + /** + * Store all event data. + * + * @type {Array} + */ + var data = []; + var Event = { + /** + * Subscribe the given event(s). + * + * @param {string} events - An event name. Use space to separate multiple events. + * Also, namespace is accepted by dot, such as 'resize.{namespace}'. + * @param {function} handler - A callback function. + * @param {Element} elm - Optional. Native event will be listened to when this arg is provided. + * @param {Object} options - Optional. Options for addEventListener. + */ + on: function on(events, handler, elm, options) { + if (elm === void 0) { + elm = null; + } + + if (options === void 0) { + options = {}; + } + + events.split(' ').forEach(function (event) { + if (elm) { + elm.addEventListener(event, handler, options); + } + + data.push({ + event: event, + handler: handler, + elm: elm, + options: options + }); + }); + }, + + /** + * Unsubscribe the given event(s). + * + * @param {string} events - A event name or names split by space. + * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided. + */ + off: function off(events, elm) { + if (elm === void 0) { + elm = null; + } + + events.split(' ').forEach(function (event) { + data = data.filter(function (item) { + if (item && item.event === event && item.elm === elm) { + unsubscribe(item); + return false; + } + + return true; + }); + }); + }, + + /** + * Emit an event. + * This method is only for custom events. + * + * @param {string} event - An event name. + * @param {*} args - Any number of arguments passed to handlers. + */ + emit: function emit(event) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + data.forEach(function (item) { + if (!item.elm && item.event.split('.')[0] === event) { + item.handler.apply(item, args); + } + }); + }, + + /** + * Clear event data. + */ + destroy: function destroy() { + data.forEach(unsubscribe); + data = []; + } + }; + /** + * Remove the registered event listener. + * + * @param {Object} item - An object containing event data. + */ + + function unsubscribe(item) { + if (item.elm) { + item.elm.removeEventListener(item.event, item.handler, item.options); + } + } + + return Event; +}); +;// CONCATENATED MODULE: ./src/js/core/state.js +/** + * The function providing a super simple state system. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The function providing a super simple state system. + * + * @param {string|number} initialState - Provide the initial state value. + */ +/* harmony default export */ const state = (function (initialState) { + /** + * Store the current state. + * + * @type {string|number} + */ + var curr = initialState; + return { + /** + * Change state. + * + * @param {string|number} state - A new state. + */ + set: function set(state) { + curr = state; + }, + + /** + * Verify if the current state is given one or not. + * + * @param {string|number} state - A state name to be verified. + * + * @return {boolean} - True if the current state is the given one. + */ + is: function is(state) { + return state === curr; + } + }; +}); +;// CONCATENATED MODULE: ./src/js/utils/object.js +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +/** + * Some utility functions related with Object, supporting IE. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ +var keys = Object.keys; +/** + * Iterate an object like Array.forEach. + * IE doesn't support forEach of HTMLCollection. + * + * @param {Object} obj - An object. + * @param {function} callback - A function handling each value. Arguments are value, property and index. + */ + +function each(obj, callback) { + keys(obj).some(function (key, index) { + return callback(obj[key], key, index); + }); +} +/** + * Return values of the given object as an array. + * IE doesn't support Object.values. + * + * @param {Object} obj - An object. + * + * @return {Array} - An array containing all values of the given object. + */ + +function values(obj) { + return keys(obj).map(function (key) { + return obj[key]; + }); +} +/** + * Check if the given subject is object or not. + * + * @param {*} subject - A subject to be verified. + * + * @return {boolean} - True if object, false otherwise. + */ + +function isObject(subject) { + return typeof subject === 'object'; +} +/** + * Merge two objects deeply. + * + * @param {Object} to - An object where "from" is merged. + * @param {Object} from - An object merged to "to". + * + * @return {Object} - A merged object. + */ + +function merge(_ref, from) { + var to = _extends({}, _ref); + + each(from, function (value, key) { + if (isObject(value)) { + if (!isObject(to[key])) { + to[key] = {}; + } + + to[key] = merge(to[key], value); + } else { + to[key] = value; + } + }); + return to; +} +/** + * Assign all properties "from" to "to" object. + * + * @param {Object} to - An object where properties are assigned. + * @param {Object} from - An object whose properties are assigned to "to". + * + * @return {Object} - An assigned object. + */ + +function object_assign(to, from) { + keys(from).forEach(function (key) { + if (!to[key]) { + Object.defineProperty(to, key, Object.getOwnPropertyDescriptor(from, key)); + } + }); + return to; +} +;// CONCATENATED MODULE: ./src/js/utils/utils.js +/** + * A package of some miscellaneous utility functions. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Convert the given value to array. + * + * @param {*} value - Any value. + * + * @return {*[]} - Array containing the given value. + */ + +function toArray(value) { + return Array.isArray(value) ? value : [value]; +} +/** + * Check if the given value is between min and max. + * Min will be returned when the value is less than min or max will do when greater than max. + * + * @param {number} value - A number to be checked. + * @param {number} m1 - Minimum or maximum number. + * @param {number} m2 - Maximum or minimum number. + * + * @return {number} - A value itself, min or max. + */ + +function between(value, m1, m2) { + return Math.min(Math.max(value, m1 > m2 ? m2 : m1), m1 > m2 ? m1 : m2); +} +/** + * The sprintf method with minimum functionality. + * + * @param {string} format - The string format. + * @param {string|Array} replacements - Replacements accepting multiple arguments. + * + * @returns {string} - Converted string. + */ + +function sprintf(format, replacements) { + var i = 0; + return format.replace(/%s/g, function () { + return toArray(replacements)[i++]; + }); +} +/** + * Append px unit to the given subject if necessary. + * + * @param {number|string} value - A value that may not include an unit. + * + * @return {string} - If the value is string, return itself. + * If number, do value + "px". An empty string, otherwise. + */ + +function unit(value) { + var type = typeof value; + + if (type === 'number' && value > 0) { + return parseFloat(value) + 'px'; + } + + return type === 'string' ? value : ''; +} +/** + * Pad start with 0. + * + * @param {number} number - A number to be filled with 0. + * + * @return {string|number} - Padded number. + */ + +function pad(number) { + return number < 10 ? '0' + number : number; +} +/** + * Convert the given value to pixel. + * + * @param {Element} root - Root element where a dummy div is appended. + * @param {string|number} value - CSS value to be converted, such as 10rem. + * + * @return {number} - Pixel. + */ + +function toPixel(root, value) { + if (typeof value === 'string') { + var div = create('div', {}); + applyStyle(div, { + position: 'absolute', + width: value + }); + append(root, div); + value = div.clientWidth; + dom_remove(div); + } + + return +value || 0; +} +;// CONCATENATED MODULE: ./src/js/utils/dom.js +/** + * Some utility functions related with DOM. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * Find the first element matching the given selector. + * Be aware that all selectors after a space are ignored. + * + * @param {Element|Node} elm - An ancestor element. + * @param {string} selector - DOMString. + * + * @return {Element|null} - A found element or null. + */ + +function find(elm, selector) { + return elm ? elm.querySelector(selector.split(' ')[0]) : null; +} +/** + * Find a first child having the given tag or class name. + * + * @param {Element} parent - A parent element. + * @param {string} tagOrClassName - A tag or class name. + * + * @return {Element|undefined} - A found element on success or undefined on failure. + */ + +function child(parent, tagOrClassName) { + return children(parent, tagOrClassName)[0]; +} +/** + * Return chile elements that matches the provided tag or class name. + * + * @param {Element} parent - A parent element. + * @param {string} tagOrClassName - A tag or class name. + * + * @return {Element[]} - Found elements. + */ + +function children(parent, tagOrClassName) { + if (parent) { + return values(parent.children).filter(function (child) { + return hasClass(child, tagOrClassName.split(' ')[0]) || child.tagName === tagOrClassName; + }); + } + + return []; +} +/** + * Create an element with some optional attributes. + * + * @param {string} tag - A tag name. + * @param {Object} attrs - An object any attribute pairs of name and value. + * + * @return {Element} - A created element. + */ + +function create(tag, attrs) { + var elm = document.createElement(tag); + each(attrs, function (value, key) { + return setAttribute(elm, key, value); + }); + return elm; +} +/** + * Convert HTML string to DOM node. + * + * @param {string} html - HTML string. + * + * @return {Node} - A created node. + */ + +function domify(html) { + var div = create('div', {}); + div.innerHTML = html; + return div.firstChild; +} +/** + * Remove a given element from a DOM tree. + * + * @param {Element|Element[]} elms - Element(s) to be removed. + */ + +function dom_remove(elms) { + toArray(elms).forEach(function (elm) { + if (elm) { + var parent = elm.parentElement; + parent && parent.removeChild(elm); + } + }); +} +/** + * Append a child to a given element. + * + * @param {Element} parent - A parent element. + * @param {Element} child - An element to be appended. + */ + +function append(parent, child) { + if (parent) { + parent.appendChild(child); + } +} +/** + * Insert an element before the reference element. + * + * @param {Element|Node} ref - A reference element. + * @param {Element} elm - An element to be inserted. + */ + +function before(elm, ref) { + if (elm && ref) { + var parent = ref.parentElement; + parent && parent.insertBefore(elm, ref); + } +} +/** + * Apply styles to the given element. + * + * @param {Element} elm - An element where styles are applied. + * @param {Object} styles - Object containing styles. + */ + +function applyStyle(elm, styles) { + if (elm) { + each(styles, function (value, prop) { + if (value !== null) { + elm.style[prop] = value; + } + }); + } +} +/** + * Add or remove classes to/from the element. + * This function is for internal usage. + * + * @param {Element} elm - An element where classes are added. + * @param {string|string[]} classes - Class names being added. + * @param {boolean} remove - Whether to remove or add classes. + */ + +function addOrRemoveClasses(elm, classes, remove) { + if (elm) { + toArray(classes).forEach(function (name) { + if (name) { + elm.classList[remove ? 'remove' : 'add'](name); + } + }); + } +} +/** + * Add classes to the element. + * + * @param {Element} elm - An element where classes are added. + * @param {string|string[]} classes - Class names being added. + */ + + +function addClass(elm, classes) { + addOrRemoveClasses(elm, classes, false); +} +/** + * Remove a class from the element. + * + * @param {Element} elm - An element where classes are removed. + * @param {string|string[]} classes - A class name being removed. + */ + +function removeClass(elm, classes) { + addOrRemoveClasses(elm, classes, true); +} +/** + * Verify if the provided element has the class or not. + * + * @param {Element} elm - An element. + * @param {string} className - A class name. + * + * @return {boolean} - True if the element has the class or false if not. + */ + +function hasClass(elm, className) { + return !!elm && elm.classList.contains(className); +} +/** + * Set attribute to the given element. + * + * @param {Element} elm - An element where an attribute is assigned. + * @param {string} name - Attribute name. + * @param {string|number|boolean} value - Attribute value. + */ + +function setAttribute(elm, name, value) { + if (elm) { + elm.setAttribute(name, value); + } +} +/** + * Get attribute from the given element. + * + * @param {Element} elm - An element where an attribute is assigned. + * @param {string} name - Attribute name. + * + * @return {string} - The value of the given attribute if available. An empty string if not. + */ + +function getAttribute(elm, name) { + return elm ? elm.getAttribute(name) : ''; +} +/** + * Remove attribute from the given element. + * + * @param {Element|Element[]} elms - An element where an attribute is removed. + * @param {string|string[]} names - Attribute name. + */ + +function removeAttribute(elms, names) { + toArray(names).forEach(function (name) { + toArray(elms).forEach(function (elm) { + return elm && elm.removeAttribute(name); + }); + }); +} +/** + * Return the Rect object of the provided object. + * + * @param {Element} elm - An element. + * + * @return {ClientRect|DOMRect} - A rect object. + */ + +function getRect(elm) { + return elm.getBoundingClientRect(); +} +/** + * Trigger the given callback after all images contained by the element are loaded. + * + * @param {Element} elm - Element that may contain images. + * @param {Function} callback - Callback function fired right after all images are loaded. + */ + +function loaded(elm, callback) { + var images = elm.querySelectorAll('img'); + var length = images.length; + + if (length) { + var count = 0; + each(images, function (img) { + img.onload = img.onerror = function () { + if (++count === length) { + callback(); + } + }; + }); + } else { + // Trigger the callback immediately if there is no image. + callback(); + } +} +;// CONCATENATED MODULE: ./src/js/constants/types.js +/** + * Export slider types. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Normal slider. + * + * @type {string} + */ +var SLIDE = 'slide'; +/** + * Loop after the last slide and before the first one. + * + * @type {string} + */ + +var LOOP = 'loop'; +/** + * The track doesn't move. + * + * @type {string} + */ + +var FADE = 'fade'; +;// CONCATENATED MODULE: ./src/js/transitions/slide/index.js +/** + * The component for general slide effect transition. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * The component for general slide effect transition. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const slide = (function (Splide, Components) { + /** + * Hold the list element. + * + * @type {Element} + */ + var list; + /** + * Hold the onEnd callback function. + * + * @type {function} + */ + + var endCallback; + return { + /** + * Called when the component is mounted. + */ + mount: function mount() { + list = Components.Elements.list; + Splide.on('transitionend', function (e) { + if (e.target === list && endCallback) { + endCallback(); + } + }, list); + }, + + /** + * Start transition. + * + * @param {number} destIndex - Destination slide index that might be clone's. + * @param {number} newIndex - New index. + * @param {number} prevIndex - Previous index. + * @param {Object} coord - Destination coordinates. + * @param {function} done - Callback function must be invoked when transition is completed. + */ + start: function start(destIndex, newIndex, prevIndex, coord, done) { + var options = Splide.options; + var edgeIndex = Components.Controller.edgeIndex; + var speed = options.speed; + endCallback = done; + + if (Splide.is(SLIDE)) { + if (prevIndex === 0 && newIndex >= edgeIndex || prevIndex >= edgeIndex && newIndex === 0) { + speed = options.rewindSpeed || speed; + } + } + + applyStyle(list, { + transition: "transform " + speed + "ms " + options.easing, + transform: "translate(" + coord.x + "px," + coord.y + "px)" + }); + } + }; +}); +;// CONCATENATED MODULE: ./src/js/transitions/fade/index.js +/** + * The component for fade transition. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * The component for fade transition. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const fade = (function (Splide, Components) { + var Fade = { + /** + * Called when the component is mounted. + * Apply transition style to the first slide. + */ + mount: function mount() { + apply(Splide.index); + }, + + /** + * Start transition. + * + * @param {number} destIndex - Destination slide index that might be clone's. + * @param {number} newIndex - New index. + * @param {number} prevIndex - Previous index. + * @param {Object} coord - Destination coordinates. + * @param {function} done - Callback function must be invoked when transition is completed. + */ + start: function start(destIndex, newIndex, prevIndex, coord, done) { + var track = Components.Elements.track; + applyStyle(track, { + height: unit(track.clientHeight) + }); + apply(newIndex); + setTimeout(function () { + done(); + applyStyle(track, { + height: '' + }); + }); + } + }; + /** + * Apply transition style to the slide specified by the given index. + * + * @param {number} index - A slide index. + */ + + function apply(index) { + var options = Splide.options; + applyStyle(Components.Elements.slides[index], { + transition: "opacity " + options.speed + "ms " + options.easing + }); + } + + return Fade; +}); +;// CONCATENATED MODULE: ./src/js/transitions/index.js +/** + * Export transition components. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +;// CONCATENATED MODULE: ./src/js/core/composer.js +/** + * Provide a function for composing components. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * Compose components. + * + * @param {Splide} Splide - Splide instance. + * @param {Object} Components - Additional components. + * @param {function} Transition - Change component for transition. + * + * @return {Object} - An object containing all components. + */ + +function compose(Splide, Components, Transition) { + var components = {}; + each(Components, function (Component, name) { + components[name] = Component(Splide, components, name.toLowerCase()); + }); + + if (!Transition) { + Transition = Splide.is(FADE) ? fade : slide; + } + + components.Transition = Transition(Splide, components); + return components; +} +;// CONCATENATED MODULE: ./src/js/utils/error.js +/** + * Utility functions for outputting logs. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Prefix of an error massage. + * + * @type {string} + */ +var MESSAGE_PREFIX = '[SPLIDE]'; +/** + * Display an error message on the browser console. + * + * @param {string} message - An error message. + */ + +function error(message) { + console.error(MESSAGE_PREFIX + " " + message); +} +/** + * Check existence of the given object and throw an error if it doesn't. + * + * @throws {Error} + * + * @param {*} subject - A subject to be confirmed. + * @param {string} message - An error message. + */ + +function exist(subject, message) { + if (!subject) { + throw new Error(message); + } +} +;// CONCATENATED MODULE: ./src/js/constants/classes.js +/** + * Export class names. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * A root class name. + * + * @type {string} + */ +var ROOT = 'splide'; +/** + * The definition table of all classes for elements. + * They might be modified by options. + * + * @type {Object} + */ + +var ELEMENT_CLASSES = { + root: ROOT, + slider: ROOT + "__slider", + track: ROOT + "__track", + list: ROOT + "__list", + slide: ROOT + "__slide", + container: ROOT + "__slide__container", + arrows: ROOT + "__arrows", + arrow: ROOT + "__arrow", + prev: ROOT + "__arrow--prev", + next: ROOT + "__arrow--next", + pagination: ROOT + "__pagination", + page: ROOT + "__pagination__page", + clone: ROOT + "__slide--clone", + progress: ROOT + "__progress", + bar: ROOT + "__progress__bar", + autoplay: ROOT + "__autoplay", + play: ROOT + "__play", + pause: ROOT + "__pause", + spinner: ROOT + "__spinner", + sr: ROOT + "__sr" +}; +/** + * Definitions of status classes. + * + * @type {Object} + */ + +var STATUS_CLASSES = { + active: 'is-active', + visible: 'is-visible', + loading: 'is-loading' +}; +;// CONCATENATED MODULE: ./src/js/constants/i18n.js +/** + * Export i18n texts as object. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Texts for i18n. + * + * @type {Object} + */ +var I18N = { + prev: 'Previous slide', + next: 'Next slide', + first: 'Go to first slide', + last: 'Go to last slide', + slideX: 'Go to slide %s', + pageX: 'Go to page %s', + play: 'Start autoplay', + pause: 'Pause autoplay' +}; +;// CONCATENATED MODULE: ./src/js/constants/defaults.js +/** + * Export default options. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +var DEFAULTS = { + /** + * Determine a slider type. + * - 'slide': Regular slider. + * - 'loop' : Carousel slider. + * - 'fade' : Change slides with fade transition. perPage, drag options are ignored. + * + * @type {string} + */ + type: 'slide', + + /** + * Whether to rewind a slider before the first slide or after the last one. + * In "loop" mode, this option is ignored. + * + * @type {boolean} + */ + rewind: false, + + /** + * Transition speed in milliseconds. + * + * @type {number} + */ + speed: 400, + + /** + * Transition speed on rewind in milliseconds. + * + * @type {number} + */ + rewindSpeed: 0, + + /** + * Whether to prevent any actions while a slider is transitioning. + * If false, navigation, drag and swipe work while the slider is running. + * Even so, it will be forced to wait for transition in some cases in the loop mode to shift a slider. + * + * @type {boolean} + */ + waitForTransition: true, + + /** + * Define slider max width. + * + * @type {number} + */ + width: 0, + + /** + * Define slider height. + * + * @type {number} + */ + height: 0, + + /** + * Fix width of slides. CSS format is allowed such as 10em, 80% or 80vw. + * perPage number will be ignored when this option is falsy. + * + * @type {number|string} + */ + fixedWidth: 0, + + /** + * Fix height of slides. CSS format is allowed such as 10em, 80vh but % unit is not accepted. + * heightRatio option will be ignored when this option is falsy. + * + * @type {number|string} + */ + fixedHeight: 0, + + /** + * Determine height of slides by ratio to a slider width. + * This will be ignored when the fixedHeight is provided. + * + * @type {number} + */ + heightRatio: 0, + + /** + * If true, slide width will be determined by the element width itself. + * - perPage/perMove should be 1. + * + * @type {boolean} + */ + autoWidth: false, + + /** + * If true, slide height will be determined by the element width itself. + * - perPage/perMove should be 1. + * + * @type {boolean} + */ + autoHeight: false, + + /** + * Determine how many slides should be displayed per page. + * + * @type {number} + */ + perPage: 1, + + /** + * Determine how many slides should be moved when a slider goes to next or perv. + * + * @type {number} + */ + perMove: 0, + + /** + * Determine manually how many clones should be generated on the left and right side. + * The total number of clones will be twice of this number. + * + * @type {number} + */ + clones: 0, + + /** + * Start index. + * + * @type {number} + */ + start: 0, + + /** + * Determine which slide should be focused if there are multiple slides in a page. + * A string "center" is acceptable for centering slides. + * + * @type {boolean|number|string} + */ + focus: false, + + /** + * Gap between slides. CSS format is allowed such as 1em. + * + * @type {number|string} + */ + gap: 0, + + /** + * Set padding-left/right in horizontal mode or padding-top/bottom in vertical one. + * Give a single value to set a same size for both sides or + * do an object for different sizes. + * Also, CSS format is allowed such as 1em. + * + * @example + * - 10: Number + * - '1em': CSS format. + * - { left: 0, right: 20 }: Object for different sizes in horizontal mode. + * - { top: 0, bottom: 20 }: Object for different sizes in vertical mode. + * + * @type {number|string|Object} + */ + padding: 0, + + /** + * Whether to append arrows. + * + * @type {boolean} + */ + arrows: true, + + /** + * Change the arrow SVG path like 'm7.61 0.807-2.12...'. + * + * @type {string} + */ + arrowPath: '', + + /** + * Whether to append pagination(indicator dots) or not. + * + * @type {boolean} + */ + pagination: true, + + /** + * Activate autoplay. + * + * @type {boolean} + */ + autoplay: false, + + /** + * Autoplay interval in milliseconds. + * + * @type {number} + */ + interval: 5000, + + /** + * Whether to stop autoplay when a slider is hovered. + * + * @type {boolean} + */ + pauseOnHover: true, + + /** + * Whether to stop autoplay when a slider elements are focused. + * True is recommended for accessibility. + * + * @type {boolean} + */ + pauseOnFocus: true, + + /** + * Whether to reset progress of the autoplay timer when resumed. + * + * @type {boolean} + */ + resetProgress: true, + + /** + * Loading images lazily. + * Image src must be provided by a data-splide-lazy attribute. + * + * - false: Do nothing. + * - 'nearby': Only images around an active slide will be loaded. + * - 'sequential': All images will be sequentially loaded. + * + * @type {boolean|string} + */ + lazyLoad: false, + + /** + * This option works only when a lazyLoad option is "nearby". + * Determine how many pages(not slides) around an active slide should be loaded beforehand. + * + * @type {number} + */ + preloadPages: 1, + + /** + * Easing for CSS transition. For example, linear, ease or cubic-bezier(). + * + * @type {string} + */ + easing: 'cubic-bezier(.42,.65,.27,.99)', + + /** + * Whether to enable keyboard shortcuts + * - true or 'global': Listen to keydown event of the document. + * - 'focused': Listen to the keydown event of the slider root element. tabindex="0" will be added to the element. + * - false: Disable keyboard shortcuts. + * + * @type {boolean|string} + */ + keyboard: 'global', + + /** + * Whether to allow mouse drag and touch swipe. + * + * @type {boolean} + */ + drag: true, + + /** + * The angle threshold for drag. + * The slider starts moving only when the drag angle is less than this threshold. + * + * @type {number} + */ + dragAngleThreshold: 30, + + /** + * Distance threshold for determining if the action is "flick" or "swipe". + * When a drag distance is over this value, the action will be treated as "swipe", not "flick". + * + * @type {number} + */ + swipeDistanceThreshold: 150, + + /** + * Velocity threshold for determining if the action is "flick" or "swipe". + * Around 0.5 is recommended. + * + * @type {number} + */ + flickVelocityThreshold: .6, + + /** + * Determine power of flick. The larger number this is, the farther a slider runs by flick. + * Around 500 is recommended. + * + * @type {number} + */ + flickPower: 600, + + /** + * Limit a number of pages to move by flick. + * + * @type {number} + */ + flickMaxPages: 1, + + /** + * Slider direction. + * - 'ltr': Left to right. + * - 'rtl': Right to left. + * - 'ttb': Top to bottom. + * + * @type {string} + */ + direction: 'ltr', + + /** + * Set img src to background-image of its parent element. + * Images with various sizes can be displayed as same dimension without cropping work. + * fixedHeight or heightRatio is required. + * + * @type {boolean} + */ + cover: false, + + /** + * Whether to enable accessibility(aria and screen reader texts) or not. + * + * @type {boolean} + */ + accessibility: true, + + /** + * Whether to add tabindex="0" to visible slides or not. + * + * @type {boolean} + */ + slideFocus: true, + + /** + * Determine if a slider is navigation for another. + * Use "sync" API to synchronize two sliders. + * + * @type {boolean} + */ + isNavigation: false, + + /** + * Whether to trim spaces before the fist slide or after the last one when "focus" is not 0. + * + * @type {boolean} + */ + trimSpace: true, + + /** + * The "is-active" class is added after transition as default. + * If true, it will be added before move. + * + * @type {boolean} + */ + updateOnMove: false, + + /** + * Throttle duration in milliseconds for the resize event. + * + * @type {number} + */ + throttle: 100, + + /** + * Whether to destroy a slider or not. + * + * @type {boolean} + */ + destroy: false, + + /** + * Options for specific breakpoints. + * + * @example + * { + * 1000: { + * perPage: 3, + * gap: 20 + * }, + * 600: { + * perPage: 1, + * gap: 5, + * } + * } + * + * @type {boolean|Object} + */ + breakpoints: false, + + /** + * Collection of class names. + * + * @see ./classes.js + * + * @type {Object} + */ + classes: ELEMENT_CLASSES, + + /** + * Collection of i18n texts. + * + * @see ./i18n.js + * + * @type {Object} + */ + i18n: I18N +}; +;// CONCATENATED MODULE: ./src/js/constants/states.js +/** + * Export state constants. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Splide has been just created. + * + * @type {number} + */ +var CREATED = 1; +/** + * All components have been mounted and initialized. + * + * @type {number} + */ + +var MOUNTED = 2; +/** + * Splide is ready for transition. + * + * @type {number} + */ + +var IDLE = 3; +/** + * Splide is moving. + * + * @type {number} + */ + +var MOVING = 4; +/** + * Splide is moving. + * + * @type {number} + */ + +var DESTROYED = 5; +;// CONCATENATED MODULE: ./src/js/splide.js +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +/** + * The main class for applying Splide to an element. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + + + +/** + * The main class for applying Splide to an element, + * providing some APIs to control the behavior. + */ + +var Splide = /*#__PURE__*/function () { + /** + * Splide constructor. + * + * @throws {Error} When the given root element or selector is invalid. + * + * @param {Element|string} root - A selector for a root element or an element itself. + * @param {Object} options - Optional. Options to change default behaviour. + * @param {Object} Components - Optional. Components. + */ + function Splide(root, options, Components) { + if (options === void 0) { + options = {}; + } + + if (Components === void 0) { + Components = {}; + } + + this.root = root instanceof Element ? root : document.querySelector(root); + exist(this.root, 'An invalid element/selector was given.'); + this.Components = null; + this.Event = core_event(); + this.State = state(CREATED); + this.STATES = states_namespaceObject; + this._o = merge(DEFAULTS, options); + this._i = 0; + this._c = Components; + this._e = {}; // Extensions + + this._t = null; // Transition + } + /** + * Compose and mount components. + * + * @param {Object} Extensions - Optional. Additional components. + * @param {function} Transition - Optional. Set a custom transition component. + * + * @return {Splide|undefined} - This instance or undefined if an exception occurred. + */ + + + var _proto = Splide.prototype; + + _proto.mount = function mount(Extensions, Transition) { + var _this = this; + + if (Extensions === void 0) { + Extensions = this._e; + } + + if (Transition === void 0) { + Transition = this._t; + } + + // Reset the state. + this.State.set(CREATED); + this._e = Extensions; + this._t = Transition; + this.Components = compose(this, merge(this._c, Extensions), Transition); + + try { + each(this.Components, function (component, key) { + var required = component.required; + + if (required === undefined || required) { + component.mount && component.mount(); + } else { + delete _this.Components[key]; + } + }); + } catch (e) { + error(e.message); + return; + } + + var State = this.State; + State.set(MOUNTED); + each(this.Components, function (component) { + component.mounted && component.mounted(); + }); + this.emit('mounted'); + State.set(IDLE); + this.emit('ready'); + applyStyle(this.root, { + visibility: 'visible' + }); + this.on('move drag', function () { + return State.set(MOVING); + }).on('moved dragged', function () { + return State.set(IDLE); + }); + return this; + } + /** + * Set sync target. + * + * @param {Splide} splide - A Splide instance. + * + * @return {Splide} - This instance. + */ + ; + + _proto.sync = function sync(splide) { + this.sibling = splide; + return this; + } + /** + * Register callback fired on the given event(s). + * + * @param {string} events - An event name. Use space to separate multiple events. + * Also, namespace is accepted by dot, such as 'resize.{namespace}'. + * @param {function} handler - A callback function. + * @param {Element} elm - Optional. Native event will be listened to when this arg is provided. + * @param {Object} options - Optional. Options for addEventListener. + * + * @return {Splide} - This instance. + */ + ; + + _proto.on = function on(events, handler, elm, options) { + if (elm === void 0) { + elm = null; + } + + if (options === void 0) { + options = {}; + } + + this.Event.on(events, handler, elm, options); + return this; + } + /** + * Unsubscribe the given event. + * + * @param {string} events - A event name. + * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided. + * + * @return {Splide} - This instance. + */ + ; + + _proto.off = function off(events, elm) { + if (elm === void 0) { + elm = null; + } + + this.Event.off(events, elm); + return this; + } + /** + * Emit an event. + * + * @param {string} event - An event name. + * @param {*} args - Any number of arguments passed to handlers. + */ + ; + + _proto.emit = function emit(event) { + var _this$Event; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + (_this$Event = this.Event).emit.apply(_this$Event, [event].concat(args)); + + return this; + } + /** + * Go to the slide specified by the given control. + * + * @param {string|number} control - A control pattern. + * @param {boolean} wait - Optional. Whether to wait for transition. + */ + ; + + _proto.go = function go(control, wait) { + if (wait === void 0) { + wait = this.options.waitForTransition; + } + + if (this.State.is(IDLE) || this.State.is(MOVING) && !wait) { + this.Components.Controller.go(control, false); + } + + return this; + } + /** + * Verify whether the slider type is the given one or not. + * + * @param {string} type - A slider type. + * + * @return {boolean} - True if the slider type is the provided type or false if not. + */ + ; + + _proto.is = function is(type) { + return type === this._o.type; + } + /** + * Insert a slide. + * + * @param {Element|string} slide - A slide element to be added. + * @param {number} index - A slide will be added at the position. + */ + ; + + _proto.add = function add(slide, index) { + if (index === void 0) { + index = -1; + } + + this.Components.Elements.add(slide, index, this.refresh.bind(this)); + return this; + } + /** + * Remove the slide designated by the index. + * + * @param {number} index - A slide index. + */ + ; + + _proto.remove = function remove(index) { + this.Components.Elements.remove(index); + this.refresh(); + return this; + } + /** + * Destroy all Slide objects and clones and recreate them again. + */ + ; + + _proto.refresh = function refresh() { + this.emit('refresh:before').emit('refresh').emit('resize'); + return this; + } + /** + * Destroy the Splide. + * "Completely" boolean is mainly for breakpoints. + * + * @param {boolean} completely - Destroy completely. + */ + ; + + _proto.destroy = function destroy(completely) { + var _this2 = this; + + if (completely === void 0) { + completely = true; + } + + // Postpone destroy because it should be done after mount. + if (this.State.is(CREATED)) { + this.on('ready', function () { + return _this2.destroy(completely); + }); + return; + } + + values(this.Components).reverse().forEach(function (component) { + component.destroy && component.destroy(completely); + }); + this.emit('destroy', completely); // Destroy all event handlers, including ones for native events. + + this.Event.destroy(); + this.State.set(DESTROYED); + return this; + } + /** + * Return the current slide index. + * + * @return {number} - The current slide index. + // */ + ; + + _createClass(Splide, [{ + key: "index", + get: function get() { + return this._i; + } + /** + * Set the current slide index. + * + * @param {number|string} index - A new index. + */ + , + set: function set(index) { + this._i = parseInt(index); + } + /** + * Return length of slides. + * This is an alias of Elements.length. + * + * @return {number} - A number of slides. + */ + + }, { + key: "length", + get: function get() { + return this.Components.Elements.length; + } + /** + * Return options. + * + * @return {Object} - Options object. + */ + + }, { + key: "options", + get: function get() { + return this._o; + } + /** + * Set options with merging the given object to the current one. + * + * @param {Object} options - New options. + */ + , + set: function set(options) { + var created = this.State.is(CREATED); + + if (!created) { + this.emit('update'); + } + + this._o = merge(this._o, options); + + if (!created) { + this.emit('updated', this._o); + } + } + /** + * Return the class list. + * This is an alias of Splide.options.classList. + * + * @return {Object} - An object containing all class list. + */ + + }, { + key: "classes", + get: function get() { + return this._o.classes; + } + /** + * Return the i18n strings. + * This is an alias of Splide.options.i18n. + * + * @return {Object} - An object containing all i18n strings. + */ + + }, { + key: "i18n", + get: function get() { + return this._o.i18n; + } + }]); + + return Splide; +}(); + + +;// CONCATENATED MODULE: ./src/js/components/options/index.js +/** + * The component for initializing options. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The component for initializing options. + * + * @param {Splide} Splide - A Splide instance. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const options = (function (Splide) { + /** + * Retrieve options from the data attribute. + * Note that IE10 doesn't support dataset property. + * + * @type {string} + */ + var options = getAttribute(Splide.root, 'data-splide'); + + if (options) { + try { + Splide.options = JSON.parse(options); + } catch (e) { + error(e.message); + } + } + + return { + /** + * Called when the component is mounted. + */ + mount: function mount() { + if (Splide.State.is(CREATED)) { + Splide.index = Splide.options.start; + } + } + }; +}); +;// CONCATENATED MODULE: ./src/js/constants/directions.js +/** + * Export layout modes. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Enumerate slides from left to right. + * + * @type {string} + */ +var LTR = 'ltr'; +/** + * Enumerate slides from right to left. + * + * @type {string} + */ + +var RTL = 'rtl'; +/** + * Enumerate slides in a col. + * + * @type {string} + */ + +var TTB = 'ttb'; +;// CONCATENATED MODULE: ./src/js/components/elements/slide.js +/** + * The sub component for handling each slide. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + +/** + * Events for restoring original styles. + * + * @type {string} + */ + +var STYLE_RESTORE_EVENTS = 'update.slide'; +/** + * The sub component for handling each slide. + * + * @param {Splide} Splide - A Splide instance. + * @param {number} index - An unique slide index. + * @param {number} realIndex - Clones should pass a real slide index. + * @param {Element} slide - A slide element. + * + * @return {Object} - The sub component object. + */ + +/* harmony default export */ const elements_slide = (function (Splide, index, realIndex, slide) { + /** + * Whether to update "is-active" class before or after transition. + * + * @type {boolean} + */ + var updateOnMove = Splide.options.updateOnMove; + /** + * Events when the slide status is updated. + * Append a namespace to remove listeners later. + * + * @type {string} + */ + + var STATUS_UPDATE_EVENTS = 'ready.slide updated.slide resized.slide moved.slide' + (updateOnMove ? ' move.slide' : ''); + /** + * Slide sub component object. + * + * @type {Object} + */ + + var Slide = { + /** + * Slide element. + * + * @type {Element} + */ + slide: slide, + + /** + * Slide index. + * + * @type {number} + */ + index: index, + + /** + * Real index for clones. + * + * @type {number} + */ + realIndex: realIndex, + + /** + * Container element if available. + * + * @type {Element|undefined} + */ + container: child(slide, Splide.classes.container), + + /** + * Whether this is a cloned slide or not. + * + * @type {boolean} + */ + isClone: realIndex > -1, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + if (!this.isClone) { + slide.id = Splide.root.id + "-slide" + pad(index + 1); + } + + Splide.on(STATUS_UPDATE_EVENTS, function () { + return _this.update(); + }).on(STYLE_RESTORE_EVENTS, restoreStyles).on('click', function () { + return Splide.emit('click', _this); + }, slide); + /* + * Add "is-active" class to a clone element temporarily + * and it will be removed on "moved" event. + */ + + if (updateOnMove) { + Splide.on('move.slide', function (newIndex) { + if (newIndex === realIndex) { + _update(true, false); + } + }); + } // Make sure the slide is shown. + + + applyStyle(slide, { + display: '' + }); // Hold the original styles. + + this.styles = getAttribute(slide, 'style') || ''; + }, + + /** + * Destroy. + */ + destroy: function destroy() { + Splide.off(STATUS_UPDATE_EVENTS).off(STYLE_RESTORE_EVENTS).off('click', slide); + removeClass(slide, values(STATUS_CLASSES)); + restoreStyles(); + removeAttribute(this.container, 'style'); + }, + + /** + * Update active and visible status. + */ + update: function update() { + _update(this.isActive(), false); + + _update(this.isVisible(), true); + }, + + /** + * Check whether this slide is active or not. + * + * @return {boolean} - True if the slide is active or false if not. + */ + isActive: function isActive() { + return Splide.index === index; + }, + + /** + * Check whether this slide is visible in the viewport or not. + * + * @return {boolean} - True if the slide is visible or false if not. + */ + isVisible: function isVisible() { + var active = this.isActive(); + + if (Splide.is(FADE) || active) { + return active; + } + + var ceil = Math.ceil; + var trackRect = getRect(Splide.Components.Elements.track); + var slideRect = getRect(slide); + + if (Splide.options.direction === TTB) { + return trackRect.top <= slideRect.top && slideRect.bottom <= ceil(trackRect.bottom); + } + + return trackRect.left <= slideRect.left && slideRect.right <= ceil(trackRect.right); + }, + + /** + * Calculate how far this slide is from another slide and + * return true if the distance is within the given number. + * + * @param {number} from - Index of a target slide. + * @param {number} within - True if the slide is within this number. + * + * @return {boolean} - True if the slide is within the number or false otherwise. + */ + isWithin: function isWithin(from, within) { + var diff = Math.abs(from - index); + + if (!Splide.is(SLIDE) && !this.isClone) { + diff = Math.min(diff, Splide.length - diff); + } + + return diff < within; + } + }; + /** + * Update classes for activity or visibility. + * + * @param {boolean} active - Is active/visible or not. + * @param {boolean} forVisibility - Toggle classes for activity or visibility. + */ + + function _update(active, forVisibility) { + var type = forVisibility ? 'visible' : 'active'; + var className = STATUS_CLASSES[type]; + + if (active) { + addClass(slide, className); + Splide.emit("" + type, Slide); + } else { + if (hasClass(slide, className)) { + removeClass(slide, className); + Splide.emit("" + (forVisibility ? 'hidden' : 'inactive'), Slide); + } + } + } + /** + * Restore the original styles. + */ + + + function restoreStyles() { + setAttribute(slide, 'style', Slide.styles); + } + + return Slide; +}); +;// CONCATENATED MODULE: ./src/js/components/elements/index.js +/** + * The component for main elements. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +/** + * The property name for UID stored in a window object. + * + * @type {string} + */ + +var UID_NAME = 'uid'; +/** + * The component for main elements. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const components_elements = (function (Splide, Components) { + /** + * Hold the root element. + * + * @type {Element} + */ + var root = Splide.root; + /** + * Hold the class list. + * + * @type {Object} + */ + + var classes = Splide.classes; + /** + * Store Slide objects. + * + * @type {Array} + */ + + var Slides = []; + /* + * Assign unique ID to the root element if it doesn't have the one. + * Note that IE doesn't support padStart() to fill the uid by 0. + */ + + if (!root.id) { + window.splide = window.splide || {}; + var uid = window.splide[UID_NAME] || 0; + window.splide[UID_NAME] = ++uid; + root.id = "splide" + pad(uid); + } + /** + * Elements component object. + * + * @type {Object} + */ + + + var Elements = { + /** + * Called when the component is mounted. + * Collect main elements and store them as member properties. + */ + mount: function mount() { + var _this = this; + + this.init(); + Splide.on('refresh', function () { + _this.destroy(); + + _this.init(); + }).on('updated', function () { + removeClass(root, getClasses()); + addClass(root, getClasses()); + }); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + Slides.forEach(function (Slide) { + Slide.destroy(); + }); + Slides = []; + removeClass(root, getClasses()); + }, + + /** + * Initialization. + */ + init: function init() { + var _this2 = this; + + collect(); + addClass(root, getClasses()); + this.slides.forEach(function (slide, index) { + _this2.register(slide, index, -1); + }); + }, + + /** + * Register a slide to create a Slide object and handle its behavior. + * + * @param {Element} slide - A slide element. + * @param {number} index - A unique index. This can be negative. + * @param {number} realIndex - A real index for clones. Set -1 for real slides. + */ + register: function register(slide, index, realIndex) { + var SlideObject = elements_slide(Splide, index, realIndex, slide); + SlideObject.mount(); + Slides.push(SlideObject); + }, + + /** + * Return the Slide object designated by the index. + * Note that "find" is not supported by IE. + * + * @return {Object|undefined} - A Slide object if available. Undefined if not. + */ + getSlide: function getSlide(index) { + return Slides.filter(function (Slide) { + return Slide.index === index; + })[0]; + }, + + /** + * Return all Slide objects. + * + * @param {boolean} includeClones - Whether to include cloned slides or not. + * + * @return {Object[]} - Slide objects. + */ + getSlides: function getSlides(includeClones) { + return includeClones ? Slides : Slides.filter(function (Slide) { + return !Slide.isClone; + }); + }, + + /** + * Return Slide objects belonging to the given page. + * + * @param {number} page - A page number. + * + * @return {Object[]} - An array containing Slide objects. + */ + getSlidesByPage: function getSlidesByPage(page) { + var idx = Components.Controller.toIndex(page); + var options = Splide.options; + var max = options.focus !== false ? 1 : options.perPage; + return Slides.filter(function (_ref) { + var index = _ref.index; + return idx <= index && index < idx + max; + }); + }, + + /** + * Insert a slide to a slider. + * Need to refresh Splide after adding a slide. + * + * @param {Node|string} slide - A slide element to be added. + * @param {number} index - A slide will be added at the position. + * @param {Function} callback - Called right after the slide is added to the DOM tree. + */ + add: function add(slide, index, callback) { + if (typeof slide === 'string') { + slide = domify(slide); + } + + if (slide instanceof Element) { + var ref = this.slides[index]; // This will be removed in mount() of a Slide component. + + applyStyle(slide, { + display: 'none' + }); + + if (ref) { + before(slide, ref); + this.slides.splice(index, 0, slide); + } else { + append(this.list, slide); + this.slides.push(slide); + } + + loaded(slide, function () { + callback && callback(slide); + }); + } + }, + + /** + * Remove a slide from a slider. + * Need to refresh Splide after removing a slide. + * + * @param index - Slide index. + */ + remove: function remove(index) { + dom_remove(this.slides.splice(index, 1)[0]); + }, + + /** + * Trigger the provided callback for each Slide object. + * + * @param {Function} callback - A callback function. The first argument will be the Slide object. + */ + each: function each(callback) { + Slides.forEach(callback); + }, + + /** + * Return slides length without clones. + * + * @return {number} - Slide length. + */ + get length() { + return this.slides.length; + }, + + /** + * Return "SlideObjects" length including clones. + * + * @return {number} - Slide length including clones. + */ + get total() { + return Slides.length; + } + + }; + /** + * Collect elements. + */ + + function collect() { + Elements.slider = child(root, classes.slider); + Elements.track = find(root, "." + classes.track); + Elements.list = child(Elements.track, classes.list); + exist(Elements.track && Elements.list, 'Track or list was not found.'); + Elements.slides = children(Elements.list, classes.slide); + var arrows = findParts(classes.arrows); + Elements.arrows = { + prev: find(arrows, "." + classes.prev), + next: find(arrows, "." + classes.next) + }; + var autoplay = findParts(classes.autoplay); + Elements.bar = find(findParts(classes.progress), "." + classes.bar); + Elements.play = find(autoplay, "." + classes.play); + Elements.pause = find(autoplay, "." + classes.pause); + Elements.track.id = Elements.track.id || root.id + "-track"; + Elements.list.id = Elements.list.id || root.id + "-list"; + } + /** + * Return class names for the root element. + */ + + + function getClasses() { + var rootClass = classes.root; + var options = Splide.options; + return [rootClass + "--" + options.type, rootClass + "--" + options.direction, options.drag ? rootClass + "--draggable" : '', options.isNavigation ? rootClass + "--nav" : '', STATUS_CLASSES.active]; + } + /** + * Find parts only from children of the root or track. + * + * @return {Element} - A found element or undefined. + */ + + + function findParts(className) { + return child(root, className) || child(Elements.slider, className); + } + + return Elements; +}); +;// CONCATENATED MODULE: ./src/js/components/controller/index.js +/** + * The component for controlling the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +var floor = Math.floor; +/** + * The component for controlling the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const controller = (function (Splide, Components) { + /** + * Store current options. + * + * @type {Object} + */ + var options; + /** + * True if the slide is LOOP mode. + * + * @type {boolean} + */ + + var isLoop; + /** + * Controller component object. + * + * @type {Object} + */ + + var Controller = { + /** + * Called when the component is mounted. + */ + mount: function mount() { + options = Splide.options; + isLoop = Splide.is(LOOP); + bind(); + }, + + /** + * Make track run by the given control. + * - "+{i}" : Increment the slide index by i. + * - "-{i}" : Decrement the slide index by i. + * - "{i}" : Go to the slide whose index is i. + * - ">" : Go to next page. + * - "<" : Go to prev page. + * - ">{i}" : Go to page i. + * + * @param {string|number} control - A control pattern. + * @param {boolean} silently - Go to the destination without event emission. + */ + go: function go(control, silently) { + var destIndex = this.trim(this.parse(control)); + Components.Track.go(destIndex, this.rewind(destIndex), silently); + }, + + /** + * Parse the given control and return the destination index for the track. + * + * @param {string} control - A control target pattern. + * + * @return {number} - A parsed target. + */ + parse: function parse(control) { + var index = Splide.index; + var matches = String(control).match(/([+\-<>]+)(\d+)?/); + var indicator = matches ? matches[1] : ''; + var number = matches ? parseInt(matches[2]) : 0; + + switch (indicator) { + case '+': + index += number || 1; + break; + + case '-': + index -= number || 1; + break; + + case '>': + case '<': + index = parsePage(number, index, indicator === '<'); + break; + + default: + index = parseInt(control); + } + + return index; + }, + + /** + * Compute index from the given page number. + * + * @param {number} page - Page number. + * + * @return {number} - A computed page number. + */ + toIndex: function toIndex(page) { + if (hasFocus()) { + return page; + } + + var length = Splide.length; + var perPage = options.perPage; + var index = page * perPage; + index = index - (this.pageLength * perPage - length) * floor(index / length); // Adjustment for the last page. + + if (length - perPage <= index && index < length) { + index = length - perPage; + } + + return index; + }, + + /** + * Compute page number from the given slide index. + * + * @param {number} index - Slide index. + * + * @return {number} - A computed page number. + */ + toPage: function toPage(index) { + if (hasFocus()) { + return index; + } + + var length = Splide.length; + var perPage = options.perPage; // Make the last "perPage" number of slides belong to the last page. + + if (length - perPage <= index && index < length) { + return floor((length - 1) / perPage); + } + + return floor(index / perPage); + }, + + /** + * Trim the given index according to the current mode. + * Index being returned could be less than 0 or greater than the length in Loop mode. + * + * @param {number} index - An index being trimmed. + * + * @return {number} - A trimmed index. + */ + trim: function trim(index) { + if (!isLoop) { + index = options.rewind ? this.rewind(index) : between(index, 0, this.edgeIndex); + } + + return index; + }, + + /** + * Rewind the given index if it's out of range. + * + * @param {number} index - An index. + * + * @return {number} - A rewound index. + */ + rewind: function rewind(index) { + var edge = this.edgeIndex; + + if (isLoop) { + while (index > edge) { + index -= edge + 1; + } + + while (index < 0) { + index += edge + 1; + } + } else { + if (index > edge) { + index = 0; + } else if (index < 0) { + index = edge; + } + } + + return index; + }, + + /** + * Check if the direction is "rtl" or not. + * + * @return {boolean} - True if "rtl" or false if not. + */ + isRtl: function isRtl() { + return options.direction === RTL; + }, + + /** + * Return the page length. + * + * @return {number} - Max page number. + */ + get pageLength() { + var length = Splide.length; + return hasFocus() ? length : Math.ceil(length / options.perPage); + }, + + /** + * Return the edge index. + * + * @return {number} - Edge index. + */ + get edgeIndex() { + var length = Splide.length; + + if (!length) { + return 0; + } + + if (hasFocus() || options.isNavigation || isLoop) { + return length - 1; + } + + return length - options.perPage; + }, + + /** + * Return the index of the previous slide. + * + * @return {number} - The index of the previous slide if available. -1 otherwise. + */ + get prevIndex() { + var prev = Splide.index - 1; + + if (isLoop || options.rewind) { + prev = this.rewind(prev); + } + + return prev > -1 ? prev : -1; + }, + + /** + * Return the index of the next slide. + * + * @return {number} - The index of the next slide if available. -1 otherwise. + */ + get nextIndex() { + var next = Splide.index + 1; + + if (isLoop || options.rewind) { + next = this.rewind(next); + } + + return Splide.index < next && next <= this.edgeIndex || next === 0 ? next : -1; + } + + }; + /** + * Listen to some events. + */ + + function bind() { + Splide.on('move', function (newIndex) { + Splide.index = newIndex; + }).on('updated refresh', function (newOptions) { + options = newOptions || options; + Splide.index = between(Splide.index, 0, Controller.edgeIndex); + }); + } + /** + * Verify if the focus option is available or not. + * + * @return {boolean} - True if a slider has the focus option. + */ + + + function hasFocus() { + return options.focus !== false; + } + /** + * Return the next or previous page index computed by the page number and current index. + * + * @param {number} number - Specify the page number. + * @param {number} index - Current index. + * @param {boolean} prev - Prev or next. + * + * @return {number} - Slide index. + */ + + + function parsePage(number, index, prev) { + if (number > -1) { + return Controller.toIndex(number); + } + + var perMove = options.perMove; + var sign = prev ? -1 : 1; + + if (perMove) { + return index + perMove * sign; + } + + return Controller.toIndex(Controller.toPage(index) + sign); + } + + return Controller; +}); +;// CONCATENATED MODULE: ./src/js/components/track/index.js +/** + * The component for moving list in the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +var abs = Math.abs; +/** + * The component for moving list in the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const track = (function (Splide, Components) { + /** + * Hold the Layout component. + * + * @type {Object} + */ + var Layout; + /** + * Hold the Layout component. + * + * @type {Object} + */ + + var Elements; + /** + * Store the list element. + * + * @type {Element} + */ + + var list; + /** + * Whether the current direction is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Whether the slider type is FADE or not. + * + * @type {boolean} + */ + + var isFade = Splide.is(FADE); + /** + * Whether the slider direction is RTL or not. + * + * @type {boolean} + */ + + var isRTL = Splide.options.direction === RTL; + /** + * This will be true while transitioning from the last index to the first one. + * + * @type {boolean} + */ + + var isLoopPending = false; + /** + * Sign for the direction. Only RTL mode uses the positive sign. + * + * @type {number} + */ + + var sign = isRTL ? 1 : -1; + /** + * Track component object. + * + * @type {Object} + */ + + var Track = { + /** + * Make public the sign defined locally. + * + * @type {number} + */ + sign: sign, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Elements = Components.Elements; + Layout = Components.Layout; + list = Elements.list; + }, + + /** + * Called after the component is mounted. + * The resize event must be registered after the Layout's one is done. + */ + mounted: function mounted() { + var _this = this; + + if (!isFade) { + this.jump(0); + Splide.on('mounted resize updated', function () { + _this.jump(Splide.index); + }); + } + }, + + /** + * Go to the given destination index. + * After arriving there, the track is jump to the new index without animation, mainly for loop mode. + * + * @param {number} destIndex - A destination index. + * This can be negative or greater than slides length for reaching clones. + * @param {number} newIndex - An actual new index. They are always same in Slide and Rewind mode. + * @param {boolean} silently - If true, suppress emitting events. + */ + go: function go(destIndex, newIndex, silently) { + var newPosition = getTrimmedPosition(destIndex); + var prevIndex = Splide.index; // Prevent any actions while transitioning from the last index to the first one for jump. + + if (Splide.State.is(MOVING) && isLoopPending) { + return; + } + + isLoopPending = destIndex !== newIndex; + + if (!silently) { + Splide.emit('move', newIndex, prevIndex, destIndex); + } + + if (Math.abs(newPosition - this.position) >= 1 || isFade) { + Components.Transition.start(destIndex, newIndex, prevIndex, this.toCoord(newPosition), function () { + onTransitionEnd(destIndex, newIndex, prevIndex, silently); + }); + } else { + if (destIndex !== prevIndex && Splide.options.trimSpace === 'move') { + Components.Controller.go(destIndex + destIndex - prevIndex, silently); + } else { + onTransitionEnd(destIndex, newIndex, prevIndex, silently); + } + } + }, + + /** + * Move the track to the specified index. + * + * @param {number} index - A destination index where the track jumps. + */ + jump: function jump(index) { + this.translate(getTrimmedPosition(index)); + }, + + /** + * Set the list position by CSS translate property. + * + * @param {number} position - A new position value. + */ + translate: function translate(position) { + applyStyle(list, { + transform: "translate" + (isVertical ? 'Y' : 'X') + "(" + position + "px)" + }); + }, + + /** + * Cancel the transition and set the list position. + * Also, loop the slider if necessary. + */ + cancel: function cancel() { + if (Splide.is(LOOP)) { + this.shift(); + } else { + // Ensure the current position. + this.translate(this.position); + } + + applyStyle(list, { + transition: '' + }); + }, + + /** + * Shift the slider if it exceeds borders on the edge. + */ + shift: function shift() { + var position = abs(this.position); + var left = abs(this.toPosition(0)); + var right = abs(this.toPosition(Splide.length)); + var innerSize = right - left; + + if (position < left) { + position += innerSize; + } else if (position > right) { + position -= innerSize; + } + + this.translate(sign * position); + }, + + /** + * Trim redundant spaces on the left or right edge if necessary. + * + * @param {number} position - Position value to be trimmed. + * + * @return {number} - Trimmed position. + */ + trim: function trim(position) { + if (!Splide.options.trimSpace || Splide.is(LOOP)) { + return position; + } + + var edge = sign * (Layout.totalSize() - Layout.size - Layout.gap); + return between(position, edge, 0); + }, + + /** + * Calculate the closest slide index from the given position. + * + * @param {number} position - A position converted to an slide index. + * + * @return {number} - The closest slide index. + */ + toIndex: function toIndex(position) { + var _this2 = this; + + var index = 0; + var minDistance = Infinity; + Elements.getSlides(true).forEach(function (Slide) { + var slideIndex = Slide.index; + var distance = abs(_this2.toPosition(slideIndex) - position); + + if (distance < minDistance) { + minDistance = distance; + index = slideIndex; + } + }); + return index; + }, + + /** + * Return coordinates object by the given position. + * + * @param {number} position - A position value. + * + * @return {Object} - A coordinates object. + */ + toCoord: function toCoord(position) { + return { + x: isVertical ? 0 : position, + y: isVertical ? position : 0 + }; + }, + + /** + * Calculate the track position by a slide index. + * + * @param {number} index - Slide index. + * + * @return {Object} - Calculated position. + */ + toPosition: function toPosition(index) { + var position = Layout.totalSize(index) - Layout.slideSize(index) - Layout.gap; + return sign * (position + this.offset(index)); + }, + + /** + * Return the current offset value, considering direction. + * + * @return {number} - Offset amount. + */ + offset: function offset(index) { + var focus = Splide.options.focus; + var slideSize = Layout.slideSize(index); + + if (focus === 'center') { + return -(Layout.size - slideSize) / 2; + } + + return -(parseInt(focus) || 0) * (slideSize + Layout.gap); + }, + + /** + * Return the current position. + * This returns the correct position even while transitioning by CSS. + * + * @return {number} - Current position. + */ + get position() { + var prop = isVertical ? 'top' : isRTL ? 'right' : 'left'; + return getRect(list)[prop] - (getRect(Elements.track)[prop] - Layout.padding[prop] * sign); + } + + }; + /** + * Called whenever slides arrive at a destination. + * + * @param {number} destIndex - A destination index. + * @param {number} newIndex - A new index. + * @param {number} prevIndex - A previous index. + * @param {boolean} silently - If true, suppress emitting events. + */ + + function onTransitionEnd(destIndex, newIndex, prevIndex, silently) { + applyStyle(list, { + transition: '' + }); + isLoopPending = false; + + if (!isFade) { + Track.jump(newIndex); + } + + if (!silently) { + Splide.emit('moved', newIndex, prevIndex, destIndex); + } + } + /** + * Convert index to the trimmed position. + * + * @return {number} - Trimmed position. + */ + + + function getTrimmedPosition(index) { + return Track.trim(Track.toPosition(index)); + } + + return Track; +}); +;// CONCATENATED MODULE: ./src/js/components/clones/index.js +/** + * The component for cloning some slides for "loop" mode of the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + +/** + * The component for cloning some slides for "loop" mode of the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const clones = (function (Splide, Components) { + /** + * Store information of all clones. + * + * @type {Array} + */ + var clones = []; + /** + * Store the current clone count on one side. + * + * @type {number} + */ + + var cloneCount = 0; + /** + * Keep Elements component. + * + * @type {Object} + */ + + var Elements = Components.Elements; + /** + * Clones component object. + * + * @type {Object} + */ + + var Clones = { + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + if (Splide.is(LOOP)) { + init(); + Splide.on('refresh:before', function () { + _this.destroy(); + }).on('refresh', init).on('resize', function () { + if (cloneCount !== getCloneCount()) { + // Destroy before refresh not to collect clones by the Elements component. + _this.destroy(); + + Splide.refresh(); + } + }); + } + }, + + /** + * Destroy. + */ + destroy: function destroy() { + dom_remove(clones); + clones = []; + }, + + /** + * Return all clones. + * + * @return {Element[]} - Cloned elements. + */ + get clones() { + return clones; + }, + + /** + * Return clone length. + * + * @return {number} - A length of clones. + */ + get length() { + return clones.length; + } + + }; + /** + * Initialization. + */ + + function init() { + Clones.destroy(); + cloneCount = getCloneCount(); + generateClones(cloneCount); + } + /** + * Generate and append/prepend clones. + * + * @param {number} count - The half number of clones. + */ + + + function generateClones(count) { + var length = Elements.length, + register = Elements.register; + + if (length) { + var slides = Elements.slides; + + while (slides.length < count) { + slides = slides.concat(slides); + } // Clones after the last element. + + + slides.slice(0, count).forEach(function (elm, index) { + var clone = cloneDeeply(elm); + append(Elements.list, clone); + clones.push(clone); + register(clone, index + length, index % length); + }); // Clones before the first element. + + slides.slice(-count).forEach(function (elm, index) { + var clone = cloneDeeply(elm); + before(clone, slides[0]); + clones.push(clone); + register(clone, index - count, (length + index - count % length) % length); + }); + } + } + /** + * Return half count of clones to be generated. + * Clone count is determined by: + * - "clones" value in the options. + * - Number of slides that can be placed in a view in "fixed" mode. + * - Max pages a flick action can move. + * - Whether the slide length is enough for perPage. + * + * @return {number} - Count for clones. + */ + + + function getCloneCount() { + var options = Splide.options; + + if (options.clones) { + return options.clones; + } // Use the slide length in autoWidth mode because the number cannot be calculated. + + + var baseCount = options.autoWidth || options.autoHeight ? Elements.length : options.perPage; + var dimension = options.direction === TTB ? 'Height' : 'Width'; + var fixedSize = toPixel(Splide.root, options["fixed" + dimension]); + + if (fixedSize) { + // Roughly calculate the count. This needs not to be strict. + baseCount = Math.ceil(Elements.track["client" + dimension] / fixedSize); + } + + return baseCount * (options.drag ? options.flickMaxPages + 1 : 1); + } + /** + * Clone deeply the given element. + * + * @param {Element} elm - An element being duplicated. + * + * @return {Node} - A cloned node(element). + */ + + + function cloneDeeply(elm) { + var clone = elm.cloneNode(true); + addClass(clone, Splide.classes.clone); // ID should not be duplicated. + + removeAttribute(clone, 'id'); + return clone; + } + + return Clones; +}); +;// CONCATENATED MODULE: ./src/js/components/layout/directions/horizontal.js +/** + * The resolver component for horizontal layout. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The resolver component for horizontal layout. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The resolver object. + */ + +/* harmony default export */ const horizontal = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Keep the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Keep the track element. + * + * @type {Element} + */ + + var track; + /** + * Keep the latest options. + * + * @type {Element} + */ + + var options = Splide.options; + return { + /** + * Margin property name. + * + * @type {string} + */ + margin: 'margin' + (options.direction === RTL ? 'Left' : 'Right'), + + /** + * Always 0 because the height will be determined by inner contents. + * + * @type {number} + */ + height: 0, + + /** + * Initialization. + */ + init: function init() { + this.resize(); + }, + + /** + * Resize gap and padding. + * This must be called on init. + */ + resize: function resize() { + options = Splide.options; + track = Elements.track; + this.gap = toPixel(root, options.gap); + var padding = options.padding; + var left = toPixel(root, padding.left || padding); + var right = toPixel(root, padding.right || padding); + this.padding = { + left: left, + right: right + }; + applyStyle(track, { + paddingLeft: unit(left), + paddingRight: unit(right) + }); + }, + + /** + * Return total width from the left of the list to the right of the slide specified by the provided index. + * + * @param {number} index - Optional. A slide index. If undefined, total width of the slider will be returned. + * + * @return {number} - Total width to the right side of the specified slide, or 0 for an invalid index. + */ + totalWidth: function totalWidth(index) { + if (index === void 0) { + index = Splide.length - 1; + } + + var Slide = Elements.getSlide(index); + var width = 0; + + if (Slide) { + var slideRect = getRect(Slide.slide); + var listRect = getRect(Elements.list); + + if (options.direction === RTL) { + width = listRect.right - slideRect.left; + } else { + width = slideRect.right - listRect.left; + } + + width += this.gap; + } + + return width; + }, + + /** + * Return the slide width in px. + * + * @param {number} index - Slide index. + * + * @return {number} - The slide width. + */ + slideWidth: function slideWidth(index) { + if (options.autoWidth) { + var Slide = Elements.getSlide(index); + return Slide ? Slide.slide.offsetWidth : 0; + } + + var width = options.fixedWidth || (this.width + this.gap) / options.perPage - this.gap; + return toPixel(root, width); + }, + + /** + * Return the slide height in px. + * + * @return {number} - The slide height. + */ + slideHeight: function slideHeight() { + var height = options.height || options.fixedHeight || this.width * options.heightRatio; + return toPixel(root, height); + }, + + /** + * Return slider width without padding. + * + * @return {number} - Current slider width. + */ + get width() { + return track.clientWidth - this.padding.left - this.padding.right; + } + + }; +}); +;// CONCATENATED MODULE: ./src/js/components/layout/directions/vertical.js +/** + * The resolver component for vertical layout. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The resolver component for vertical layout. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The resolver object. + */ + +/* harmony default export */ const vertical = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Keep the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Keep the track element. + * + * @type {Element} + */ + + var track; + /** + * Keep the latest options. + * + * @type {Element} + */ + + var options; + return { + /** + * Margin property name. + * + * @type {string} + */ + margin: 'marginBottom', + + /** + * Initialization. + */ + init: function init() { + this.resize(); + }, + + /** + * Resize gap and padding. + * This must be called on init. + */ + resize: function resize() { + options = Splide.options; + track = Elements.track; + this.gap = toPixel(root, options.gap); + var padding = options.padding; + var top = toPixel(root, padding.top || padding); + var bottom = toPixel(root, padding.bottom || padding); + this.padding = { + top: top, + bottom: bottom + }; + applyStyle(track, { + paddingTop: unit(top), + paddingBottom: unit(bottom) + }); + }, + + /** + * Return total height from the top of the list to the bottom of the slide specified by the provided index. + * + * @param {number} index - Optional. A slide index. If undefined, total height of the slider will be returned. + * + * @return {number} - Total height to the bottom of the specified slide, or 0 for an invalid index. + */ + totalHeight: function totalHeight(index) { + if (index === void 0) { + index = Splide.length - 1; + } + + var Slide = Elements.getSlide(index); + + if (Slide) { + return getRect(Slide.slide).bottom - getRect(Elements.list).top + this.gap; + } + + return 0; + }, + + /** + * Return the slide width in px. + * + * @return {number} - The slide width. + */ + slideWidth: function slideWidth() { + return toPixel(root, options.fixedWidth || this.width); + }, + + /** + * Return the slide height in px. + * + * @param {number} index - Slide index. + * + * @return {number} - The slide height. + */ + slideHeight: function slideHeight(index) { + if (options.autoHeight) { + var Slide = Elements.getSlide(index); + return Slide ? Slide.slide.offsetHeight : 0; + } + + var height = options.fixedHeight || (this.height + this.gap) / options.perPage - this.gap; + return toPixel(root, height); + }, + + /** + * Return slider width without padding. + * + * @return {number} - Current slider width. + */ + get width() { + return track.clientWidth; + }, + + /** + * Return slide height without padding. + * + * @return {number} - Slider height. + */ + get height() { + var height = options.height || this.width * options.heightRatio; + exist(height, '"height" or "heightRatio" is missing.'); + return toPixel(root, height) - this.padding.top - this.padding.bottom; + } + + }; +}); +;// CONCATENATED MODULE: ./src/js/utils/time.js +/** + * A package of utility functions related with time. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Simple throttle function that controls how often the given function is executed. + * + * @param {function} func - A function to be throttled. + * @param {number} wait - Time in millisecond for interval of execution. + * + * @return {Function} - A debounced function. + */ +function throttle(func, wait) { + var timeout; // Declare function by the "function" keyword to prevent "this" from being inherited. + + return function () { + if (!timeout) { + timeout = setTimeout(function () { + func(); + timeout = null; + }, wait); + } + }; +} +/** + * Custom setInterval function that provides progress rate as callback. + * + * @param {function} callback - A callback function fired every time the interval time passes. + * @param {number} interval - Interval duration in milliseconds. + * @param {function} progress - A callback function fired whenever the progress goes. + * + * @return {Object} - An object containing play() and pause() functions. + */ + +function createInterval(callback, interval, progress) { + var _window = window, + requestAnimationFrame = _window.requestAnimationFrame; + var start, + elapse, + rate, + _pause = true; + + var step = function step(timestamp) { + if (!_pause) { + if (!start) { + start = timestamp; + + if (rate && rate < 1) { + start -= rate * interval; + } + } + + elapse = timestamp - start; + rate = elapse / interval; + + if (elapse >= interval) { + start = 0; + rate = 1; + callback(); + } + + if (progress) { + progress(rate); + } + + requestAnimationFrame(step); + } + }; + + return { + pause: function pause() { + _pause = true; + start = 0; + }, + play: function play(reset) { + start = 0; + + if (reset) { + rate = 0; + } + + if (_pause) { + _pause = false; + requestAnimationFrame(step); + } + } + }; +} +;// CONCATENATED MODULE: ./src/js/components/layout/index.js +/** + * The component for handing slide layouts and their sizes. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + + +/** + * The component for handing slide layouts and their sizes. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const layout = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Whether the slider is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Layout component object. + * + * @type {Object} + */ + + var Layout = object_assign({ + /** + * Called when the component is mounted. + */ + mount: function mount() { + bind(); + init(); // The word "size" means width for a horizontal slider and height for a vertical slider. + + this.totalSize = isVertical ? this.totalHeight : this.totalWidth; + this.slideSize = isVertical ? this.slideHeight : this.slideWidth; + }, + + /** + * Destroy the component. + */ + destroy: function destroy() { + removeAttribute([Elements.list, Elements.track], 'style'); + }, + + /** + * Return the slider height on the vertical mode or width on the horizontal mode. + * + * @return {number} + */ + get size() { + return isVertical ? this.height : this.width; + } + + }, isVertical ? vertical(Splide, Components) : horizontal(Splide, Components)); + /** + * Init slider styles according to options. + */ + + function init() { + Layout.init(); + applyStyle(Splide.root, { + maxWidth: unit(Splide.options.width) + }); + Elements.each(function (Slide) { + Slide.slide.style[Layout.margin] = unit(Layout.gap); + }); + resize(); + } + /** + * Listen the resize native event with throttle. + * Initialize when the component is mounted or options are updated. + */ + + + function bind() { + Splide.on('resize load', throttle(function () { + Splide.emit('resize'); + }, Splide.options.throttle), window).on('resize', resize).on('updated refresh', init); + } + /** + * Resize the track and slide elements. + */ + + + function resize() { + var options = Splide.options; + Layout.resize(); + applyStyle(Elements.track, { + height: unit(Layout.height) + }); + var slideHeight = options.autoHeight ? null : unit(Layout.slideHeight()); + Elements.each(function (Slide) { + applyStyle(Slide.container, { + height: slideHeight + }); + applyStyle(Slide.slide, { + width: options.autoWidth ? null : unit(Layout.slideWidth(Slide.index)), + height: Slide.container ? null : slideHeight + }); + }); + Splide.emit('resized'); + } + + return Layout; +}); +;// CONCATENATED MODULE: ./src/js/components/drag/index.js +/** + * The component for supporting mouse drag and swipe. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +var drag_abs = Math.abs; +/** + * If the absolute velocity is greater thant this value, + * a slider always goes to a different slide after drag, not allowed to stay on a current slide. + */ + +var MIN_VELOCITY = 0.1; +/** + * Adjust how much the track can be pulled on the first or last page. + * The larger number this is, the farther the track moves. + * This should be around 5 - 9. + * + * @type {number} + */ + +var FRICTION_REDUCER = 7; +/** + * The component supporting mouse drag and swipe. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const drag = (function (Splide, Components) { + /** + * Store the Move component. + * + * @type {Object} + */ + var Track = Components.Track; + /** + * Store the Controller component. + * + * @type {Object} + */ + + var Controller = Components.Controller; + /** + * Coordinate of the track on starting drag. + * + * @type {Object} + */ + + var startCoord; + /** + * Analyzed info on starting drag. + * + * @type {Object|null} + */ + + var startInfo; + /** + * Analyzed info being updated while dragging/swiping. + * + * @type {Object} + */ + + var currentInfo; + /** + * Determine whether slides are being dragged or not. + * + * @type {boolean} + */ + + var isDragging; + /** + * Whether the slider direction is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Axis for the direction. + * + * @type {string} + */ + + var axis = isVertical ? 'y' : 'x'; + /** + * Drag component object. + * + * @type {Object} + */ + + var Drag = { + /** + * Whether dragging is disabled or not. + * + * @type {boolean} + */ + disabled: false, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + var Elements = Components.Elements; + var track = Elements.track; + Splide.on('touchstart mousedown', start, track).on('touchmove mousemove', move, track, { + passive: false + }).on('touchend touchcancel mouseleave mouseup dragend', end, track).on('mounted refresh', function () { + // Prevent dragging an image or anchor itself. + each(Elements.list.querySelectorAll('img, a'), function (elm) { + Splide.off('dragstart', elm).on('dragstart', function (e) { + e.preventDefault(); + }, elm, { + passive: false + }); + }); + }).on('mounted updated', function () { + _this.disabled = !Splide.options.drag; + }); + } + }; + /** + * Called when the track starts to be dragged. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + function start(e) { + if (!Drag.disabled && !isDragging) { + // These prams are used to evaluate whether the slider should start moving. + init(e); + } + } + /** + * Initialize parameters. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + + function init(e) { + startCoord = Track.toCoord(Track.position); + startInfo = analyze(e, {}); + currentInfo = startInfo; + } + /** + * Called while the track being dragged. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + + function move(e) { + if (startInfo) { + currentInfo = analyze(e, startInfo); + + if (isDragging) { + if (e.cancelable) { + e.preventDefault(); + } + + if (!Splide.is(FADE)) { + var position = startCoord[axis] + currentInfo.offset[axis]; + Track.translate(resist(position)); + } + } else { + if (shouldMove(currentInfo)) { + Splide.emit('drag', startInfo); + isDragging = true; + Track.cancel(); // These params are actual drag data. + + init(e); + } + } + } + } + /** + * Determine whether to start moving the track or not by drag angle. + * + * @param {Object} info - An information object. + * + * @return {boolean} - True if the track should be moved or false if not. + */ + + + function shouldMove(_ref) { + var offset = _ref.offset; + + if (Splide.State.is(MOVING) && Splide.options.waitForTransition) { + return false; + } + + var angle = Math.atan(drag_abs(offset.y) / drag_abs(offset.x)) * 180 / Math.PI; + + if (isVertical) { + angle = 90 - angle; + } + + return angle < Splide.options.dragAngleThreshold; + } + /** + * Resist dragging the track on the first/last page because there is no more. + * + * @param {number} position - A position being applied to the track. + * + * @return {Object} - Adjusted position. + */ + + + function resist(position) { + if (Splide.is(SLIDE)) { + var sign = Track.sign; + + var _start = sign * Track.trim(Track.toPosition(0)); + + var _end = sign * Track.trim(Track.toPosition(Controller.edgeIndex)); + + position *= sign; + + if (position < _start) { + position = _start - FRICTION_REDUCER * Math.log(_start - position); + } else if (position > _end) { + position = _end + FRICTION_REDUCER * Math.log(position - _end); + } + + position *= sign; + } + + return position; + } + /** + * Called when dragging ends. + */ + + + function end() { + startInfo = null; + + if (isDragging) { + Splide.emit('dragged', currentInfo); + go(currentInfo); + isDragging = false; + } + } + /** + * Go to the slide determined by the analyzed data. + * + * @param {Object} info - An info object. + */ + + + function go(info) { + var velocity = info.velocity[axis]; + var absV = drag_abs(velocity); + + if (absV > 0) { + var options = Splide.options; + var index = Splide.index; + var sign = velocity < 0 ? -1 : 1; + var destIndex = index; + + if (!Splide.is(FADE)) { + var destination = Track.position; + + if (absV > options.flickVelocityThreshold && drag_abs(info.offset[axis]) < options.swipeDistanceThreshold) { + destination += sign * Math.min(absV * options.flickPower, Components.Layout.size * (options.flickMaxPages || 1)); + } + + destIndex = Track.toIndex(destination); + } + /* + * Do not allow the track to go to a previous position if there is enough velocity. + * Always use the adjacent index for the fade mode. + */ + + + if (destIndex === index && absV > MIN_VELOCITY) { + destIndex = index + sign * Track.sign; + } + + if (Splide.is(SLIDE)) { + destIndex = between(destIndex, 0, Controller.edgeIndex); + } + + Controller.go(destIndex, options.isNavigation); + } + } + /** + * Analyze the given event object and return important information for handling swipe behavior. + * + * @param {Event} e - Touch or Mouse event object. + * @param {Object} startInfo - Information analyzed on start for calculating difference from the current one. + * + * @return {Object} - An object containing analyzed information, such as offset, velocity, etc. + */ + + + function analyze(e, startInfo) { + var timeStamp = e.timeStamp, + touches = e.touches; + + var _ref2 = touches ? touches[0] : e, + clientX = _ref2.clientX, + clientY = _ref2.clientY; + + var _ref3 = startInfo.to || {}, + _ref3$x = _ref3.x, + fromX = _ref3$x === void 0 ? clientX : _ref3$x, + _ref3$y = _ref3.y, + fromY = _ref3$y === void 0 ? clientY : _ref3$y; + + var startTime = startInfo.time || 0; + var offset = { + x: clientX - fromX, + y: clientY - fromY + }; + var duration = timeStamp - startTime; + var velocity = { + x: offset.x / duration, + y: offset.y / duration + }; + return { + to: { + x: clientX, + y: clientY + }, + offset: offset, + time: timeStamp, + velocity: velocity + }; + } + + return Drag; +}); +;// CONCATENATED MODULE: ./src/js/components/click/index.js +/** + * The component for handling a click event. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The component for handling a click event. + * Click should be disabled during drag/swipe. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ +/* harmony default export */ const click = (function (Splide, Components) { + /** + * Whether click is disabled or not. + * + * @type {boolean} + */ + var disabled = false; + /** + * Click component object. + * + * @type {Object} + */ + + var Click = { + /** + * Mount only when the drag is activated and the slide type is not "fade". + * + * @type {boolean} + */ + required: Splide.options.drag, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Splide.on('click', onClick, Components.Elements.track, { + capture: true + }).on('drag', function () { + disabled = true; + }).on('dragged', function () { + // Make sure the flag is released after the click event is fired. + setTimeout(function () { + disabled = false; + }); + }); + } + }; + /** + * Called when a track element is clicked. + * + * @param {Event} e - A click event. + */ + + function onClick(e) { + if (disabled) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + + return Click; +}); +;// CONCATENATED MODULE: ./src/js/components/autoplay/index.js +/** + * The component for playing slides automatically. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * Set of pause flags. + */ + +var PAUSE_FLAGS = { + HOVER: 1, + FOCUS: 2, + MANUAL: 3 +}; +/** + * The component for playing slides automatically. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * @param {string} name - A component name as a lowercase string. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const autoplay = (function (Splide, Components, name) { + /** + * Store pause flags. + * + * @type {Array} + */ + var flags = []; + /** + * Store an interval object. + * + * @type {Object}; + */ + + var interval; + /** + * Keep the Elements component. + * + * @type {string} + */ + + var Elements = Components.Elements; + /** + * Autoplay component object. + * + * @type {Object} + */ + + var Autoplay = { + /** + * Required only when the autoplay option is true. + * + * @type {boolean} + */ + required: Splide.options.autoplay, + + /** + * Called when the component is mounted. + * Note that autoplay starts only if there are slides over perPage number. + */ + mount: function mount() { + var options = Splide.options; + + if (Elements.slides.length > options.perPage) { + interval = createInterval(function () { + Splide.go('>'); + }, options.interval, function (rate) { + Splide.emit(name + ":playing", rate); + + if (Elements.bar) { + applyStyle(Elements.bar, { + width: rate * 100 + "%" + }); + } + }); + bind(); + this.play(); + } + }, + + /** + * Start autoplay. + * + * @param {number} flag - A pause flag to be removed. + */ + play: function play(flag) { + if (flag === void 0) { + flag = 0; + } + + flags = flags.filter(function (f) { + return f !== flag; + }); + + if (!flags.length) { + Splide.emit(name + ":play"); + interval.play(Splide.options.resetProgress); + } + }, + + /** + * Pause autoplay. + * Note that Array.includes is not supported by IE. + * + * @param {number} flag - A pause flag to be added. + */ + pause: function pause(flag) { + if (flag === void 0) { + flag = 0; + } + + interval.pause(); + + if (flags.indexOf(flag) === -1) { + flags.push(flag); + } + + if (flags.length === 1) { + Splide.emit(name + ":pause"); + } + } + }; + /** + * Listen some events. + */ + + function bind() { + var options = Splide.options; + var sibling = Splide.sibling; + var elms = [Splide.root, sibling ? sibling.root : null]; + + if (options.pauseOnHover) { + switchOn(elms, 'mouseleave', PAUSE_FLAGS.HOVER, true); + switchOn(elms, 'mouseenter', PAUSE_FLAGS.HOVER, false); + } + + if (options.pauseOnFocus) { + switchOn(elms, 'focusout', PAUSE_FLAGS.FOCUS, true); + switchOn(elms, 'focusin', PAUSE_FLAGS.FOCUS, false); + } + + if (Elements.play) { + Splide.on('click', function () { + // Need to be removed a focus flag at first. + Autoplay.play(PAUSE_FLAGS.FOCUS); + Autoplay.play(PAUSE_FLAGS.MANUAL); + }, Elements.play); + } + + if (Elements.pause) { + switchOn([Elements.pause], 'click', PAUSE_FLAGS.MANUAL, false); + } + + Splide.on('move refresh', function () { + Autoplay.play(); + }) // Rewind the timer. + .on('destroy', function () { + Autoplay.pause(); + }); + } + /** + * Play or pause on the given event. + * + * @param {Element[]} elms - Elements. + * @param {string} event - An event name or names. + * @param {number} flag - A pause flag defined on the top. + * @param {boolean} play - Determine whether to play or pause. + */ + + + function switchOn(elms, event, flag, play) { + elms.forEach(function (elm) { + Splide.on(event, function () { + Autoplay[play ? 'play' : 'pause'](flag); + }, elm); + }); + } + + return Autoplay; +}); +;// CONCATENATED MODULE: ./src/js/components/cover/index.js +/** + * The component for change an img element to background image of its wrapper. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The component for change an img element to background image of its wrapper. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const cover = (function (Splide, Components) { + /** + * Hold options. + * + * @type {Object} + */ + var options = Splide.options; + /** + * Cover component object. + * + * @type {Object} + */ + + var Cover = { + /** + * Required only when "cover" option is true. + * + * @type {boolean} + */ + required: options.cover, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Splide.on('lazyload:loaded', function (img) { + cover(img, false); + }); + Splide.on('mounted updated refresh', function () { + return apply(false); + }); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + apply(true); + } + }; + /** + * Apply "cover" to all slides. + * + * @param {boolean} uncover - If true, "cover" will be clear. + */ + + function apply(uncover) { + Components.Elements.each(function (Slide) { + var img = child(Slide.slide, 'IMG') || child(Slide.container, 'IMG'); + + if (img && img.src) { + cover(img, uncover); + } + }); + } + /** + * Set background image of the parent element, using source of the given image element. + * + * @param {Element} img - An image element. + * @param {boolean} uncover - Reset "cover". + */ + + + function cover(img, uncover) { + applyStyle(img.parentElement, { + background: uncover ? '' : "center/cover no-repeat url(\"" + img.src + "\")" + }); + applyStyle(img, { + display: uncover ? '' : 'none' + }); + } + + return Cover; +}); +;// CONCATENATED MODULE: ./src/js/components/arrows/path.js +/** + * Export vector path for an arrow. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Namespace definition for SVG element. + * + * @type {string} + */ +var XML_NAME_SPACE = 'http://www.w3.org/2000/svg'; +/** + * The arrow vector path. + * + * @type {number} + */ + +var PATH = 'm15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z'; +/** + * SVG width and height. + * + * @type {number} + */ + +var SIZE = 40; +;// CONCATENATED MODULE: ./src/js/components/arrows/index.js +/** + * The component for appending prev/next arrows. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The component for appending prev/next arrows. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * @param {string} name - A component name as a lowercase string. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const arrows = (function (Splide, Components, name) { + /** + * Previous arrow element. + * + * @type {Element|undefined} + */ + var prev; + /** + * Next arrow element. + * + * @type {Element|undefined} + */ + + var next; + /** + * Store the class list. + * + * @type {Object} + */ + + var classes = Splide.classes; + /** + * Hold the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Whether arrows are created programmatically or not. + * + * @type {boolean} + */ + + var created; + /** + * Hold the Elements component. + * + * @type {Object} + */ + + var Elements = Components.Elements; + /** + * Arrows component object. + * + * @type {Object} + */ + + var Arrows = { + /** + * Required when the arrows option is true. + * + * @type {boolean} + */ + required: Splide.options.arrows, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + // Attempt to get arrows from HTML source. + prev = Elements.arrows.prev; + next = Elements.arrows.next; // If arrows were not found in HTML, let's generate them. + + if ((!prev || !next) && Splide.options.arrows) { + prev = createArrow(true); + next = createArrow(false); + created = true; + appendArrows(); + } + + if (prev && next) { + bind(); + } + + this.arrows = { + prev: prev, + next: next + }; + }, + + /** + * Called after all components are mounted. + */ + mounted: function mounted() { + Splide.emit(name + ":mounted", prev, next); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + removeAttribute([prev, next], 'disabled'); + + if (created) { + dom_remove(prev.parentElement); + } + } + }; + /** + * Listen to native and custom events. + */ + + function bind() { + Splide.on('click', function () { + Splide.go('<'); + }, prev).on('click', function () { + Splide.go('>'); + }, next).on('mounted move updated refresh', updateDisabled); + } + /** + * Update a disabled attribute. + */ + + + function updateDisabled() { + var _Components$Controlle = Components.Controller, + prevIndex = _Components$Controlle.prevIndex, + nextIndex = _Components$Controlle.nextIndex; + var isEnough = Splide.length > Splide.options.perPage || Splide.is(LOOP); + prev.disabled = prevIndex < 0 || !isEnough; + next.disabled = nextIndex < 0 || !isEnough; + Splide.emit(name + ":updated", prev, next, prevIndex, nextIndex); + } + /** + * Create a wrapper element and append arrows. + */ + + + function appendArrows() { + var wrapper = create('div', { + "class": classes.arrows + }); + append(wrapper, prev); + append(wrapper, next); + var slider = Elements.slider; + var parent = Splide.options.arrows === 'slider' && slider ? slider : root; + before(wrapper, parent.firstElementChild); + } + /** + * Create an arrow element. + * + * @param {boolean} prev - Determine to create a prev arrow or next arrow. + * + * @return {Element} - A created arrow element. + */ + + + function createArrow(prev) { + var arrow = " -{% if build.can_issue %} - -{% elif build.active %} +{% if build.active %} {% endif %} - {% endif %} {% endblock actions %} @@ -158,7 +150,7 @@ {% trans "Status" %} - {% display_status_label 'build' build.status_custom_key build.status %} + {% status_label 'build' build.status %} {% if build.target_date %} @@ -225,7 +217,7 @@ {% block page_data %}

    - {% display_status_label 'build' build.status_custom_key build.status large=True %} + {% status_label 'build' build.status large=True %} {% if build.is_overdue %} {% trans "Overdue" %} {% endif %} @@ -252,31 +244,6 @@

    ); }); - $('#build-hold').click(function() { - holdOrder( - '{% url "api-build-hold" build.pk %}', - { - reload: true, - } - ); - }); - - $('#build-issue').click(function() { - constructForm('{% url "api-build-issue" build.pk %}', { - method: 'POST', - title: '{% trans "Issue Build Order" %}', - confirm: true, - preFormContent: ` -
    - {% trans "Issue this Build Order?" %} -
    - `, - onSuccess: function(response) { - window.location.reload(); - } - }); - }); - $("#build-complete").on('click', function() { completeBuildOrder({{ build.pk }}); }); @@ -290,7 +257,11 @@

    {% if report_enabled %} $('#print-build-report').click(function() { - printReports('build', [{{ build.pk }}]); + printReports({ + items: [{{ build.pk }}], + key: 'build', + url: '{% url "api-build-report-list" %}', + }); }); {% endif %} @@ -310,7 +281,7 @@

    $('#show-qr-code').click(function() { showQRDialog( '{% trans "Build Order QR Code" escape %}', - '{{ build.barcode }}' + '{"build": {{ build.pk }} }' ); }); @@ -331,12 +302,6 @@

    build: {{ build.pk }}, }); }); - - {% if build.part.testable %} - onPanelLoad("test-statistics", function() { - prepareTestStatisticsTable('build', '{% url "api-test-statistics-by-build" build.pk %}') - }); - {% endif %} {% endif %} {% endif %} diff --git a/src/backend/InvenTree/build/templates/build/detail.html b/src/backend/InvenTree/build/templates/build/detail.html index df93bd114078..3d2e5d4e964f 100644 --- a/src/backend/InvenTree/build/templates/build/detail.html +++ b/src/backend/InvenTree/build/templates/build/detail.html @@ -60,7 +60,7 @@

    {% trans "Build Details" %}

    {% trans "Status" %} - {% display_status_label 'build' build.status_custom_key build.status %} + {% status_label 'build' build.status %} @@ -174,7 +174,7 @@

    {% trans "Child Build Orders" %}

    -

    {% trans "Build Order Line Items" %}

    +

    {% trans "Allocate Stock to Build" %}

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

    {% trans "Incomplete Build Outputs" %}

    -
    -
    -

    {% trans "Allocated Stock" %}

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

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

    -
    -
    -

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

    -
    - -
    -
    - {% include "filter_list.html" with id="buildteststatistics" %} -
    - {% include "test_statistics_table.html" with prefix="build-" %} -
    -
    -
    @@ -317,10 +290,6 @@

    {% trans "Build Notes" %}

    {% block js_ready %} {{ block.super }} -onPanelLoad('allocated', function() { - loadBuildOrderAllocatedStockTable($('#allocated-stock-table'), {{ build.pk }}); -}); - onPanelLoad('consumed', function() { loadStockTable($('#consumed-stock-table'), { filterTarget: '#filter-list-consumed-stock', @@ -357,7 +326,18 @@

    {% trans "Build Notes" %}

    }); onPanelLoad('attachments', function() { - loadAttachmentTable('build', {{ build.pk }}); + + loadAttachmentTable('{% url "api-build-attachment-list" %}', { + filters: { + build: {{ build.pk }}, + }, + fields: { + build: { + value: {{ build.pk }}, + hidden: true, + } + } + }); }); onPanelLoad('notes', function() { @@ -366,8 +346,6 @@

    {% trans "Build Notes" %}

    'build-notes', '{% url "api-build-detail" build.pk %}', { - model_type: 'build', - model_id: {{ build.pk }}, {% if roles.build.change %} editable: true, {% else %} @@ -388,8 +366,6 @@

    {% trans "Build Notes" %}

    source_location: {{ build.take_from.pk }}, {% endif %} tracked_parts: true, - testable: {% js_bool build.part.testable %}, - trackable: {% js_bool build.part.trackable %} }; loadBuildOutputTable(build_info); diff --git a/src/backend/InvenTree/build/templates/build/sidebar.html b/src/backend/InvenTree/build/templates/build/sidebar.html index 978b730f7741..c038b7782a2e 100644 --- a/src/backend/InvenTree/build/templates/build/sidebar.html +++ b/src/backend/InvenTree/build/templates/build/sidebar.html @@ -5,25 +5,17 @@ {% trans "Build Order Details" as text %} {% include "sidebar_item.html" with label='details' text=text icon="fa-info-circle" %} {% if build.is_active %} -{% trans "Line Items" as text %} -{% include "sidebar_item.html" with label='allocate' text=text icon="fa-list-ol" %} +{% trans "Allocate Stock" as text %} +{% include "sidebar_item.html" with label='allocate' text=text icon="fa-tasks" %} {% trans "Incomplete Outputs" as text %} {% include "sidebar_item.html" with label='outputs' text=text icon="fa-tools" %} {% endif %} {% trans "Completed Outputs" as text %} {% include "sidebar_item.html" with label='completed' text=text icon="fa-boxes" %} -{% if build.is_active %} -{% trans "Allocated Stock" as text %} -{% include "sidebar_item.html" with label='allocated' text=text icon="fa-list" %} -{% endif %} {% trans "Consumed Stock" as text %} -{% include "sidebar_item.html" with label='consumed' text=text icon="fa-tasks" %} +{% include "sidebar_item.html" with label='consumed' text=text icon="fa-list" %} {% trans "Child Build Orders" as text %} {% include "sidebar_item.html" with label='children' text=text icon="fa-sitemap" %} -{% if build.part.testable %} -{% trans "Test Statistics" as text %} -{% include "sidebar_item.html" with label='test-statistics' text=text icon="fa-chart-line" %} -{% endif %} {% trans "Attachments" as text %} {% include "sidebar_item.html" with label='attachments' text=text icon="fa-paperclip" %} {% trans "Notes" as text %} diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 9183e1b43650..131dabaf3f97 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -6,12 +6,11 @@ from rest_framework import status -from part.models import Part, BomItem +from part.models import Part from build.models import Build, BuildItem from stock.models import StockItem -from build.status_codes import BuildStatus -from stock.status_codes import StockStatus +from InvenTree.status_codes import BuildStatus, StockStatus from InvenTree.unit_test import InvenTreeAPITestCase @@ -224,7 +223,6 @@ def test_complete(self): "status": 50, # Item requires attention }, expected_code=201, - max_query_count=450, # TODO: Try to optimize this ) self.assertEqual(self.build.incomplete_outputs.count(), 0) @@ -249,7 +247,7 @@ def test_complete(self): expected_code=400 ) - self.assertIn('accept_unallocated', response.data) + self.assertTrue('accept_unallocated' in response.data) # Accept unallocated stock self.post( @@ -266,35 +264,8 @@ def test_complete(self): self.assertTrue(self.build.is_complete) def test_cancel(self): - """Test that we can cancel a BuildOrder via the API. - - - First test that all stock is returned to stock - - Second test that stock is consumed by the build order - """ - - def make_new_build(ref): - """Make a new build order, and allocate stock to it.""" - - data = self.post( - reverse('api-build-list'), - { - 'part': 100, - 'quantity': 10, - 'title': 'Test build', - 'reference': ref, - }, - expected_code=201 - ).data - - build = Build.objects.get(pk=data['pk']) - - build.auto_allocate_stock() - - self.assertGreater(build.build_lines.count(), 0) - - return build - - bo = make_new_build('BO-12345') + """Test that we can cancel a BuildOrder via the API.""" + bo = Build.objects.get(pk=1) url = reverse('api-build-cancel', kwargs={'pk': bo.pk}) @@ -306,23 +277,6 @@ def make_new_build(ref): self.assertEqual(bo.status, BuildStatus.CANCELLED) - # No items were "consumed" by this build - self.assertEqual(bo.consumed_stock.count(), 0) - - # Make another build, this time we will *consume* the allocated stock - bo = make_new_build('BO-12346') - - url = reverse('api-build-cancel', kwargs={'pk': bo.pk}) - - self.post(url, {'remove_allocated_stock': True}, expected_code=201) - - bo.refresh_from_db() - - self.assertEqual(bo.status, BuildStatus.CANCELLED) - - # This time, there should be *consumed* stock - self.assertGreater(bo.consumed_stock.count(), 0) - def test_delete(self): """Test that we can delete a BuildOrder via the API""" bo = Build.objects.get(pk=1) @@ -564,16 +518,16 @@ def test_create_delete_output(self): def test_download_build_orders(self): """Test that we can download a list of build orders via the API""" required_cols = [ - 'Reference', - 'Build Status', - 'Completed items', - 'Batch Code', - 'Notes', - 'Description', - 'Part', - 'Part Name', - 'ID', - 'Quantity', + 'reference', + 'status', + 'completed', + 'batch', + 'notes', + 'title', + 'part', + 'part_name', + 'id', + 'quantity', ] excluded_cols = [ @@ -597,86 +551,13 @@ def test_download_build_orders(self): for row in data: - build = Build.objects.get(pk=row['ID']) - - self.assertEqual(str(build.part.pk), row['Part']) - self.assertEqual(build.part.name, row['Part Name']) - - self.assertEqual(build.reference, row['Reference']) - self.assertEqual(build.title, row['Description']) - - def test_create(self): - """Test creation of new build orders via the API.""" - - url = reverse('api-build-list') - - # First, we'll create a tree of part assemblies - part_a = Part.objects.create(name="Part A", description="Part A description", assembly=True) - part_b = Part.objects.create(name="Part B", description="Part B description", assembly=True) - part_c = Part.objects.create(name="Part C", description="Part C description", assembly=True) - - # Create a BOM for Part A - BomItem.objects.create( - part=part_a, - sub_part=part_b, - quantity=5, - ) - - # Create a BOM for Part B - BomItem.objects.create( - part=part_b, - sub_part=part_c, - quantity=7 - ) - - n = Build.objects.count() - - # Create a build order for Part A, with a quantity of 10 - response = self.post( - url, - { - 'reference': 'BO-9876', - 'part': part_a.pk, - 'quantity': 10, - 'title': 'A build', - }, - expected_code=201 - ) - - self.assertEqual(n + 1, Build.objects.count()) - - bo = Build.objects.get(pk=response.data['pk']) - - self.assertEqual(bo.children.count(), 0) - - # Create a build order for Part A, and auto-create child builds - response = self.post( - url, - { - 'reference': 'BO-9875', - 'part': part_a.pk, - 'quantity': 15, - 'title': 'A build - with childs', - 'create_child_builds': True, - } - ) - - # An addition 1 + 2 builds should have been created - self.assertEqual(n + 4, Build.objects.count()) - - bo = Build.objects.get(pk=response.data['pk']) + build = Build.objects.get(pk=row['id']) - # One build has a direct child - self.assertEqual(bo.children.count(), 1) - child = bo.children.first() - self.assertEqual(child.part.pk, part_b.pk) - self.assertEqual(child.quantity, 75) + self.assertEqual(str(build.part.pk), row['part']) + self.assertEqual(build.part.full_name, row['part_name']) - # And there should be a second-level child build too - self.assertEqual(child.children.count(), 1) - child = child.children.first() - self.assertEqual(child.part.pk, part_c.pk) - self.assertEqual(child.quantity, 7 * 5 * 15) + self.assertEqual(build.reference, row['reference']) + self.assertEqual(build.title, row['title']) class BuildAllocationTest(BuildAPITest): @@ -1053,7 +934,7 @@ def test_overallocated_requires_acceptance(self): {}, expected_code=400 ) - self.assertIn('accept_overallocated', response.data) + self.assertTrue('accept_overallocated' in response.data) # Check stock items have not reduced at all for si, oq, _ in self.state.values(): @@ -1067,7 +948,6 @@ def test_overallocated_requires_acceptance(self): 'accept_overallocated': 'accept', }, expected_code=201, - max_query_count=550, # TODO: Come back and refactor this ) self.build.refresh_from_db() @@ -1088,7 +968,6 @@ def test_overallocated_can_trim(self): 'accept_overallocated': 'trim', }, expected_code=201, - max_query_count=600, # TODO: Come back and refactor this ) self.build.refresh_from_db() diff --git a/src/backend/InvenTree/build/test_build.py b/src/backend/InvenTree/build/test_build.py index 7e190e3e21c8..fd4fe9975f00 100644 --- a/src/backend/InvenTree/build/test_build.py +++ b/src/backend/InvenTree/build/test_build.py @@ -12,10 +12,8 @@ from InvenTree import status_codes as status import common.models -from common.settings import set_global_setting import build.tasks from build.models import Build, BuildItem, BuildLine, generate_next_build_reference -from build.status_codes import BuildStatus from part.models import Part, BomItem, BomItemSubstitute, PartTestTemplate from stock.models import StockItem, StockItemTestResult from users.models import Owner @@ -176,7 +174,6 @@ def setUpTestData(cls): part=cls.assembly, quantity=10, issued_by=get_user_model().objects.get(pk=1), - status=BuildStatus.PENDING, ) # Create some BuildLine items we can use later on @@ -218,7 +215,7 @@ class BuildTest(BuildTestBase): def test_ref_int(self): """Test the "integer reference" field used for natural sorting""" # Set build reference to new value - set_global_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref}-???', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref}-???', change_user=None) refs = { 'BO-123-456': 123, @@ -241,7 +238,7 @@ def test_ref_int(self): self.assertEqual(build.reference_int, ref_int) # Set build reference back to default value - set_global_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) def test_ref_validation(self): """Test that the reference field validation works as expected""" @@ -274,7 +271,7 @@ def test_ref_validation(self): ) # Try a new validator pattern - set_global_setting('BUILDORDER_REFERENCE_PATTERN', '{ref}-BO', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', '{ref}-BO', change_user=None) for ref in [ '1234-BO', @@ -288,11 +285,11 @@ def test_ref_validation(self): ) # Set build reference back to default value - set_global_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) def test_next_ref(self): """Test that the next reference is automatically generated""" - set_global_setting('BUILDORDER_REFERENCE_PATTERN', 'XYZ-{ref:06d}', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', 'XYZ-{ref:06d}', change_user=None) build = Build.objects.create( part=self.assembly, @@ -314,7 +311,7 @@ def test_next_ref(self): self.assertEqual(build.reference_int, 988) # Set build reference back to default value - set_global_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) + common.models.InvenTreeSetting.set_setting('BUILDORDER_REFERENCE_PATTERN', 'BO-{ref:04d}', change_user=None) def test_init(self): """Perform some basic tests before we start the ball rolling""" @@ -323,10 +320,6 @@ def test_init(self): # Build is PENDING self.assertEqual(self.build.status, status.BuildStatus.PENDING) - self.assertTrue(self.build.is_active) - self.assertTrue(self.build.can_hold) - self.assertTrue(self.build.can_issue) - # Build has two build outputs self.assertEqual(self.build.output_count, 2) @@ -476,11 +469,6 @@ def test_partial_allocation(self): def test_overallocation_and_trim(self): """Test overallocation of stock and trim function""" - - self.assertEqual(self.build.status, status.BuildStatus.PENDING) - self.build.issue_build() - self.assertEqual(self.build.status, status.BuildStatus.PRODUCTION) - # Fully allocate tracked stock (not eligible for trimming) self.allocate_stock( self.output_1, @@ -527,7 +515,6 @@ def test_overallocation_and_trim(self): self.build.complete_build_output(self.output_1, None) self.build.complete_build_output(self.output_2, None) - self.assertTrue(self.build.can_complete) n = StockItem.objects.filter(consumed_by=self.build).count() @@ -595,8 +582,6 @@ def test_complete(self): self.stock_2_1.quantity = 30 self.stock_2_1.save() - self.build.issue_build() - # Allocate non-tracked parts self.allocate_stock( None, @@ -662,7 +647,7 @@ def test_complete_with_required_tests(self): """Test the prevention completion when a required test is missing feature""" # with required tests incompleted the save should fail - set_global_setting('PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS', True, change_user=None) + common.models.InvenTreeSetting.set_setting('PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS', True, change_user=None) with self.assertRaises(ValidationError): self.build_w_tests_trackable.complete_build_output(self.stockitem_with_required_test, None) diff --git a/src/backend/InvenTree/build/test_migrations.py b/src/backend/InvenTree/build/test_migrations.py index 4a0c720e5dfa..dba739764a16 100644 --- a/src/backend/InvenTree/build/test_migrations.py +++ b/src/backend/InvenTree/build/test_migrations.py @@ -19,6 +19,7 @@ def prepare(self): name='Widget', description='Buildable Part', active=True, + level=0, lft=0, rght=0, tree_id=0, ) Build = self.old_state.apps.get_model('build', 'build') @@ -60,6 +61,7 @@ def prepare(self): part = Part.objects.create( name='Part', description='A test part', + level=0, lft=0, rght=0, tree_id=0, ) Build = self.old_state.apps.get_model('build', 'build') diff --git a/src/backend/InvenTree/build/tests.py b/src/backend/InvenTree/build/tests.py index 22d38cbeb834..904f2a3a62b5 100644 --- a/src/backend/InvenTree/build/tests.py +++ b/src/backend/InvenTree/build/tests.py @@ -1,7 +1,6 @@ """Basic unit tests for the BuildOrder app""" from django.conf import settings -from django.core.exceptions import ValidationError from django.test import tag from django.urls import reverse @@ -10,11 +9,9 @@ from InvenTree.unit_test import InvenTreeTestCase from .models import Build -from part.models import Part, BomItem from stock.models import StockItem -from common.settings import get_global_setting, set_global_setting -from build.status_codes import BuildStatus +from InvenTree.status_codes import BuildStatus class BuildTestSimple(InvenTreeTestCase): @@ -91,79 +88,6 @@ def test_cancel_build(self): self.assertEqual(build.status, BuildStatus.CANCELLED) - def test_build_create(self): - """Test creation of build orders via API.""" - - n = Build.objects.count() - - # Find an assembly part - assembly = Part.objects.filter(assembly=True).first() - - assembly.active = True - assembly.locked = False - assembly.save() - - self.assertEqual(assembly.get_bom_items().count(), 0) - - # Let's create some BOM items for this assembly - for component in Part.objects.filter(assembly=False, component=True)[:15]: - - try: - BomItem.objects.create( - part=assembly, - sub_part=component, - reference='xxx', - quantity=5 - ) - except ValidationError: - pass - - # The assembly has a BOM, and is now *invalid* - self.assertGreater(assembly.get_bom_items().count(), 0) - self.assertFalse(assembly.is_bom_valid()) - - # Create a build for an assembly with an *invalid* BOM - set_global_setting('BUILDORDER_REQUIRE_VALID_BOM', False) - set_global_setting('BUILDORDER_REQUIRE_ACTIVE_PART', True) - set_global_setting('BUILDORDER_REQUIRE_LOCKED_PART', False) - - bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9990') - bo.save() - - # Now, require a *valid* BOM - set_global_setting('BUILDORDER_REQUIRE_VALID_BOM', True) - - with self.assertRaises(ValidationError): - bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9991') - - # Now, validate the BOM, and try again - assembly.validate_bom(None) - self.assertTrue(assembly.is_bom_valid()) - - bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9992') - - # Now, try and create a build for an inactive assembly - assembly.active = False - assembly.save() - - with self.assertRaises(ValidationError): - bo = Build.objects.create(part=assembly, quantity=10, reference='BO-9993') - - set_global_setting('BUILDORDER_REQUIRE_ACTIVE_PART', False) - Build.objects.create(part=assembly, quantity=10, reference='BO-9994') - - # Check that the "locked" requirement works - set_global_setting('BUILDORDER_REQUIRE_LOCKED_PART', True) - with self.assertRaises(ValidationError): - Build.objects.create(part=assembly, quantity=10, reference='BO-9995') - - assembly.locked = True - assembly.save() - - Build.objects.create(part=assembly, quantity=10, reference='BO-9996') - - # Check that expected quantity of new builds is created - self.assertEqual(Build.objects.count(), n + 4) class TestBuildViews(InvenTreeTestCase): """Tests for Build app views.""" diff --git a/src/backend/InvenTree/build/views.py b/src/backend/InvenTree/build/views.py index 2668b0fe9950..36422e16888b 100644 --- a/src/backend/InvenTree/build/views.py +++ b/src/backend/InvenTree/build/views.py @@ -5,7 +5,7 @@ from .models import Build from InvenTree.views import InvenTreeRoleMixin -from build.status_codes import BuildStatus +from InvenTree.status_codes import BuildStatus from plugin.views import InvenTreePluginViewMixin diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index a0719f9ab463..528f705c3a83 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -5,46 +5,8 @@ from import_export.admin import ImportExportModelAdmin import common.models -import common.validators -@admin.register(common.models.Attachment) -class AttachmentAdmin(admin.ModelAdmin): - """Admin interface for Attachment objects.""" - - def formfield_for_dbfield(self, db_field, request, **kwargs): - """Provide custom choices for 'model_type' field.""" - if db_field.name == 'model_type': - db_field.choices = common.validators.attachment_model_options() - - return super().formfield_for_dbfield(db_field, request, **kwargs) - - list_display = ( - 'model_type', - 'model_id', - 'attachment', - 'link', - 'upload_user', - 'upload_date', - ) - - list_filter = ['model_type', 'upload_user'] - - readonly_fields = ['file_size', 'upload_date', 'upload_user'] - - search_fields = ('content_type', 'comment') - - -@admin.register(common.models.ProjectCode) -class ProjectCodeAdmin(ImportExportModelAdmin): - """Admin settings for ProjectCode.""" - - list_display = ('code', 'description') - - search_fields = ('code', 'description') - - -@admin.register(common.models.InvenTreeSetting) class SettingsAdmin(ImportExportModelAdmin): """Admin settings for InvenTreeSetting.""" @@ -57,7 +19,6 @@ def get_readonly_fields(self, request, obj=None): # pragma: no cover return [] -@admin.register(common.models.InvenTreeUserSetting) class UserSettingsAdmin(ImportExportModelAdmin): """Admin settings for InvenTreeUserSetting.""" @@ -70,21 +31,18 @@ def get_readonly_fields(self, request, obj=None): # pragma: no cover return [] -@admin.register(common.models.WebhookEndpoint) class WebhookAdmin(ImportExportModelAdmin): """Admin settings for Webhook.""" list_display = ('endpoint_id', 'name', 'active', 'user') -@admin.register(common.models.NotificationEntry) class NotificationEntryAdmin(admin.ModelAdmin): """Admin settings for NotificationEntry.""" list_display = ('key', 'uid', 'updated') -@admin.register(common.models.NotificationMessage) class NotificationMessageAdmin(admin.ModelAdmin): """Admin settings for NotificationMessage.""" @@ -103,11 +61,16 @@ class NotificationMessageAdmin(admin.ModelAdmin): search_fields = ('name', 'category', 'message') -@admin.register(common.models.NewsFeedEntry) class NewsFeedEntryAdmin(admin.ModelAdmin): """Admin settings for NewsFeedEntry.""" list_display = ('title', 'author', 'published', 'summary') +admin.site.register(common.models.InvenTreeSetting, SettingsAdmin) +admin.site.register(common.models.InvenTreeUserSetting, UserSettingsAdmin) +admin.site.register(common.models.WebhookEndpoint, WebhookAdmin) admin.site.register(common.models.WebhookMessage, ImportExportModelAdmin) +admin.site.register(common.models.NotificationEntry, NotificationEntryAdmin) +admin.site.register(common.models.NotificationMessage, NotificationMessageAdmin) +admin.site.register(common.models.NewsFeedEntry, NewsFeedEntryAdmin) diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index fe5e6227625a..bba5ac766bf9 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -4,33 +4,25 @@ from django.conf import settings from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ValidationError -from django.db.models import Q from django.http.response import HttpResponse from django.urls import include, path, re_path from django.utils.decorators import method_decorator -from django.utils.translation import gettext_lazy as _ -from django.views.decorators.cache import cache_control from django.views.decorators.csrf import csrf_exempt import django_q.models -from django_filters import rest_framework as rest_filters from django_q.tasks import async_task from djmoney.contrib.exchange.models import ExchangeBackend, Rate from drf_spectacular.utils import OpenApiResponse, extend_schema from error_report.models import Error from rest_framework import permissions, serializers -from rest_framework.exceptions import NotAcceptable, NotFound, PermissionDenied +from rest_framework.exceptions import NotAcceptable, NotFound from rest_framework.permissions import IsAdminUser from rest_framework.response import Response from rest_framework.views import APIView import common.models import common.serializers -from common.icons import get_icon_packs -from common.settings import get_global_setting -from generic.states.api import urlpattern as generic_states_api_urls -from importer.mixins import DataExportViewMixin +from generic.states.api import AllStatusViews, StatusView from InvenTree.api import BulkDeleteMixin, MetadataView from InvenTree.config import CONFIG_LOOKUPS from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER @@ -135,7 +127,6 @@ class CurrencyExchangeView(APIView): permission_classes = [permissions.IsAuthenticated] serializer_class = None - @extend_schema(responses={200: common.serializers.CurrencyExchangeSerializer}) def get(self, request, format=None): """Return information on available currency conversions.""" # Extract a list of all available rates @@ -157,7 +148,7 @@ def get(self, request, format=None): updated = None response = { - 'base_currency': get_global_setting( + 'base_currency': common.models.InvenTreeSetting.get_setting( 'INVENTREE_DEFAULT_CURRENCY', backup_value='USD' ), 'exchange_rates': {}, @@ -365,22 +356,6 @@ class NotificationMessageMixin: serializer_class = common.serializers.NotificationMessageSerializer permission_classes = [UserSettingsPermissions] - def get_queryset(self): - """Return prefetched queryset.""" - queryset = ( - super() - .get_queryset() - .prefetch_related( - 'source_content_type', - 'source_object', - 'target_content_type', - 'target_object', - 'user', - ) - ) - - return queryset - class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI): """List view for all notifications of the current user.""" @@ -487,10 +462,6 @@ class NotesImageList(ListCreateAPI): serializer_class = common.serializers.NotesImageSerializer permission_classes = [permissions.IsAuthenticated] - filter_backends = SEARCH_ORDER_FILTER - - search_fields = ['user', 'model_type', 'model_id'] - def perform_create(self, serializer): """Create (upload) a new notes image.""" image = serializer.save() @@ -498,7 +469,7 @@ def perform_create(self, serializer): image.save() -class ProjectCodeList(DataExportViewMixin, ListCreateAPI): +class ProjectCodeList(ListCreateAPI): """List view for all project codes.""" queryset = common.models.ProjectCode.objects.all() @@ -519,7 +490,7 @@ class ProjectCodeDetail(RetrieveUpdateDestroyAPI): permission_classes = [permissions.IsAuthenticated, IsStaffOrReadOnly] -class CustomUnitList(DataExportViewMixin, ListCreateAPI): +class CustomUnitList(ListCreateAPI): """List view for custom units.""" queryset = common.models.CustomUnit.objects.all() @@ -655,8 +626,6 @@ class ContentTypeList(ListAPI): queryset = ContentType.objects.all() serializer_class = common.serializers.ContentTypeSerializer permission_classes = [permissions.IsAuthenticated] - filter_backends = SEARCH_ORDER_FILTER - search_fields = ['app_label', 'model'] class ContentTypeDetail(RetrieveAPI): @@ -683,101 +652,6 @@ def get_object(self): raise NotFound() -class AttachmentFilter(rest_filters.FilterSet): - """Filterset for the AttachmentList API endpoint.""" - - class Meta: - """Metaclass options.""" - - model = common.models.Attachment - fields = ['model_type', 'model_id', 'upload_user'] - - is_link = rest_filters.BooleanFilter(label=_('Is Link'), method='filter_is_link') - - def filter_is_link(self, queryset, name, value): - """Filter attachments based on whether they are a link or not.""" - if value: - return queryset.exclude(link=None).exclude(link='') - return queryset.filter(Q(link=None) | Q(link='')).distinct() - - is_file = rest_filters.BooleanFilter(label=_('Is File'), method='filter_is_file') - - def filter_is_file(self, queryset, name, value): - """Filter attachments based on whether they are a file or not.""" - if value: - return queryset.exclude(attachment=None).exclude(attachment='') - return queryset.filter(Q(attachment=None) | Q(attachment='')).distinct() - - -class AttachmentList(BulkDeleteMixin, ListCreateAPI): - """List API endpoint for Attachment objects.""" - - queryset = common.models.Attachment.objects.all() - serializer_class = common.serializers.AttachmentSerializer - permission_classes = [permissions.IsAuthenticated] - - filter_backends = SEARCH_ORDER_FILTER - filterset_class = AttachmentFilter - - ordering_fields = ['model_id', 'model_type', 'upload_date', 'file_size'] - search_fields = ['comment', 'model_id', 'model_type'] - - def perform_create(self, serializer): - """Save the user information when a file is uploaded.""" - attachment = serializer.save() - attachment.upload_user = self.request.user - attachment.save() - - def validate_delete(self, queryset, request) -> None: - """Ensure that the user has correct permissions for a bulk-delete. - - - Extract all model types from the provided queryset - - Ensure that the user has correct 'delete' permissions for each model - """ - from common.validators import attachment_model_class_from_label - from users.models import check_user_permission - - model_types = queryset.values_list('model_type', flat=True).distinct() - - for model_type in model_types: - if model_class := attachment_model_class_from_label(model_type): - if not check_user_permission(request.user, model_class, 'delete'): - raise ValidationError( - _('User does not have permission to delete these attachments') - ) - - -class AttachmentDetail(RetrieveUpdateDestroyAPI): - """Detail API endpoint for Attachment objects.""" - - queryset = common.models.Attachment.objects.all() - serializer_class = common.serializers.AttachmentSerializer - permission_classes = [permissions.IsAuthenticated] - - def destroy(self, request, *args, **kwargs): - """Check user permissions before deleting an attachment.""" - attachment = self.get_object() - - if not attachment.check_permission('delete', request.user): - raise PermissionDenied( - _('User does not have permission to delete this attachment') - ) - - return super().destroy(request, *args, **kwargs) - - -@method_decorator(cache_control(public=True, max_age=86400), name='dispatch') -class IconList(ListAPI): - """List view for available icon packages.""" - - serializer_class = common.serializers.IconPackageSerializer - permission_classes = [permissions.AllowAny] - - def get_queryset(self): - """Return a list of all available icon packages.""" - return get_icon_packs().values() - - settings_api_urls = [ # User settings path( @@ -846,25 +720,6 @@ def get_queryset(self): path('', BackgroundTaskOverview.as_view(), name='api-task-overview'), ]), ), - # Attachments - path( - 'attachment/', - include([ - path( - '/', - include([ - path( - 'metadata/', - MetadataView.as_view(), - {'model': common.models.Attachment}, - name='api-attachment-metadata', - ), - path('', AttachmentDetail.as_view(), name='api-attachment-detail'), - ]), - ), - path('', AttachmentList.as_view(), name='api-attachment-list'), - ]), - ), path( 'error-report/', include([ @@ -967,7 +822,16 @@ def get_queryset(self): ]), ), # Status - path('generic/status/', include(generic_states_api_urls)), + path( + 'generic/status/', + include([ + path( + f'/', + include([path('', StatusView.as_view(), name='api-status')]), + ), + path('', AllStatusViews.as_view(), name='api-status-all'), + ]), + ), # Contenttype path( 'contenttype/', @@ -976,15 +840,13 @@ def get_queryset(self): '/', ContentTypeDetail.as_view(), name='api-contenttype-detail' ), path( - 'model//', + '/', ContentTypeModelDetail.as_view(), name='api-contenttype-detail-modelname', ), path('', ContentTypeList.as_view(), name='api-contenttype-list'), ]), ), - # Icons - path('icons/', IconList.as_view(), name='api-icon-list'), ] admin_api_urls = [ diff --git a/src/backend/InvenTree/common/apps.py b/src/backend/InvenTree/common/apps.py index 65364992293b..a62c15d59ffa 100644 --- a/src/backend/InvenTree/common/apps.py +++ b/src/backend/InvenTree/common/apps.py @@ -5,7 +5,6 @@ from django.apps import AppConfig import InvenTree.ready -from common.settings import get_global_setting, set_global_setting logger = logging.getLogger('inventree') @@ -28,12 +27,16 @@ def ready(self): def clear_restart_flag(self): """Clear the SERVER_RESTART_REQUIRED setting.""" try: - if get_global_setting( + import common.models + + if common.models.InvenTreeSetting.get_setting( 'SERVER_RESTART_REQUIRED', backup_value=False, create=False, cache=False ): logger.info('Clearing SERVER_RESTART_REQUIRED flag') if not InvenTree.ready.isImportingData(): - set_global_setting('SERVER_RESTART_REQUIRED', False, None) + common.models.InvenTreeSetting.set_setting( + 'SERVER_RESTART_REQUIRED', False, None + ) except Exception: pass diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py deleted file mode 100644 index 1769cf8c366e..000000000000 --- a/src/backend/InvenTree/common/currency.py +++ /dev/null @@ -1,232 +0,0 @@ -"""Helper functions for currency support.""" - -import decimal -import logging -import math - -from django.core.cache import cache -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -from moneyed import CURRENCIES - -import InvenTree.helpers - -logger = logging.getLogger('inventree') - - -def currency_code_default(): - """Returns the default currency code (or USD if not specified).""" - from common.settings import get_global_setting - - try: - cached_value = cache.get('currency_code_default', '') - except Exception: - cached_value = None - - if cached_value: - return cached_value - - try: - code = get_global_setting('INVENTREE_DEFAULT_CURRENCY', create=True, cache=True) - except Exception: # pragma: no cover - # Database may not yet be ready, no need to throw an error here - code = '' - - if code not in CURRENCIES: - code = 'USD' # pragma: no cover - - # Cache the value for a short amount of time - try: - cache.set('currency_code_default', code, 30) - except Exception: - pass - - return code - - -def all_currency_codes() -> list: - """Returns a list of all currency codes.""" - return [(a, CURRENCIES[a].name) for a in CURRENCIES] - - -def currency_codes_default_list() -> str: - """Return a comma-separated list of default currency codes.""" - return 'AUD,CAD,CNY,EUR,GBP,JPY,NZD,USD' - - -def currency_codes() -> list: - """Returns the current currency codes.""" - from common.settings import get_global_setting - - codes = get_global_setting( - 'CURRENCY_CODES', create=False, enviroment_key='INVENTREE_CURRENCY_CODES' - ).strip() - - if not codes: - codes = currency_codes_default_list() - - codes = codes.split(',') - - valid_codes = [] - - for code in codes: - code = code.strip().upper() - - if code in valid_codes: - continue - - if code in CURRENCIES: - valid_codes.append(code) - else: - logger.warning(f"Invalid currency code: '{code}'") - - if len(valid_codes) == 0: - valid_codes = list(currency_codes_default_list().split(',')) - - return valid_codes - - -def currency_code_mappings() -> list: - """Returns the current currency choices.""" - return [(a, CURRENCIES[a].name) for a in currency_codes()] - - -def after_change_currency(setting) -> None: - """Callback function when base currency is changed. - - - Update exchange rates - - Recalculate prices for all parts - """ - import InvenTree.ready - import InvenTree.tasks - - if InvenTree.ready.isImportingData(): - return - - if not InvenTree.ready.canAppAccessDatabase(): - return - - from part import tasks as part_tasks - - # Immediately update exchange rates - InvenTree.tasks.update_exchange_rates(force=True) - - # Offload update of part prices to a background task - InvenTree.tasks.offload_task(part_tasks.check_missing_pricing, force_async=True) - - -def validate_currency_codes(value): - """Validate the currency codes.""" - values = value.strip().split(',') - - valid_currencies = set() - - for code in values: - code = code.strip().upper() - - if not code: - continue - - if code not in CURRENCIES: - raise ValidationError(_('Invalid currency code') + f": '{code}'") - elif code in valid_currencies: - raise ValidationError(_('Duplicate currency code') + f": '{code}'") - else: - valid_currencies.add(code) - - if len(valid_currencies) == 0: - raise ValidationError(_('No valid currency codes provided')) - - return list(valid_currencies) - - -def currency_exchange_plugins() -> list: - """Return a list of plugin choices which can be used for currency exchange.""" - try: - from plugin import registry - - plugs = registry.with_mixin('currencyexchange', active=True) - except Exception: - plugs = [] - - if len(plugs) == 0: - return None - - return [('', _('No plugin'))] + [(plug.slug, plug.human_name) for plug in plugs] - - -def get_price( - instance, - quantity, - moq=True, - multiples=True, - currency=None, - break_name: str = 'price_breaks', -): - """Calculate the price based on quantity price breaks. - - - Don't forget to add in flat-fee cost (base_cost field) - - If MOQ (minimum order quantity) is required, bump quantity - - If order multiples are to be observed, then we need to calculate based on that, too - """ - from common.currency import currency_code_default - - if hasattr(instance, break_name): - price_breaks = getattr(instance, break_name).all() - else: - price_breaks = [] - - # No price break information available? - if len(price_breaks) == 0: - return None - - # Check if quantity is fraction and disable multiples - multiples = quantity % 1 == 0 - - # Order multiples - if multiples: - quantity = int(math.ceil(quantity / instance.multiple) * instance.multiple) - - pb_found = False - pb_quantity = -1 - pb_cost = 0.0 - - if currency is None: - # Default currency selection - currency = currency_code_default() - - pb_min = None - for pb in price_breaks: - # Store smallest price break - if not pb_min: - pb_min = pb - - # Ignore this pricebreak (quantity is too high) - if pb.quantity > quantity: - continue - - pb_found = True - - # If this price-break quantity is the largest so far, use it! - if pb.quantity > pb_quantity: - pb_quantity = pb.quantity - - # Convert everything to the selected currency - pb_cost = pb.convert_to(currency) - - # Use smallest price break - if not pb_found and pb_min: - # Update price break information - pb_quantity = pb_min.quantity - pb_cost = pb_min.convert_to(currency) - # Trigger cost calculation using smallest price break - pb_found = True - - # Convert quantity to decimal.Decimal format - quantity = decimal.Decimal(f'{quantity}') - - if pb_found: - cost = pb_cost * quantity - return InvenTree.helpers.normalize(cost + instance.base_cost) - return None diff --git a/src/backend/InvenTree/common/forms.py b/src/backend/InvenTree/common/forms.py index 48001490136a..b991eec06b54 100644 --- a/src/backend/InvenTree/common/forms.py +++ b/src/backend/InvenTree/common/forms.py @@ -51,9 +51,6 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not file_manager: # pragma: no cover - return - # Setup FileManager file_manager.setup() # Get columns @@ -90,9 +87,6 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not file_manager: # pragma: no cover - return - # Setup FileManager file_manager.setup() diff --git a/src/backend/InvenTree/common/icons.py b/src/backend/InvenTree/common/icons.py deleted file mode 100644 index 1ba6efe241a5..000000000000 --- a/src/backend/InvenTree/common/icons.py +++ /dev/null @@ -1,114 +0,0 @@ -"""Icon utilities for InvenTree.""" - -import json -import logging -from dataclasses import dataclass -from pathlib import Path -from typing import TypedDict - -from django.core.exceptions import ValidationError -from django.templatetags.static import static - -logger = logging.getLogger('inventree') - -_icon_packs = None - - -class Icon(TypedDict): - """Dict type for an icon. - - Attributes: - name: The name of the icon. - category: The category of the icon. - tags: A list of tags for the icon (used for search). - variants: A dictionary of variants for the icon, where the key is the variant name and the value is the variant's unicode hex character. - """ - - name: str - category: str - tags: list[str] - variants: dict[str, str] - - -@dataclass -class IconPack: - """Dataclass for an icon pack. - - Attributes: - name: The name of the icon pack. - prefix: The prefix used for the icon pack. - fonts: A dictionary of different font file formats for the icon pack, where the key is the css format and the value a path to the font file. - icons: A dictionary of icons in the icon pack, where the key is the icon name and the value is a dictionary of the icon's variants. - """ - - name: str - prefix: str - fonts: dict[str, str] - icons: dict[str, Icon] - - -def get_icon_packs(): - """Return a dictionary of available icon packs including their icons.""" - global _icon_packs - - if _icon_packs is None: - tabler_icons_path = Path(__file__).parent.parent.joinpath( - 'InvenTree/static/tabler-icons/icons.json' - ) - with open(tabler_icons_path, 'r') as tabler_icons_file: - tabler_icons = json.load(tabler_icons_file) - - icon_packs = [ - IconPack( - name='Tabler Icons', - prefix='ti', - fonts={ - 'woff2': static('tabler-icons/tabler-icons.woff2'), - 'woff': static('tabler-icons/tabler-icons.woff'), - 'truetype': static('tabler-icons/tabler-icons.ttf'), - }, - icons=tabler_icons, - ) - ] - - from plugin import registry - - for plugin in registry.with_mixin('icon_pack', active=True): - try: - icon_packs.extend(plugin.icon_packs()) - except Exception as e: - logger.warning('Error loading icon pack from plugin %s: %s', plugin, e) - - _icon_packs = {pack.prefix: pack for pack in icon_packs} - - return _icon_packs - - -def reload_icon_packs(): - """Reload the icon packs.""" - global _icon_packs - _icon_packs = None - get_icon_packs() - - -def validate_icon(icon: str): - """Validate an icon string in the format pack:name:variant.""" - try: - pack, name, variant = icon.split(':') - except ValueError: - raise ValidationError( - f'Invalid icon format: {icon}, expected: pack:name:variant' - ) - - packs = get_icon_packs() - - if pack not in packs: - raise ValidationError(f'Invalid icon pack: {pack}') - - if name not in packs[pack].icons: - raise ValidationError(f'Invalid icon name: {name}') - - if variant not in packs[pack].icons[name]['variants']: - raise ValidationError(f'Invalid icon variant: {variant}') - - return packs[pack], packs[pack].icons[name], variant diff --git a/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py b/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py index 116d139be884..09b0100db402 100644 --- a/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py +++ b/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py @@ -9,7 +9,7 @@ def set_default_currency(apps, schema_editor): # get value from settings-file base_currency = get_setting('INVENTREE_BASE_CURRENCY', 'base_currency', 'USD') - from common.currency import currency_codes + from common.settings import currency_codes # check if value is valid if base_currency not in currency_codes(): diff --git a/src/backend/InvenTree/common/migrations/0018_projectcode.py b/src/backend/InvenTree/common/migrations/0018_projectcode.py index 544007012a21..6ce6184ffb4d 100644 --- a/src/backend/InvenTree/common/migrations/0018_projectcode.py +++ b/src/backend/InvenTree/common/migrations/0018_projectcode.py @@ -17,8 +17,5 @@ class Migration(migrations.Migration): ('code', models.CharField(help_text='Unique project code', max_length=50, unique=True, verbose_name='Project Code')), ('description', models.CharField(blank=True, help_text='Project description', max_length=200, verbose_name='Description')), ], - options={ - 'verbose_name': 'Project Code', - }, ), ] diff --git a/src/backend/InvenTree/common/migrations/0020_customunit.py b/src/backend/InvenTree/common/migrations/0020_customunit.py index 2c27252cf616..500d34c68344 100644 --- a/src/backend/InvenTree/common/migrations/0020_customunit.py +++ b/src/backend/InvenTree/common/migrations/0020_customunit.py @@ -18,8 +18,5 @@ class Migration(migrations.Migration): ('symbol', models.CharField(blank=True, help_text='Optional unit symbol', max_length=10, unique=True, verbose_name='Symbol')), ('definition', models.CharField(help_text='Unit definition', max_length=50, verbose_name='Definition')), ], - options={ - 'verbose_name': 'Custom Unit', - }, ), ] diff --git a/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py b/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py deleted file mode 100644 index 66b78f64760c..000000000000 --- a/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py +++ /dev/null @@ -1,78 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-02 13:32 - -from django.conf import settings -from django.db import migrations - -from moneyed import CURRENCIES - -import InvenTree.config - - -def set_currencies(apps, schema_editor): - """Set the default currency codes. - - Ref: https://github.com/inventree/InvenTree/pull/7390 - - Previously, the allowed currency codes were set in the external configuration - (e.g via the configuration file or environment variables). - - Now, they are set in the database (via the InvenTreeSetting model). - - So, this data migration exists to transfer any configured currency codes, - from the external configuration, into the database settings model. - """ - - InvenTreeSetting = apps.get_model('common', 'InvenTreeSetting') - - key = 'CURRENCY_CODES' - - codes = InvenTree.config.get_setting('INVENTREE_CURRENCIES', 'currencies', None) - - if codes is None: - # No currency codes are defined in the configuration file - return - - if type(codes) == str: - codes = codes.split(',') - - valid_codes = set() - - for code in codes: - code = code.strip().upper() - - if code in CURRENCIES: - valid_codes.add(code) - - if len(valid_codes) == 0: - print(f"No valid currency codes found in configuration file") - return - - value = ','.join(valid_codes) - - if not settings.TESTING: - print(f"Found existing currency codes:", value) - - setting = InvenTreeSetting.objects.filter(key=key).first() - - if setting: - if not settings.TESTING: - print(f"- Updating existing setting for currency codes") - setting.value = value - setting.save() - else: - if not settings.TESTING: - print(f"- Creating new setting for currency codes") - setting = InvenTreeSetting(key=key, value=value) - setting.save() - - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0022_projectcode_responsible'), - ] - - operations = [ - migrations.RunPython(set_currencies, reverse_code=migrations.RunPython.noop) - ] diff --git a/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py b/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py deleted file mode 100644 index 24467f9ba233..000000000000 --- a/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.2.12 on 2024-05-22 12:27 - -import common.validators -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0023_auto_20240602_1332'), - ] - - operations = [ - migrations.AddField( - model_name='notesimage', - name='model_id', - field=models.IntegerField(blank=True, default=None, help_text='Target model ID for this image', null=True), - ), - migrations.AddField( - model_name='notesimage', - name='model_type', - field=models.CharField(blank=True, null=True, help_text='Target model type for this image', max_length=100, validators=[common.validators.validate_notes_model_type]), - ), - ] diff --git a/src/backend/InvenTree/common/migrations/0025_attachment.py b/src/backend/InvenTree/common/migrations/0025_attachment.py deleted file mode 100644 index 63f9ec69a65a..000000000000 --- a/src/backend/InvenTree/common/migrations/0025_attachment.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-08 12:37 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import taggit.managers - -import common.models -import common.validators -import InvenTree.fields -import InvenTree.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0002_remove_content_type_name'), - ('common', '0024_notesimage_model_id_notesimage_model_type'), - ] - - operations = [ - migrations.CreateModel( - name='Attachment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('model_id', models.PositiveIntegerField()), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=common.models.rename_attachment, verbose_name='Attachment')), - ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), - ('comment', models.CharField(blank=True, help_text='Attachment comment', max_length=250, verbose_name='Comment')), - ('upload_date', models.DateField(auto_now_add=True, help_text='Date the file was uploaded', null=True, verbose_name='Upload date')), - ('file_size', models.PositiveIntegerField(default=0, help_text='File size in bytes', verbose_name='File size')), - ('model_type', models.CharField(help_text='Target model type for this image', max_length=100, validators=[common.validators.validate_attachment_model_type])), - ('upload_user', models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User')), - ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), - ('tags', taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags')) - ], - bases=(InvenTree.models.PluginValidationMixin, models.Model), - options={ - 'verbose_name': 'Attachment', - } - ), - ] diff --git a/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py b/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py deleted file mode 100644 index 09e12e90dd0a..000000000000 --- a/src/backend/InvenTree/common/migrations/0026_auto_20240608_1238.py +++ /dev/null @@ -1,122 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-08 12:38 - -from django.db import migrations -from django.core.files.storage import default_storage - - -def get_legacy_models(): - """Return a set of legacy attachment models.""" - - # Legacy attachment types to convert: - # app_label, table name, target model, model ref - return [ - ('build', 'BuildOrderAttachment', 'build', 'build'), - ('company', 'CompanyAttachment', 'company', 'company'), - ('company', 'ManufacturerPartAttachment', 'manufacturerpart', 'manufacturer_part'), - ('order', 'PurchaseOrderAttachment', 'purchaseorder', 'order'), - ('order', 'SalesOrderAttachment', 'salesorder', 'order'), - ('order', 'ReturnOrderAttachment', 'returnorder', 'order'), - ('part', 'PartAttachment', 'part', 'part'), - ('stock', 'StockItemAttachment', 'stockitem', 'stock_item') - ] - - -def update_attachments(apps, schema_editor): - """Migrate any existing attachment models to the new attachment table.""" - - Attachment = apps.get_model('common', 'attachment') - - N = 0 - - for app, model, target_model, model_ref in get_legacy_models(): - LegacyAttachmentModel = apps.get_model(app, model) - - if LegacyAttachmentModel.objects.count() == 0: - continue - - to_create = [] - - for attachment in LegacyAttachmentModel.objects.all(): - - # Find the size of the file (if exists) - if attachment.attachment and default_storage.exists(attachment.attachment.name): - try: - file_size = default_storage.size(attachment.attachment.name) - except NotImplementedError: - file_size = 0 - else: - file_size = 0 - - to_create.append( - Attachment( - model_type=target_model, - model_id=getattr(attachment, model_ref).pk, - attachment=attachment.attachment, - link=attachment.link, - comment=attachment.comment, - upload_date=attachment.upload_date, - upload_user=attachment.user, - file_size=file_size - ) - ) - - if len(to_create) > 0: - print(f"Migrating {len(to_create)} attachments for the legacy '{model}' model.") - Attachment.objects.bulk_create(to_create) - - N += len(to_create) - - # Check the correct number of Attachment objects has been created - assert(N == Attachment.objects.count()) - - -def reverse_attachments(apps, schema_editor): - """Reverse data migration, and map new Attachment model back to legacy models.""" - - Attachment = apps.get_model('common', 'attachment') - - N = 0 - - for app, model, target_model, model_ref in get_legacy_models(): - LegacyAttachmentModel = apps.get_model(app, model) - - to_create = [] - - for attachment in Attachment.objects.filter(model_type=target_model): - - TargetModel = apps.get_model(app, target_model) - - data = { - 'attachment': attachment.attachment, - 'link': attachment.link, - 'comment': attachment.comment, - 'upload_date': attachment.upload_date, - 'user': attachment.upload_user, - model_ref: TargetModel.objects.get(pk=attachment.model_id) - } - - to_create.append(LegacyAttachmentModel(**data)) - - if len(to_create) > 0: - print(f"Reversing {len(to_create)} attachments for the legacy '{model}' model.") - LegacyAttachmentModel.objects.bulk_create(to_create) - - N += len(to_create) - - # Check the correct number of LegacyAttachmentModel objects has been created - assert(N == Attachment.objects.count()) - -class Migration(migrations.Migration): - - dependencies = [ - ('build', '0050_auto_20240508_0138'), - ('common', '0025_attachment'), - ('company', '0069_company_active'), - ('order', '0099_alter_salesorder_status'), - ('part', '0123_parttesttemplate_choices'), - ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') - ] - - operations = [ - migrations.RunPython(update_attachments, reverse_code=reverse_attachments), - ] diff --git a/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py b/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py deleted file mode 100644 index a89777320136..000000000000 --- a/src/backend/InvenTree/common/migrations/0027_alter_customunit_symbol.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.12 on 2024-07-04 10:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0026_auto_20240608_1238'), - ] - - operations = [ - migrations.AlterField( - model_name='customunit', - name='symbol', - field=models.CharField(blank=True, help_text='Optional unit symbol', max_length=10, verbose_name='Symbol'), - ), - ] diff --git a/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py b/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py deleted file mode 100644 index 5e2ea45c016a..000000000000 --- a/src/backend/InvenTree/common/migrations/0028_colortheme_user_obj.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 4.2.12 on 2024-07-04 10:23 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -def migrate_userthemes(apps, schema_editor): - """Mgrate text-based user references to ForeignKey references.""" - ColorTheme = apps.get_model("common", "ColorTheme") - User = apps.get_model(settings.AUTH_USER_MODEL) - - for theme in ColorTheme.objects.all(): - try: - theme.user_obj = User.objects.get(username=theme.user) - theme.save() - except User.DoesNotExist: - pass - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("common", "0027_alter_customunit_symbol"), - ] - - operations = [ - migrations.AddField( - model_name="colortheme", - name="user_obj", - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL, - ), - ), - migrations.RunPython(migrate_userthemes, migrations.RunPython.noop), - ] diff --git a/src/backend/InvenTree/common/migrations/0029_inventreecustomuserstatemodel.py b/src/backend/InvenTree/common/migrations/0029_inventreecustomuserstatemodel.py deleted file mode 100644 index 408edf6102e5..000000000000 --- a/src/backend/InvenTree/common/migrations/0029_inventreecustomuserstatemodel.py +++ /dev/null @@ -1,97 +0,0 @@ -# Generated by Django 4.2.14 on 2024-08-07 22:40 - -import django.db.models.deletion -from django.db import migrations, models - -from common.models import state_color_mappings - - -class Migration(migrations.Migration): - - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("common", "0028_colortheme_user_obj"), - ] - - operations = [ - migrations.CreateModel( - name="InvenTreeCustomUserStateModel", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "key", - models.IntegerField( - help_text="Value that will be saved in the models database", - verbose_name="Key", - ), - ), - ( - "name", - models.CharField( - help_text="Name of the state", - max_length=250, - verbose_name="Name", - ), - ), - ( - "label", - models.CharField( - help_text="Label that will be displayed in the frontend", - max_length=250, - verbose_name="Label", - ), - ), - ( - "color", - models.CharField( - choices=state_color_mappings(), - default="secondary", - help_text="Color that will be displayed in the frontend", - max_length=10, - verbose_name="Color", - ), - ), - ( - "logical_key", - models.IntegerField( - help_text="State logical key that is equal to this custom state in business logic", - verbose_name="Logical Key", - ), - ), - ( - "reference_status", - models.CharField( - help_text="Status set that is extended with this custom state", - max_length=250, - verbose_name="Reference Status Set", - ), - ), - ( - "model", - models.ForeignKey( - blank=True, - help_text="Model this state is associated with", - null=True, - on_delete=django.db.models.deletion.SET_NULL, - to="contenttypes.contenttype", - verbose_name="Model", - ), - ), - ], - options={ - "verbose_name": "Custom State", - "verbose_name_plural": "Custom States", - "unique_together": { - ("model", "reference_status", "key", "logical_key") - }, - }, - ), - ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 93dd5d11cebd..514a573a3842 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -4,28 +4,28 @@ """ import base64 +import decimal import hashlib import hmac import json import logging +import math import os -import sys +import re import uuid from datetime import timedelta, timezone from enum import Enum -from io import BytesIO from secrets import compare_digest from typing import Any, Callable, TypedDict, Union from django.apps import apps -from django.conf import settings as django_settings +from django.conf import settings from django.contrib.auth.models import Group, User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.contrib.humanize.templatetags.humanize import naturaltime from django.core.cache import cache -from django.core.exceptions import ValidationError -from django.core.files.storage import default_storage +from django.core.exceptions import AppRegistryNotReady, ValidationError from django.core.validators import MaxValueValidator, MinValueValidator, URLValidator from django.db import models, transaction from django.db.models.signals import post_delete, post_save @@ -37,12 +37,10 @@ from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import convert_money +from djmoney.settings import CURRENCY_CHOICES from rest_framework.exceptions import PermissionDenied -from taggit.managers import TaggableManager import build.validators -import common.currency -import common.validators import InvenTree.fields import InvenTree.helpers import InvenTree.models @@ -50,27 +48,12 @@ import InvenTree.tasks import InvenTree.validators import order.validators -import plugin.base.barcodes.helper import report.helpers import users.models -from generic.states import ColorEnum -from generic.states.custom import get_custom_classes, state_color_mappings -from InvenTree.sanitizer import sanitize_svg from plugin import registry logger = logging.getLogger('inventree') -if sys.version_info >= (3, 11): - from typing import NotRequired -else: - - class NotRequired: # pragma: no cover - """NotRequired type helper is only supported with Python 3.11+.""" - - def __class_getitem__(cls, item): - """Return the item.""" - return item - class MetaMixin(models.Model): """A base class for InvenTree models to include shared meta fields. @@ -118,7 +101,7 @@ def __call__(self, value): value = str(value).strip() # If a configuration level value has been specified, prevent change - if django_settings.SITE_URL and value != django_settings.SITE_URL: + if settings.SITE_URL and value != settings.SITE_URL: raise ValidationError(_('Site URL is locked by configuration')) if len(value) == 0: @@ -131,11 +114,6 @@ def __call__(self, value): class ProjectCode(InvenTree.models.InvenTreeMetadataModel): """A ProjectCode is a unique identifier for a project.""" - class Meta: - """Class options for the ProjectCode model.""" - - verbose_name = _('Project Code') - @staticmethod def get_api_url(): """Return the API URL for this model.""" @@ -573,25 +551,25 @@ def get_setting_object(cls, key, **kwargs): """ key = str(key).strip().upper() - # Unless otherwise specified, attempt to create the setting - create = kwargs.pop('create', True) - - # Specify if cache lookup should be performed - do_cache = kwargs.pop('cache', django_settings.GLOBAL_CACHE_ENABLED) - filters = { 'key__iexact': key, # Optionally filter by other keys **cls.get_filters(**kwargs), } - # Prevent saving to the database during certain operations - if ( - InvenTree.ready.isImportingData() - or InvenTree.ready.isRunningMigrations() - or InvenTree.ready.isRebuildingData() - or InvenTree.ready.isRunningBackup() - ): + # Unless otherwise specified, attempt to create the setting + create = kwargs.pop('create', True) + + # Specify if cache lookup should be performed + do_cache = kwargs.pop('cache', False) + + # Prevent saving to the database during data import + if InvenTree.ready.isImportingData(): + create = False + do_cache = False + + # Prevent saving to the database during migrations + if InvenTree.ready.isRunningMigrations(): create = False do_cache = False @@ -618,21 +596,33 @@ def get_setting_object(cls, key, **kwargs): setting = None # Setting does not exist! (Try to create it) - if not setting and create: - # Attempt to create a new settings object - default_value = cls.get_setting_default(key, **kwargs) - setting = cls(key=key, value=default_value, **kwargs) + if not setting: + # Prevent creation of new settings objects when importing data + if ( + InvenTree.ready.isImportingData() + or not InvenTree.ready.canAppAccessDatabase( + allow_test=True, allow_shell=True + ) + ): + create = False - try: - # Wrap this statement in "atomic", so it can be rolled back if it fails - with transaction.atomic(): - setting.save(**kwargs) - except (IntegrityError, OperationalError, ProgrammingError): - # It might be the case that the database isn't created yet - pass - except ValidationError: - # The setting failed validation - might be due to duplicate keys - pass + if create: + # Attempt to create a new settings object + + default_value = cls.get_setting_default(key, **kwargs) + + setting = cls(key=key, value=default_value, **kwargs) + + try: + # Wrap this statement in "atomic", so it can be rolled back if it fails + with transaction.atomic(): + setting.save(**kwargs) + except (IntegrityError, OperationalError, ProgrammingError): + # It might be the case that the database isn't created yet + pass + except ValidationError: + # The setting failed validation - might be due to duplicate keys + pass if setting and do_cache: # Cache this setting object @@ -706,15 +696,6 @@ def set_setting(cls, key, value, change_user=None, create=True, **kwargs): if change_user is not None and not change_user.is_staff: return - # Do not write to the database under certain conditions - if ( - InvenTree.ready.isImportingData() - or InvenTree.ready.isRunningMigrations() - or InvenTree.ready.isRebuildingData() - or InvenTree.ready.isRunningBackup() - ): - return - attempts = int(kwargs.get('attempts', 3)) filters = { @@ -768,7 +749,6 @@ def set_setting(cls, key, value, change_user=None, create=True, **kwargs): attempts=attempts - 1, **kwargs, ) - except (OperationalError, ProgrammingError): logger.warning("Database is locked, cannot set setting '%s'", key) # Likely the DB is locked - not much we can do here @@ -1136,7 +1116,7 @@ def settings_group_options(): def update_instance_url(setting): """Update the first site objects domain to url.""" - if not django_settings.SITE_MULTI: + if not settings.SITE_MULTI: return try: @@ -1152,7 +1132,7 @@ def update_instance_url(setting): def update_instance_name(setting): """Update the first site objects name to instance name.""" - if not django_settings.SITE_MULTI: + if not settings.SITE_MULTI: return try: @@ -1166,6 +1146,52 @@ def update_instance_name(setting): site_obj.save() +def validate_email_domains(setting): + """Validate the email domains setting.""" + if not setting.value: + return + + domains = setting.value.split(',') + for domain in domains: + if not domain: + raise ValidationError(_('An empty domain is not allowed.')) + if not re.match(r'^@[a-zA-Z0-9\.\-_]+$', domain): + raise ValidationError(_(f'Invalid domain name: {domain}')) + + +def currency_exchange_plugins(): + """Return a set of plugin choices which can be used for currency exchange.""" + try: + from plugin import registry + + plugs = registry.with_mixin('currencyexchange', active=True) + except Exception: + plugs = [] + + return [('', _('No plugin'))] + [(plug.slug, plug.human_name) for plug in plugs] + + +def after_change_currency(setting): + """Callback function when base currency is changed. + + - Update exchange rates + - Recalculate prices for all parts + """ + if InvenTree.ready.isImportingData(): + return + + if not InvenTree.ready.canAppAccessDatabase(): + return + + from part import tasks as part_tasks + + # Immediately update exchange rates + InvenTree.tasks.update_exchange_rates(force=True) + + # Offload update of part prices to a background task + InvenTree.tasks.offload_task(part_tasks.check_missing_pricing, force_async=True) + + def reload_plugin_registry(setting): """When a core plugin setting is changed, reload the plugin registry.""" from plugin import registry @@ -1182,7 +1208,7 @@ class InvenTreeSettingsKeyType(SettingsKeyType): requires_restart: If True, a server restart is required after changing the setting """ - requires_restart: NotRequired[bool] + requires_restart: bool class InvenTreeSetting(BaseInvenTreeSetting): @@ -1278,15 +1304,8 @@ def save(self, *args, **kwargs): 'name': _('Default Currency'), 'description': _('Select base currency for pricing calculations'), 'default': 'USD', - 'choices': common.currency.currency_code_mappings, - 'after_save': common.currency.after_change_currency, - }, - 'CURRENCY_CODES': { - 'name': _('Supported Currencies'), - 'description': _('List of supported currency codes'), - 'default': common.currency.currency_codes_default_list(), - 'validator': common.currency.validate_currency_codes, - 'after_save': common.currency.after_change_currency, + 'choices': CURRENCY_CHOICES, + 'after_save': after_change_currency, }, 'CURRENCY_UPDATE_INTERVAL': { 'name': _('Currency Update Interval'), @@ -1300,7 +1319,7 @@ def save(self, *args, **kwargs): 'CURRENCY_UPDATE_PLUGIN': { 'name': _('Currency Update Plugin'), 'description': _('Currency update plugin to use'), - 'choices': common.currency.currency_exchange_plugins, + 'choices': currency_exchange_plugins, 'default': 'inventreecurrencyexchange', }, 'INVENTREE_DOWNLOAD_FROM_URL': { @@ -1411,36 +1430,12 @@ def save(self, *args, **kwargs): 'default': True, 'validator': bool, }, - 'BARCODE_SHOW_TEXT': { - 'name': _('Barcode Show Data'), - 'description': _('Display barcode data in browser as text'), - 'default': False, - 'validator': bool, - }, - 'BARCODE_GENERATION_PLUGIN': { - 'name': _('Barcode Generation Plugin'), - 'description': _('Plugin to use for internal barcode data generation'), - 'choices': plugin.base.barcodes.helper.barcode_plugins, - 'default': 'inventreebarcode', - }, 'PART_ENABLE_REVISION': { 'name': _('Part Revisions'), 'description': _('Enable revision field for Part'), 'validator': bool, 'default': True, }, - 'PART_REVISION_ASSEMBLY_ONLY': { - 'name': _('Assembly Revision Only'), - 'description': _('Only allow revisions for assembly parts'), - 'validator': bool, - 'default': False, - }, - 'PART_ALLOW_DELETE_FROM_ASSEMBLY': { - 'name': _('Allow Deletion from Assembly'), - 'description': _('Allow deletion of parts which are used in an assembly'), - 'validator': bool, - 'default': False, - }, 'PART_IPN_REGEX': { 'name': _('IPN Regex'), 'description': _('Regular expression pattern for matching Part IPN'), @@ -1560,7 +1555,6 @@ def save(self, *args, **kwargs): 'name': _('Part Category Default Icon'), 'description': _('Part category default icon (empty means no icon)'), 'default': '', - 'validator': common.validators.validate_icon, }, 'PART_PARAMETER_ENFORCE_UNITS': { 'name': _('Enforce Parameter Units'), @@ -1576,12 +1570,7 @@ def save(self, *args, **kwargs): 'Minimum number of decimal places to display when rendering pricing data' ), 'default': 0, - 'validator': [ - int, - MinValueValidator(0), - MaxValueValidator(4), - common.validators.validate_decimal_places_min, - ], + 'validator': [int, MinValueValidator(0), MaxValueValidator(4)], }, 'PRICING_DECIMAL_PLACES': { 'name': _('Maximum Pricing Decimal Places'), @@ -1589,12 +1578,7 @@ def save(self, *args, **kwargs): 'Maximum number of decimal places to display when rendering pricing data' ), 'default': 6, - 'validator': [ - int, - MinValueValidator(2), - MaxValueValidator(6), - common.validators.validate_decimal_places_max, - ], + 'validator': [int, MinValueValidator(2), MaxValueValidator(6)], }, 'PRICING_USE_SUPPLIER_PRICING': { 'name': _('Use Supplier Pricing'), @@ -1782,7 +1766,6 @@ def save(self, *args, **kwargs): 'name': _('Stock Location Default Icon'), 'description': _('Stock location default icon (empty means no icon)'), 'default': '', - 'validator': common.validators.validate_icon, }, 'STOCK_SHOW_INSTALLED_ITEMS': { 'name': _('Show Installed Stock Items'), @@ -1798,14 +1781,6 @@ def save(self, *args, **kwargs): 'default': True, 'validator': bool, }, - 'STOCK_ALLOW_OUT_OF_STOCK_TRANSFER': { - 'name': _('Allow Out of Stock Transfer'), - 'description': _( - 'Allow stock items which are not in stock to be transferred between stock locations' - ), - 'default': False, - 'validator': bool, - }, 'BUILDORDER_REFERENCE_PATTERN': { 'name': _('Build Order Reference Pattern'), 'description': _( @@ -1820,34 +1795,6 @@ def save(self, *args, **kwargs): 'default': False, 'validator': bool, }, - 'BUILDORDER_REQUIRE_ACTIVE_PART': { - 'name': _('Require Active Part'), - 'description': _('Prevent build order creation for inactive parts'), - 'default': False, - 'validator': bool, - }, - 'BUILDORDER_REQUIRE_LOCKED_PART': { - 'name': _('Require Locked Part'), - 'description': _('Prevent build order creation for unlocked parts'), - 'default': False, - 'validator': bool, - }, - 'BUILDORDER_REQUIRE_VALID_BOM': { - 'name': _('Require Valid BOM'), - 'description': _( - 'Prevent build order creation unless BOM has been validated' - ), - 'default': False, - 'validator': bool, - }, - 'BUILDORDER_REQUIRE_CLOSED_CHILDS': { - 'name': _('Require Closed Child Orders'), - 'description': _( - 'Prevent build order completion until all child orders are closed' - ), - 'default': False, - 'validator': bool, - }, 'PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS': { 'name': _('Block Until Tests Pass'), 'description': _( @@ -1912,14 +1859,6 @@ def save(self, *args, **kwargs): 'default': False, 'validator': bool, }, - 'SALESORDER_SHIP_COMPLETE': { - 'name': _('Mark Shipped Orders as Complete'), - 'description': _( - 'Sales orders marked as shipped will automatically be completed, bypassing the "shipped" status' - ), - 'default': False, - 'validator': bool, - }, 'PURCHASEORDER_REFERENCE_PATTERN': { 'name': _('Purchase Order Reference Pattern'), 'description': _( @@ -1977,38 +1916,6 @@ def save(self, *args, **kwargs): 'default': False, 'validator': bool, }, - 'LOGIN_ENABLE_SSO_GROUP_SYNC': { - 'name': _('Enable SSO group sync'), - 'description': _( - 'Enable synchronizing InvenTree groups with groups provided by the IdP' - ), - 'default': False, - 'validator': bool, - }, - 'SSO_GROUP_KEY': { - 'name': _('SSO group key'), - 'description': _( - 'The name of the groups claim attribute provided by the IdP' - ), - 'default': 'groups', - 'validator': str, - }, - 'SSO_GROUP_MAP': { - 'name': _('SSO group map'), - 'description': _( - 'A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created.' - ), - 'validator': json.loads, - 'default': '{}', - }, - 'SSO_REMOVE_GROUPS': { - 'name': _('Remove groups outside of SSO'), - 'description': _( - 'Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues' - ), - 'default': True, - 'validator': bool, - }, 'LOGIN_MAIL_REQUIRED': { 'name': _('Email required'), 'description': _('Require user to supply mail on signup'), @@ -2041,13 +1948,11 @@ def save(self, *args, **kwargs): 'Restrict signup to certain domains (comma-separated, starting with @)' ), 'default': '', - 'before_save': common.validators.validate_email_domains, + 'before_save': validate_email_domains, }, 'SIGNUP_GROUP': { 'name': _('Group on signup'), - 'description': _( - 'Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP.' - ), + 'description': _('Group to which new users are assigned on registration'), 'default': '', 'choices': settings_group_options, }, @@ -2528,6 +2433,36 @@ class Meta: 'validator': [int, MinValueValidator(0)], 'default': 100, }, + 'DEFAULT_PART_LABEL_TEMPLATE': { + 'name': _('Default part label template'), + 'description': _('The part label template to be automatically selected'), + 'validator': [int], + 'default': '', + }, + 'DEFAULT_ITEM_LABEL_TEMPLATE': { + 'name': _('Default stock item template'), + 'description': _( + 'The stock item label template to be automatically selected' + ), + 'validator': [int], + 'default': '', + }, + 'DEFAULT_LOCATION_LABEL_TEMPLATE': { + 'name': _('Default stock location label template'), + 'description': _( + 'The stock location label template to be automatically selected' + ), + 'validator': [int], + 'default': '', + }, + 'DEFAULT_LINE_LABEL_TEMPLATE': { + 'name': _('Default build line label template'), + 'description': _( + 'The build line label template to be automatically selected' + ), + 'validator': [int], + 'default': '', + }, 'NOTIFICATION_ERROR_REPORT': { 'name': _('Receive error reports'), 'description': _('Receive notifications for system errors'), @@ -2609,33 +2544,100 @@ def convert_to(self, currency_code): return converted.amount +def get_price( + instance, + quantity, + moq=True, + multiples=True, + currency=None, + break_name: str = 'price_breaks', +): + """Calculate the price based on quantity price breaks. + + - Don't forget to add in flat-fee cost (base_cost field) + - If MOQ (minimum order quantity) is required, bump quantity + - If order multiples are to be observed, then we need to calculate based on that, too + """ + from common.settings import currency_code_default + + if hasattr(instance, break_name): + price_breaks = getattr(instance, break_name).all() + else: + price_breaks = [] + + # No price break information available? + if len(price_breaks) == 0: + return None + + # Check if quantity is fraction and disable multiples + multiples = quantity % 1 == 0 + + # Order multiples + if multiples: + quantity = int(math.ceil(quantity / instance.multiple) * instance.multiple) + + pb_found = False + pb_quantity = -1 + pb_cost = 0.0 + + if currency is None: + # Default currency selection + currency = currency_code_default() + + pb_min = None + for pb in price_breaks: + # Store smallest price break + if not pb_min: + pb_min = pb + + # Ignore this pricebreak (quantity is too high) + if pb.quantity > quantity: + continue + + pb_found = True + + # If this price-break quantity is the largest so far, use it! + if pb.quantity > pb_quantity: + pb_quantity = pb.quantity + + # Convert everything to the selected currency + pb_cost = pb.convert_to(currency) + + # Use smallest price break + if not pb_found and pb_min: + # Update price break information + pb_quantity = pb_min.quantity + pb_cost = pb_min.convert_to(currency) + # Trigger cost calculation using smallest price break + pb_found = True + + # Convert quantity to decimal.Decimal format + quantity = decimal.Decimal(f'{quantity}') + + if pb_found: + cost = pb_cost * quantity + return InvenTree.helpers.normalize(cost + instance.base_cost) + return None + + class ColorTheme(models.Model): """Color Theme Setting.""" name = models.CharField(max_length=20, default='', blank=True) user = models.CharField(max_length=150, unique=True) - user_obj = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True) @classmethod def get_color_themes_choices(cls): """Get all color themes from static folder.""" - color_theme_dir = ( - django_settings.STATIC_COLOR_THEMES_DIR - if django_settings.STATIC_COLOR_THEMES_DIR.exists() - else django_settings.BASE_DIR.joinpath( - 'InvenTree', 'static', 'css', 'color-themes' - ) - ) - - if not color_theme_dir.exists(): - logger.error(f'Theme directory "{color_theme_dir}" does not exist') + if not settings.STATIC_COLOR_THEMES_DIR.exists(): + logger.error('Theme directory does not exist') return [] # Get files list from css/color-themes/ folder files_list = [] - for file in color_theme_dir.iterdir(): + for file in settings.STATIC_COLOR_THEMES_DIR.iterdir(): files_list.append([file.stem, file.suffix]) # Get color themes choices (CSS sheets) @@ -2986,7 +2988,7 @@ def age(self) -> int: # Add timezone information if TZ is enabled (in production mode mostly) delta = now() - ( self.creation.replace(tzinfo=timezone.utc) - if django_settings.USE_TZ + if settings.USE_TZ else self.creation ) return delta.seconds @@ -3035,7 +3037,7 @@ def rename_notes_image(instance, filename): class NotesImage(models.Model): """Model for storing uploading images for the 'notes' fields of various models. - Simply stores the image file, for use in the 'notes' field (of any models which support markdown). + Simply stores the image file, for use in the 'notes' field (of any models which support markdown) """ image = models.ImageField( @@ -3046,21 +3048,6 @@ class NotesImage(models.Model): date = models.DateTimeField(auto_now_add=True) - model_type = models.CharField( - max_length=100, - blank=True, - null=True, - validators=[common.validators.validate_notes_model_type], - help_text=_('Target model type for this image'), - ) - - model_id = models.IntegerField( - help_text=_('Target model ID for this image'), - blank=True, - null=True, - default=None, - ) - class CustomUnit(models.Model): """Model for storing custom physical unit definitions. @@ -3074,11 +3061,6 @@ class CustomUnit(models.Model): https://pint.readthedocs.io/en/stable/advanced/defining.html """ - class Meta: - """Class meta options.""" - - verbose_name = _('Custom Unit') - def fmt_string(self): """Construct a unit definition string e.g. 'dog_year = 52 * day = dy'.""" fmt = f'{self.name} = {self.definition}' @@ -3088,18 +3070,6 @@ def fmt_string(self): return fmt - def validate_unique(self, exclude=None) -> None: - """Ensure that the custom unit is unique.""" - super().validate_unique(exclude) - - if self.symbol: - if ( - CustomUnit.objects.filter(symbol=self.symbol) - .exclude(pk=self.pk) - .exists() - ): - raise ValidationError({'symbol': _('Unit symbol must be unique')}) - def clean(self): """Validate that the provided custom unit is indeed valid.""" super().clean() @@ -3141,6 +3111,7 @@ def clean(self): max_length=10, verbose_name=_('Symbol'), help_text=_('Optional unit symbol'), + unique=True, blank=True, ) @@ -3160,290 +3131,3 @@ def after_custom_unit_updated(sender, instance, **kwargs): from InvenTree.conversion import reload_unit_registry reload_unit_registry() - - -def rename_attachment(instance, filename): - """Callback function to rename an uploaded attachment file. - - Arguments: - - instance: The Attachment instance - - filename: The original filename of the uploaded file - - Returns: - - The new filename for the uploaded file, e.g. 'attachments///' - """ - # Remove any illegal characters from the filename - illegal_chars = '\'"\\`~#|!@#$%^&*()[]{}<>?;:+=,' - - for c in illegal_chars: - filename = filename.replace(c, '') - - filename = os.path.basename(filename) - - # Generate a new filename for the attachment - return os.path.join( - 'attachments', str(instance.model_type), str(instance.model_id), filename - ) - - -class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): - """Class which represents an uploaded file attachment. - - An attachment can be either an uploaded file, or an external URL. - - Attributes: - attachment: The uploaded file - url: An external URL - comment: A comment or description for the attachment - user: The user who uploaded the attachment - upload_date: The date the attachment was uploaded - file_size: The size of the uploaded file - metadata: Arbitrary metadata for the attachment (inherit from MetadataMixin) - tags: Tags for the attachment - """ - - class Meta: - """Metaclass options.""" - - verbose_name = _('Attachment') - - def save(self, *args, **kwargs): - """Custom 'save' method for the Attachment model. - - - Record the file size of the uploaded attachment (if applicable) - - Ensure that the 'content_type' and 'object_id' fields are set - - Run extra validations - """ - # Either 'attachment' or 'link' must be specified! - if not self.attachment and not self.link: - raise ValidationError({ - 'attachment': _('Missing file'), - 'link': _('Missing external link'), - }) - - if self.attachment: - if self.attachment.name.lower().endswith('.svg'): - self.attachment.file.file = self.clean_svg(self.attachment) - else: - self.file_size = 0 - - super().save(*args, **kwargs) - - # Update file size - if self.file_size == 0 and self.attachment: - # Get file size - if default_storage.exists(self.attachment.name): - try: - self.file_size = default_storage.size(self.attachment.name) - except Exception: - pass - - if self.file_size != 0: - super().save() - - def clean_svg(self, field): - """Sanitize SVG file before saving.""" - cleaned = sanitize_svg(field.file.read()) - return BytesIO(bytes(cleaned, 'utf8')) - - def __str__(self): - """Human name for attachment.""" - if self.attachment is not None: - return os.path.basename(self.attachment.name) - return str(self.link) - - model_type = models.CharField( - max_length=100, - validators=[common.validators.validate_attachment_model_type], - help_text=_('Target model type for this image'), - ) - - model_id = models.PositiveIntegerField() - - attachment = models.FileField( - upload_to=rename_attachment, - verbose_name=_('Attachment'), - help_text=_('Select file to attach'), - blank=True, - null=True, - ) - - link = InvenTree.fields.InvenTreeURLField( - blank=True, - null=True, - verbose_name=_('Link'), - help_text=_('Link to external URL'), - ) - - comment = models.CharField( - blank=True, - max_length=250, - verbose_name=_('Comment'), - help_text=_('Attachment comment'), - ) - - upload_user = models.ForeignKey( - User, - on_delete=models.SET_NULL, - blank=True, - null=True, - verbose_name=_('User'), - help_text=_('User'), - ) - - upload_date = models.DateField( - auto_now_add=True, - null=True, - blank=True, - verbose_name=_('Upload date'), - help_text=_('Date the file was uploaded'), - ) - - file_size = models.PositiveIntegerField( - default=0, verbose_name=_('File size'), help_text=_('File size in bytes') - ) - - tags = TaggableManager(blank=True) - - @property - def basename(self): - """Base name/path for attachment.""" - if self.attachment: - return os.path.basename(self.attachment.name) - return None - - def fully_qualified_url(self): - """Return a 'fully qualified' URL for this attachment. - - - If the attachment is a link to an external resource, return the link - - If the attachment is an uploaded file, return the fully qualified media URL - """ - if self.link: - return self.link - - if self.attachment: - import InvenTree.helpers_model - - media_url = InvenTree.helpers.getMediaUrl(self.attachment.url) - return InvenTree.helpers_model.construct_absolute_url(media_url) - - return '' - - def check_permission(self, permission, user): - """Check if the user has the required permission for this attachment.""" - from InvenTree.models import InvenTreeAttachmentMixin - - model_class = common.validators.attachment_model_class_from_label( - self.model_type - ) - - if not issubclass(model_class, InvenTreeAttachmentMixin): - raise ValidationError(_('Invalid model type specified for attachment')) - - return model_class.check_attachment_permission(permission, user) - - -class InvenTreeCustomUserStateModel(models.Model): - """Custom model to extends any registered state with extra custom, user defined states.""" - - key = models.IntegerField( - verbose_name=_('Key'), - help_text=_('Value that will be saved in the models database'), - ) - name = models.CharField( - max_length=250, verbose_name=_('Name'), help_text=_('Name of the state') - ) - label = models.CharField( - max_length=250, - verbose_name=_('Label'), - help_text=_('Label that will be displayed in the frontend'), - ) - color = models.CharField( - max_length=10, - choices=state_color_mappings(), - default=ColorEnum.secondary.value, - verbose_name=_('Color'), - help_text=_('Color that will be displayed in the frontend'), - ) - logical_key = models.IntegerField( - verbose_name=_('Logical Key'), - help_text=_( - 'State logical key that is equal to this custom state in business logic' - ), - ) - model = models.ForeignKey( - ContentType, - on_delete=models.SET_NULL, - null=True, - blank=True, - verbose_name=_('Model'), - help_text=_('Model this state is associated with'), - ) - reference_status = models.CharField( - max_length=250, - verbose_name=_('Reference Status Set'), - help_text=_('Status set that is extended with this custom state'), - ) - - class Meta: - """Metaclass options for this mixin.""" - - verbose_name = _('Custom State') - verbose_name_plural = _('Custom States') - unique_together = [['model', 'reference_status', 'key', 'logical_key']] - - def __str__(self) -> str: - """Return string representation of the custom state.""" - return f'{self.model.name} ({self.reference_status}): {self.name} | {self.key} ({self.logical_key})' - - def save(self, *args, **kwargs) -> None: - """Ensure that the custom state is valid before saving.""" - self.clean() - return super().save(*args, **kwargs) - - def clean(self) -> None: - """Validate custom state data.""" - if self.model is None: - raise ValidationError({'model': _('Model must be selected')}) - - if self.key is None: - raise ValidationError({'key': _('Key must be selected')}) - - if self.logical_key is None: - raise ValidationError({'logical_key': _('Logical key must be selected')}) - - # Ensure that the key is not the same as the logical key - if self.key == self.logical_key: - raise ValidationError({'key': _('Key must be different from logical key')}) - - if self.reference_status is None or self.reference_status == '': - raise ValidationError({ - 'reference_status': _('Reference status must be selected') - }) - - # Ensure that the key is not in the range of the logical keys of the reference status - ref_set = list( - filter( - lambda x: x.__name__ == self.reference_status, - get_custom_classes(include_custom=False), - ) - ) - if len(ref_set) == 0: - raise ValidationError({ - 'reference_status': _('Reference status set not found') - }) - ref_set = ref_set[0] - if self.key in ref_set.keys(): - raise ValidationError({ - 'key': _( - 'Key must be different from the logical keys of the reference status' - ) - }) - if self.logical_key not in ref_set.keys(): - raise ValidationError({ - 'logical_key': _( - 'Logical key must be in the logical keys of the reference status' - ) - }) - - return super().clean() diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 9f69bbffffdb..5bc1759d9a34 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -9,21 +9,13 @@ from error_report.models import Error from flags.state import flag_state from rest_framework import serializers -from rest_framework.exceptions import PermissionDenied -from taggit.serializers import TagListSerializerField import common.models as common_models -import common.validators -import generic.states.custom -from importer.mixins import DataImportExportSerializerMixin -from importer.registry import register_importer from InvenTree.helpers import get_objectreference from InvenTree.helpers_model import construct_absolute_url from InvenTree.serializers import ( - InvenTreeAttachmentSerializerField, InvenTreeImageSerializerField, InvenTreeModelSerializer, - UserSerializer, ) from plugin import registry as plugin_registry from users.serializers import OwnerSerializer @@ -133,17 +125,6 @@ class Meta: user = serializers.PrimaryKeyRelatedField(read_only=True) -class CurrencyExchangeSerializer(serializers.Serializer): - """Serializer for a Currency Exchange request. - - It's only purpose is describing the results correctly in the API schema right now. - """ - - base_currency = serializers.CharField(read_only=True) - exchange_rates = serializers.DictField(child=serializers.FloatField()) - updated = serializers.DateTimeField(read_only=True) - - class GenericReferencedSettingSerializer(SettingsSerializer): """Serializer for a GenericReferencedSetting model. @@ -289,15 +270,14 @@ class Meta: """Meta options for NotesImageSerializer.""" model = common_models.NotesImage - fields = ['pk', 'image', 'user', 'date', 'model_type', 'model_id'] + fields = ['pk', 'image', 'user', 'date'] read_only_fields = ['date', 'user'] image = InvenTreeImageSerializerField(required=True) -@register_importer() -class ProjectCodeSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): +class ProjectCodeSerializer(InvenTreeModelSerializer): """Serializer for the ProjectCode model.""" class Meta: @@ -309,32 +289,6 @@ class Meta: responsible_detail = OwnerSerializer(source='responsible', read_only=True) -@register_importer() -class CustomStateSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): - """Serializer for the custom state model.""" - - class Meta: - """Meta options for CustomStateSerializer.""" - - model = common_models.InvenTreeCustomUserStateModel - fields = [ - 'pk', - 'key', - 'name', - 'label', - 'color', - 'logical_key', - 'model', - 'model_name', - 'reference_status', - ] - - model_name = serializers.CharField(read_only=True, source='model.name') - reference_status = serializers.ChoiceField( - choices=generic.states.custom.state_reference_mappings() - ) - - class FlagSerializer(serializers.Serializer): """Serializer for feature flags.""" @@ -371,8 +325,7 @@ def get_is_plugin(self, obj) -> bool: return obj.app_label in plugin_registry.installed_apps -@register_importer() -class CustomUnitSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): +class CustomUnitSerializer(InvenTreeModelSerializer): """DRF serializer for CustomUnit model.""" class Meta: @@ -510,111 +463,3 @@ class Meta: pk = serializers.CharField(source='id', read_only=True) result = serializers.CharField() - - -class AttachmentSerializer(InvenTreeModelSerializer): - """Serializer class for the Attachment model.""" - - class Meta: - """Serializer metaclass.""" - - model = common_models.Attachment - fields = [ - 'pk', - 'attachment', - 'filename', - 'link', - 'comment', - 'upload_date', - 'upload_user', - 'user_detail', - 'file_size', - 'model_type', - 'model_id', - 'tags', - ] - - read_only_fields = ['pk', 'file_size', 'upload_date', 'upload_user', 'filename'] - - def __init__(self, *args, **kwargs): - """Override the model_type field to provide dynamic choices.""" - super().__init__(*args, **kwargs) - - if len(self.fields['model_type'].choices) == 0: - self.fields[ - 'model_type' - ].choices = common.validators.attachment_model_options() - - tags = TagListSerializerField(required=False) - - user_detail = UserSerializer(source='upload_user', read_only=True, many=False) - - attachment = InvenTreeAttachmentSerializerField(required=False, allow_null=True) - - # The 'filename' field must be present in the serializer - filename = serializers.CharField( - label=_('Filename'), required=False, source='basename', allow_blank=False - ) - - upload_date = serializers.DateField(read_only=True) - - # Note: The choices are overridden at run-time on class initialization - model_type = serializers.ChoiceField( - label=_('Model Type'), - choices=common.validators.attachment_model_options(), - required=True, - allow_blank=False, - allow_null=False, - ) - - def save(self, **kwargs): - """Override the save method to handle the model_type field.""" - from InvenTree.models import InvenTreeAttachmentMixin - from users.models import check_user_permission - - model_type = self.validated_data.get('model_type', None) - - if model_type is None: - if self.instance: - model_type = self.instance.model_type - - # Ensure that the user has permission to attach files to the specified model - user = self.context.get('request').user - - target_model_class = common.validators.attachment_model_class_from_label( - model_type - ) - - if not issubclass(target_model_class, InvenTreeAttachmentMixin): - raise PermissionDenied(_('Invalid model type specified for attachment')) - - permission_error_msg = _( - 'User does not have permission to create or edit attachments for this model' - ) - - if not check_user_permission(user, target_model_class, 'change'): - raise PermissionDenied(permission_error_msg) - - # Check that the user has the required permissions to attach files to the target model - if not target_model_class.check_attachment_permission('change', user): - raise PermissionDenied(_(permission_error_msg)) - - return super().save(**kwargs) - - -class IconSerializer(serializers.Serializer): - """Serializer for an icon.""" - - name = serializers.CharField() - category = serializers.CharField() - tags = serializers.ListField(child=serializers.CharField()) - variants = serializers.DictField(child=serializers.CharField()) - - -class IconPackageSerializer(serializers.Serializer): - """Serializer for a list of icons.""" - - name = serializers.CharField() - prefix = serializers.CharField() - fonts = serializers.DictField(child=serializers.CharField()) - icons = serializers.DictField(child=IconSerializer()) diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index 08b8b6be38d0..3380def99641 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -1,52 +1,60 @@ """User-configurable settings for the common app.""" -from os import environ +import logging +from django.conf import settings +from django.core.cache import cache -def get_global_setting(key, backup_value=None, enviroment_key=None, **kwargs): - """Return the value of a global setting using the provided key.""" - from common.models import InvenTreeSetting - - if enviroment_key: - value = environ.get(enviroment_key) - if value: - return value +from moneyed import CURRENCIES - if backup_value is not None: - kwargs['backup_value'] = backup_value +logger = logging.getLogger('inventree') - return InvenTreeSetting.get_setting(key, **kwargs) - -def set_global_setting(key, value, change_user=None, create=True, **kwargs): - """Set the value of a global setting using the provided key.""" +def currency_code_default(): + """Returns the default currency code (or USD if not specified).""" from common.models import InvenTreeSetting - kwargs['change_user'] = change_user - kwargs['create'] = create + try: + cached_value = cache.get('currency_code_default', '') + except Exception: + cached_value = None + + if cached_value: + return cached_value - return InvenTreeSetting.set_setting(key, value, **kwargs) + try: + code = InvenTreeSetting.get_setting( + 'INVENTREE_DEFAULT_CURRENCY', backup_value='', create=True, cache=True + ) + except Exception: # pragma: no cover + # Database may not yet be ready, no need to throw an error here + code = '' + if code not in CURRENCIES: + code = 'USD' # pragma: no cover -def get_user_setting(key, user, backup_value=None, **kwargs): - """Return the value of a user-specific setting using the provided key.""" - from common.models import InvenTreeUserSetting + # Cache the value for a short amount of time + try: + cache.set('currency_code_default', code, 30) + except Exception: + pass - kwargs['user'] = user + return code - if backup_value is not None: - kwargs['backup_value'] = backup_value - return InvenTreeUserSetting.get_setting(key, **kwargs) +def all_currency_codes(): + """Returns a list of all currency codes.""" + return [(a, CURRENCIES[a].name) for a in CURRENCIES] -def set_user_setting(key, value, user, **kwargs): - """Set the value of a user-specific setting using the provided key.""" - from common.models import InvenTreeUserSetting +def currency_code_mappings(): + """Returns the current currency choices.""" + return [(a, CURRENCIES[a].name) for a in settings.CURRENCIES] - kwargs['user'] = user - return InvenTreeUserSetting.set_setting(key, value, **kwargs) +def currency_codes(): + """Returns the current currency codes.""" + return list(settings.CURRENCIES) def stock_expiry_enabled(): diff --git a/src/backend/InvenTree/common/tasks.py b/src/backend/InvenTree/common/tasks.py index ffb67311b9f5..92a666cfe7ad 100644 --- a/src/backend/InvenTree/common/tasks.py +++ b/src/backend/InvenTree/common/tasks.py @@ -55,7 +55,7 @@ def update_news_feed(): # Fetch and parse feed try: - feed = requests.get(settings.INVENTREE_NEWS_URL, timeout=30) + feed = requests.get(settings.INVENTREE_NEWS_URL) d = feedparser.parse(feed.content) except Exception: # pragma: no cover logger.warning('update_news_feed: Error parsing the newsfeed') diff --git a/src/backend/InvenTree/common/test_migrations.py b/src/backend/InvenTree/common/test_migrations.py deleted file mode 100644 index 71d9449ed692..000000000000 --- a/src/backend/InvenTree/common/test_migrations.py +++ /dev/null @@ -1,210 +0,0 @@ -"""Data migration unit tests for the 'common' app.""" - -import io - -from django.core.files.base import ContentFile - -from django_test_migrations.contrib.unittest_case import MigratorTestCase - -from InvenTree import unit_test - - -def get_legacy_models(): - """Return a set of legacy attachment models.""" - # Legacy attachment types to convert: - # app_label, table name, target model, model ref - return [ - ('build', 'BuildOrderAttachment', 'build', 'build'), - ('company', 'CompanyAttachment', 'company', 'company'), - ( - 'company', - 'ManufacturerPartAttachment', - 'manufacturerpart', - 'manufacturer_part', - ), - ('order', 'PurchaseOrderAttachment', 'purchaseorder', 'order'), - ('order', 'SalesOrderAttachment', 'salesorder', 'order'), - ('order', 'ReturnOrderAttachment', 'returnorder', 'order'), - ('part', 'PartAttachment', 'part', 'part'), - ('stock', 'StockItemAttachment', 'stockitem', 'stock_item'), - ] - - -def generate_attachment(): - """Generate a file attachment object for test upload.""" - file_object = io.StringIO('Some dummy data') - file_object.seek(0) - - return ContentFile(file_object.getvalue(), 'test.txt') - - -class TestForwardMigrations(MigratorTestCase): - """Test entire schema migration sequence for the common app.""" - - migrate_from = ('common', '0024_notesimage_model_id_notesimage_model_type') - migrate_to = ('common', unit_test.getNewestMigrationFile('common')) - - def prepare(self): - """Create initial data. - - Legacy attachment model types are: - - BuildOrderAttachment - - CompanyAttachment - - ManufacturerPartAttachment - - PurchaseOrderAttachment - - SalesOrderAttachment - - ReturnOrderAttachment - - PartAttachment - - StockItemAttachment - """ - # Dummy MPPT data - tree = {'tree_id': 0, 'level': 0, 'lft': 0, 'rght': 0} - - # BuildOrderAttachment - Part = self.old_state.apps.get_model('part', 'Part') - Build = self.old_state.apps.get_model('build', 'Build') - - part = Part.objects.create( - name='Test Part', - description='Test Part Description', - active=True, - assembly=True, - purchaseable=True, - **tree, - ) - - build = Build.objects.create(part=part, title='Test Build', quantity=10, **tree) - - PartAttachment = self.old_state.apps.get_model('part', 'PartAttachment') - PartAttachment.objects.create( - part=part, attachment=generate_attachment(), comment='Test file attachment' - ) - PartAttachment.objects.create( - part=part, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(PartAttachment.objects.count(), 2) - - BuildOrderAttachment = self.old_state.apps.get_model( - 'build', 'BuildOrderAttachment' - ) - BuildOrderAttachment.objects.create( - build=build, link='http://example.com', comment='Test comment' - ) - BuildOrderAttachment.objects.create( - build=build, attachment=generate_attachment(), comment='a test file' - ) - self.assertEqual(BuildOrderAttachment.objects.count(), 2) - - StockItem = self.old_state.apps.get_model('stock', 'StockItem') - StockItemAttachment = self.old_state.apps.get_model( - 'stock', 'StockItemAttachment' - ) - - item = StockItem.objects.create(part=part, quantity=10, **tree) - - StockItemAttachment.objects.create( - stock_item=item, - attachment=generate_attachment(), - comment='Test file attachment', - ) - StockItemAttachment.objects.create( - stock_item=item, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(StockItemAttachment.objects.count(), 2) - - Company = self.old_state.apps.get_model('company', 'Company') - CompanyAttachment = self.old_state.apps.get_model( - 'company', 'CompanyAttachment' - ) - - company = Company.objects.create( - name='Test Company', - description='Test Company Description', - is_customer=True, - is_manufacturer=True, - is_supplier=True, - ) - - CompanyAttachment.objects.create( - company=company, - attachment=generate_attachment(), - comment='Test file attachment', - ) - CompanyAttachment.objects.create( - company=company, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(CompanyAttachment.objects.count(), 2) - - PurchaseOrder = self.old_state.apps.get_model('order', 'PurchaseOrder') - PurchaseOrderAttachment = self.old_state.apps.get_model( - 'order', 'PurchaseOrderAttachment' - ) - - po = PurchaseOrder.objects.create( - reference='PO-12345', - supplier=company, - description='Test Purchase Order Description', - ) - - PurchaseOrderAttachment.objects.create( - order=po, attachment=generate_attachment(), comment='Test file attachment' - ) - PurchaseOrderAttachment.objects.create( - order=po, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(PurchaseOrderAttachment.objects.count(), 2) - - SalesOrder = self.old_state.apps.get_model('order', 'SalesOrder') - SalesOrderAttachment = self.old_state.apps.get_model( - 'order', 'SalesOrderAttachment' - ) - - so = SalesOrder.objects.create( - reference='SO-12345', - customer=company, - description='Test Sales Order Description', - ) - - SalesOrderAttachment.objects.create( - order=so, attachment=generate_attachment(), comment='Test file attachment' - ) - SalesOrderAttachment.objects.create( - order=so, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(SalesOrderAttachment.objects.count(), 2) - - ReturnOrder = self.old_state.apps.get_model('order', 'ReturnOrder') - ReturnOrderAttachment = self.old_state.apps.get_model( - 'order', 'ReturnOrderAttachment' - ) - - ro = ReturnOrder.objects.create( - reference='RO-12345', - customer=company, - description='Test Return Order Description', - ) - - ReturnOrderAttachment.objects.create( - order=ro, attachment=generate_attachment(), comment='Test file attachment' - ) - ReturnOrderAttachment.objects.create( - order=ro, link='http://example.com', comment='Test link attachment' - ) - self.assertEqual(ReturnOrderAttachment.objects.count(), 2) - - def test_items_exist(self): - """Test to ensure that the attachments are correctly migrated.""" - Attachment = self.new_state.apps.get_model('common', 'Attachment') - - self.assertEqual(Attachment.objects.count(), 14) - - for model in [ - 'build', - 'company', - 'purchaseorder', - 'returnorder', - 'salesorder', - 'part', - 'stockitem', - ]: - self.assertEqual(Attachment.objects.filter(model_type=model).count(), 2) diff --git a/src/backend/InvenTree/common/test_views.py b/src/backend/InvenTree/common/test_views.py new file mode 100644 index 000000000000..0e43770f02a4 --- /dev/null +++ b/src/backend/InvenTree/common/test_views.py @@ -0,0 +1 @@ +"""Unit tests for the views associated with the 'common' app.""" diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 2d6279734d3c..6a5b26766df4 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -11,8 +11,6 @@ from django.contrib.contenttypes.models import ContentType from django.core.cache import cache from django.core.exceptions import ValidationError -from django.core.files.base import ContentFile -from django.core.files.storage import default_storage from django.core.files.uploadedfile import SimpleUploadedFile from django.test import Client, TestCase from django.test.utils import override_settings @@ -20,20 +18,15 @@ import PIL -import common.validators -from common.settings import get_global_setting, set_global_setting from InvenTree.helpers import str2bool from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase, PluginMixin -from part.models import Part from plugin import registry from plugin.models import NotificationUserSetting from .api import WebhookView from .models import ( - Attachment, ColorTheme, CustomUnit, - InvenTreeCustomUserStateModel, InvenTreeSetting, InvenTreeUserSetting, NotesImage, @@ -47,154 +40,6 @@ CONTENT_TYPE_JSON = 'application/json' -class AttachmentTest(InvenTreeAPITestCase): - """Unit tests for the 'Attachment' model.""" - - fixtures = ['part', 'category', 'location'] - - def generate_file(self, fn: str): - """Generate an attachment file object.""" - file_object = io.StringIO('Some dummy data') - file_object.seek(0) - - return ContentFile(file_object.getvalue(), fn) - - def test_filename_validation(self): - """Test that the filename validation works as expected. - - The django file-upload mechanism should sanitize filenames correctly. - """ - part = Part.objects.first() - - filenames = { - 'test.txt': 'test.txt', - 'r####at.mp4': 'rat.mp4', - '../../../win32.dll': 'win32.dll', - 'ABC!@#$%^&&&&&&&)-XYZ-(**&&&\\/QqQ.sqlite': 'QqQ.sqlite', - '/var/log/inventree.log': 'inventree.log', - 'c:\\Users\\admin\\passwd.txt': 'cUsersadminpasswd.txt', - '8&&&8.txt': '88.txt', - } - - for fn, expected in filenames.items(): - attachment = Attachment.objects.create( - attachment=self.generate_file(fn), - comment=f'Testing filename: {fn}', - model_type='part', - model_id=part.pk, - ) - - expected_path = f'attachments/part/{part.pk}/{expected}' - self.assertEqual(attachment.attachment.name, expected_path) - self.assertEqual(attachment.file_size, 15) - - self.assertEqual(part.attachments.count(), len(filenames.keys())) - - # Delete any attachments after the test is completed - for attachment in part.attachments.all(): - path = attachment.attachment.name - attachment.delete() - - # Remove uploaded files to prevent them sticking around - if default_storage.exists(path): - default_storage.delete(path) - - self.assertEqual( - Attachment.objects.filter(model_type='part', model_id=part.pk).count(), 0 - ) - - def test_mixin(self): - """Test that the mixin class works as expected.""" - part = Part.objects.first() - - self.assertEqual(part.attachments.count(), 0) - - part.create_attachment( - attachment=self.generate_file('test.txt'), comment='Hello world' - ) - - self.assertEqual(part.attachments.count(), 1) - - attachment = part.attachments.first() - - self.assertEqual(attachment.comment, 'Hello world') - self.assertIn(f'attachments/part/{part.pk}/test', attachment.attachment.name) - - def test_upload_via_api(self): - """Test that we can upload attachments via the API.""" - part = Part.objects.first() - url = reverse('api-attachment-list') - - data = { - 'model_type': 'part', - 'model_id': part.pk, - 'link': 'https://www.google.com', - 'comment': 'Some appropriate comment', - } - - # Start without appropriate permissions - # User must have 'part.change' to upload an attachment against a Part instance - self.logout() - self.user.is_staff = False - self.user.is_superuser = False - self.user.save() - self.clearRoles() - - # Check without login (401) - response = self.post(url, data, expected_code=401) - - self.login() - - response = self.post(url, data, expected_code=403) - - self.assertIn( - 'User does not have permission to create or edit attachments for this model', - str(response.data['detail']), - ) - - # Add the required permission - self.assignRole('part.change') - - # Upload should now work! - response = self.post(url, data, expected_code=201) - - pk = response.data['pk'] - - # Edit the attachment via API - response = self.patch( - reverse('api-attachment-detail', kwargs={'pk': pk}), - {'comment': 'New comment'}, - expected_code=200, - ) - - self.assertEqual(response.data['comment'], 'New comment') - - attachment = Attachment.objects.get(pk=pk) - self.assertEqual(attachment.comment, 'New comment') - - # And check that we cannot edit the attachment without the correct permissions - self.clearRoles() - - self.patch( - reverse('api-attachment-detail', kwargs={'pk': pk}), - {'comment': 'New comment 2'}, - expected_code=403, - ) - - # Try to delete the attachment via API (should fail) - attachment = part.attachments.first() - url = reverse('api-attachment-detail', kwargs={'pk': attachment.pk}) - response = self.delete(url, expected_code=403) - self.assertIn( - 'User does not have permission to delete this attachment', - str(response.data['detail']), - ) - - # Assign 'delete' permission to 'part' model - self.assignRole('part.delete') - response = self.delete(url, expected_code=204) - - class SettingsTest(InvenTreeTestCase): """Tests for the 'settings' model.""" @@ -205,7 +50,7 @@ def test_settings_objects(self): # There should be two settings objects in the database settings = InvenTreeSetting.objects.all() - self.assertGreaterEqual(settings.count(), 2) + self.assertTrue(settings.count() >= 2) instance_name = InvenTreeSetting.objects.get(pk=1) self.assertEqual(instance_name.key, 'INVENTREE_INSTANCE') @@ -362,7 +207,7 @@ def run_settings_check(self, key, setting): - Ensure that every setting key is valid - Ensure that a validator is supplied """ - self.assertIs(type(setting), dict) + self.assertTrue(type(setting) is dict) name = setting.get('name', None) @@ -428,17 +273,13 @@ def test_setting_data(self): print(f"run_settings_check failed for user setting '{key}'") raise exc - @override_settings(SITE_URL=None, PLUGIN_TESTING=True, PLUGIN_TESTING_SETUP=True) + @override_settings(SITE_URL=None) def test_defaults(self): """Populate the settings with default values.""" for key in InvenTreeSetting.SETTINGS.keys(): value = InvenTreeSetting.get_setting_default(key) - try: - InvenTreeSetting.set_setting(key, value, change_user=self.user) - except Exception as exc: - print(f"test_defaults: Failed to set default value for setting '{key}'") - raise exc + InvenTreeSetting.set_setting(key, value, self.user) self.assertEqual(value, InvenTreeSetting.get_setting(key)) @@ -446,6 +287,11 @@ def test_defaults(self): setting = InvenTreeSetting.get_setting_object(key) if setting.is_bool(): + if setting.default_value in ['', None]: + raise ValueError( + f'Default value for boolean setting {key} not provided' + ) # pragma: no cover + if setting.default_value not in [True, False]: raise ValueError( f'Non-boolean default value specified for {key}' @@ -526,30 +372,6 @@ def test_global_settings_api_list(self): # Number of results should match the number of settings self.assertEqual(len(response.data), n_public_settings) - def test_currency_settings(self): - """Run tests for currency specific settings.""" - url = reverse('api-global-setting-detail', kwargs={'key': 'CURRENCY_CODES'}) - - response = self.patch(url, data={'value': 'USD,XYZ'}, expected_code=400) - - self.assertIn("Invalid currency code: 'XYZ'", str(response.data)) - - response = self.patch( - url, data={'value': 'AUD,USD, AUD,AUD,'}, expected_code=400 - ) - - self.assertIn("Duplicate currency code: 'AUD'", str(response.data)) - - response = self.patch(url, data={'value': ',,,,,'}, expected_code=400) - - self.assertIn('No valid currency codes provided', str(response.data)) - - response = self.patch(url, data={'value': 'AUD,USD,GBP'}, expected_code=200) - - codes = InvenTreeSetting.get_setting('CURRENCY_CODES') - - self.assertEqual(codes, 'AUD,USD,GBP') - def test_company_name(self): """Test a settings object lifecycle e2e.""" setting = InvenTreeSetting.get_setting_object('INVENTREE_COMPANY_NAME') @@ -904,7 +726,7 @@ def test_scheduled_tasks(self): response = self.get(url, expected_code=200) for task in response.data: - self.assertEqual(task['name'], 'time.sleep') + self.assertTrue(task['name'] == 'time.sleep') class WebhookMessageTests(TestCase): @@ -1125,16 +947,21 @@ class CommonTest(InvenTreeAPITestCase): def test_restart_flag(self): """Test that the restart flag is reset on start.""" + import common.models from plugin import registry # set flag true - set_global_setting('SERVER_RESTART_REQUIRED', True, None) + common.models.InvenTreeSetting.set_setting( + 'SERVER_RESTART_REQUIRED', True, None + ) # reload the app registry.reload_plugins() # now it should be false again - self.assertFalse(get_global_setting('SERVER_RESTART_REQUIRED')) + self.assertFalse( + common.models.InvenTreeSetting.get_setting('SERVER_RESTART_REQUIRED') + ) def test_config_api(self): """Test config URLs.""" @@ -1221,10 +1048,20 @@ class ColorThemeTest(TestCase): def test_choices(self): """Test that default choices are returned.""" result = ColorTheme.get_color_themes_choices() + + # skip due to directories not being set up + if not result: + return # pragma: no cover self.assertIn(('default', 'Default'), result) def test_valid_choice(self): """Check that is_valid_choice works correctly.""" + result = ColorTheme.get_color_themes_choices() + + # skip due to directories not being set up + if not result: + return # pragma: no cover + # check wrong reference self.assertFalse(ColorTheme.is_valid_choice('abcdd')) @@ -1256,7 +1093,7 @@ def test_refresh_endpoint(self): # Updating via the external exchange may not work every time for _idx in range(5): - self.post(reverse('api-currency-refresh'), expected_code=200) + self.post(reverse('api-currency-refresh')) # There should be some new exchange rate objects now if Rate.objects.all().exists(): @@ -1388,7 +1225,7 @@ def test_duplicate_code(self): ) self.assertIn( - 'Project Code with this Project Code already exists', + 'project code with this Project Code already exists', str(response.data['code']), ) @@ -1546,134 +1383,3 @@ def test_detail(self): reverse('api-contenttype-detail-modelname', kwargs={'model': None}), expected_code=404, ) - - -class IconAPITest(InvenTreeAPITestCase): - """Unit tests for the Icons API.""" - - def test_list(self): - """Test API list functionality.""" - response = self.get(reverse('api-icon-list'), expected_code=200) - self.assertEqual(len(response.data), 1) - - self.assertEqual(response.data[0]['prefix'], 'ti') - self.assertEqual(response.data[0]['name'], 'Tabler Icons') - for font_format in ['woff2', 'woff', 'truetype']: - self.assertIn(font_format, response.data[0]['fonts']) - - self.assertGreater(len(response.data[0]['icons']), 1000) - - -class ValidatorsTest(TestCase): - """Unit tests for the custom validators.""" - - def test_validate_icon(self): - """Test the validate_icon function.""" - common.validators.validate_icon('') - common.validators.validate_icon(None) - - with self.assertRaises(ValidationError): - common.validators.validate_icon('invalid') - - with self.assertRaises(ValidationError): - common.validators.validate_icon('my:package:non-existing') - - with self.assertRaises(ValidationError): - common.validators.validate_icon( - 'ti:my-non-existing-icon:non-existing-variant' - ) - - with self.assertRaises(ValidationError): - common.validators.validate_icon('ti:package:non-existing-variant') - - common.validators.validate_icon('ti:package:outline') - - -class CustomStatusTest(TestCase): - """Unit tests for the custom status model.""" - - def setUp(self): - """Setup for all tests.""" - self.data = { - 'key': 11, - 'name': 'OK - advanced', - 'label': 'OK - adv.', - 'color': 'secondary', - 'logical_key': 10, - 'model': ContentType.objects.get(model='stockitem'), - 'reference_status': 'StockStatus', - } - - def test_validation_model(self): - """Test that model is present.""" - data = self.data - data.pop('model') - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_key(self): - """Tests Model must have a key.""" - data = self.data - data.pop('key') - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_logicalkey(self): - """Tests Logical key must be present.""" - data = self.data - data.pop('logical_key') - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_reference(self): - """Tests Reference status must be present.""" - data = self.data - data.pop('reference_status') - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_logical_unique(self): - """Tests Logical key must be unique.""" - data = self.data - data['logical_key'] = data['key'] - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_reference_exsists(self): - """Tests Reference status set not found.""" - data = self.data - data['reference_status'] = 'abcd' - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_key_unique(self): - """Tests Key must be different from the logical keys of the reference.""" - data = self.data - data['key'] = 50 - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation_logical_key_exsists(self): - """Tests Logical key must be in the logical keys of the reference status.""" - data = self.data - data['logical_key'] = 12 - with self.assertRaises(ValidationError): - InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 0) - - def test_validation(self): - """Tests Valid run.""" - data = self.data - instance = InvenTreeCustomUserStateModel.objects.create(**data) - self.assertEqual(data['key'], instance.key) - self.assertEqual(InvenTreeCustomUserStateModel.objects.count(), 1) - self.assertEqual( - instance.__str__(), 'Stock Item (StockStatus): OK - advanced | 11 (10)' - ) diff --git a/src/backend/InvenTree/common/validators.py b/src/backend/InvenTree/common/validators.py deleted file mode 100644 index efb82e692ee3..000000000000 --- a/src/backend/InvenTree/common/validators.py +++ /dev/null @@ -1,115 +0,0 @@ -"""Validation helpers for common models.""" - -import re -from typing import Union - -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -import common.icons -from common.settings import get_global_setting - - -def attachment_model_types(): - """Return a list of valid attachment model choices.""" - import InvenTree.models - - return list( - InvenTree.helpers_model.getModelsWithMixin( - InvenTree.models.InvenTreeAttachmentMixin - ) - ) - - -def attachment_model_options(): - """Return a list of options for models which support attachments.""" - return [ - (model.__name__.lower(), model._meta.verbose_name) - for model in attachment_model_types() - ] - - -def attachment_model_class_from_label(label: str): - """Return the model class for the given label.""" - if not label: - raise ValidationError(_('No attachment model type provided')) - - for model in attachment_model_types(): - if model.__name__.lower() == label.lower(): - return model - - raise ValidationError(_('Invalid attachment model type') + f": '{label}'") - - -def validate_attachment_model_type(value): - """Ensure that the provided attachment model is valid.""" - model_names = [el[0] for el in attachment_model_options()] - if value not in model_names: - raise ValidationError('Model type does not support attachments') - - -def validate_notes_model_type(value): - """Ensure that the provided model type is valid. - - The provided value must map to a model which implements the 'InvenTreeNotesMixin'. - """ - import InvenTree.helpers_model - import InvenTree.models - - if not value: - # Empty values are allowed - return - - model_types = list( - InvenTree.helpers_model.getModelsWithMixin(InvenTree.models.InvenTreeNotesMixin) - ) - - model_names = [model.__name__.lower() for model in model_types] - - if value.lower() not in model_names: - raise ValidationError(f"Invalid model type '{value}'") - - -def validate_decimal_places_min(value): - """Validator for PRICING_DECIMAL_PLACES_MIN setting.""" - try: - value = int(value) - places_max = int(get_global_setting('PRICING_DECIMAL_PLACES', create=False)) - except Exception: - return - - if value > places_max: - raise ValidationError(_('Minimum places cannot be greater than maximum places')) - - -def validate_decimal_places_max(value): - """Validator for PRICING_DECIMAL_PLACES_MAX setting.""" - try: - value = int(value) - places_min = int(get_global_setting('PRICING_DECIMAL_PLACES_MIN', create=False)) - except Exception: - return - - if value < places_min: - raise ValidationError(_('Maximum places cannot be less than minimum places')) - - -def validate_email_domains(setting): - """Validate the email domains setting.""" - if not setting.value: - return - - domains = setting.value.split(',') - for domain in domains: - if not domain: - raise ValidationError(_('An empty domain is not allowed.')) - if not re.match(r'^@[a-zA-Z0-9\.\-_]+$', domain): - raise ValidationError(_(f'Invalid domain name: {domain}')) - - -def validate_icon(name: Union[str, None]): - """Validate the provided icon name, and ignore if empty.""" - if name == '' or name is None: - return - - common.icons.validate_icon(name) diff --git a/src/backend/InvenTree/company/admin.py b/src/backend/InvenTree/company/admin.py index ae33a409baae..69136ad80c6d 100644 --- a/src/backend/InvenTree/company/admin.py +++ b/src/backend/InvenTree/company/admin.py @@ -6,8 +6,6 @@ from import_export.admin import ImportExportModelAdmin from import_export.fields import Field -import company.serializers -import importer.admin from InvenTree.admin import InvenTreeResource from part.models import Part @@ -16,6 +14,7 @@ Company, Contact, ManufacturerPart, + ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, @@ -35,10 +34,9 @@ class Meta: @admin.register(Company) -class CompanyAdmin(importer.admin.DataExportAdmin, ImportExportModelAdmin): +class CompanyAdmin(ImportExportModelAdmin): """Admin class for the Company model.""" - serializer_class = company.serializers.CompanySerializer resource_class = CompanyResource list_display = ('name', 'website', 'contact') @@ -122,6 +120,15 @@ class ManufacturerPartAdmin(ImportExportModelAdmin): autocomplete_fields = ('part', 'manufacturer') +@admin.register(ManufacturerPartAttachment) +class ManufacturerPartAttachmentAdmin(ImportExportModelAdmin): + """Admin class for ManufacturerPartAttachment model.""" + + list_display = ('manufacturer_part', 'attachment', 'comment') + + autocomplete_fields = ('manufacturer_part',) + + class ManufacturerPartParameterResource(InvenTreeResource): """Class for managing ManufacturerPartParameter data import/export.""" @@ -206,8 +213,6 @@ class AddressAdmin(ImportExportModelAdmin): search_fields = ['company', 'country', 'postal_code'] - autocomplete_fields = ['company'] - class ContactResource(InvenTreeResource): """Class for managing Contact data import/export.""" @@ -232,5 +237,3 @@ class ContactAdmin(ImportExportModelAdmin): list_display = ('company', 'name', 'role', 'email', 'phone') search_fields = ['company', 'name', 'email'] - - autocomplete_fields = ['company'] diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index b0b9fcfe986a..aea8d5dc5ec3 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -7,25 +7,32 @@ from django_filters import rest_framework as rest_filters import part.models -from importer.mixins import DataExportViewMixin -from InvenTree.api import ListCreateDestroyAPIView, MetadataView -from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS +from InvenTree.api import AttachmentMixin, ListCreateDestroyAPIView, MetadataView +from InvenTree.filters import ( + ORDER_FILTER, + SEARCH_ORDER_FILTER, + SEARCH_ORDER_FILTER_ALIAS, +) from InvenTree.helpers import str2bool from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI from .models import ( Address, Company, + CompanyAttachment, Contact, ManufacturerPart, + ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, ) from .serializers import ( AddressSerializer, + CompanyAttachmentSerializer, CompanySerializer, ContactSerializer, + ManufacturerPartAttachmentSerializer, ManufacturerPartParameterSerializer, ManufacturerPartSerializer, SupplierPartSerializer, @@ -33,7 +40,7 @@ ) -class CompanyList(DataExportViewMixin, ListCreateAPI): +class CompanyList(ListCreateAPI): """API endpoint for accessing a list of Company objects. Provides two methods: @@ -81,7 +88,23 @@ def get_queryset(self): return queryset -class ContactList(DataExportViewMixin, ListCreateDestroyAPIView): +class CompanyAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a CompanyAttachment.""" + + queryset = CompanyAttachment.objects.all() + serializer_class = CompanyAttachmentSerializer + + filterset_fields = ['company'] + + +class CompanyAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for CompanyAttachment model.""" + + queryset = CompanyAttachment.objects.all() + serializer_class = CompanyAttachmentSerializer + + +class ContactList(ListCreateDestroyAPIView): """API endpoint for list view of Company model.""" queryset = Contact.objects.all() @@ -105,7 +128,7 @@ class ContactDetail(RetrieveUpdateDestroyAPI): serializer_class = ContactSerializer -class AddressList(DataExportViewMixin, ListCreateDestroyAPIView): +class AddressList(ListCreateDestroyAPIView): """API endpoint for list view of Address model.""" queryset = Address.objects.all() @@ -146,7 +169,7 @@ class Meta: ) -class ManufacturerPartList(DataExportViewMixin, ListCreateDestroyAPIView): +class ManufacturerPartList(ListCreateDestroyAPIView): """API endpoint for list view of ManufacturerPart object. - GET: Return list of ManufacturerPart objects @@ -204,6 +227,22 @@ class ManufacturerPartDetail(RetrieveUpdateDestroyAPI): serializer_class = ManufacturerPartSerializer +class ManufacturerPartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a ManufacturerPartAttachment (file upload).""" + + queryset = ManufacturerPartAttachment.objects.all() + serializer_class = ManufacturerPartAttachmentSerializer + + filterset_fields = ['manufacturer_part'] + + +class ManufacturerPartAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpooint for ManufacturerPartAttachment model.""" + + queryset = ManufacturerPartAttachment.objects.all() + serializer_class = ManufacturerPartAttachmentSerializer + + class ManufacturerPartParameterFilter(rest_filters.FilterSet): """Custom filterset for the ManufacturerPartParameterList API endpoint.""" @@ -294,7 +333,7 @@ class Meta: ) -class SupplierPartList(DataExportViewMixin, ListCreateDestroyAPIView): +class SupplierPartList(ListCreateDestroyAPIView): """API endpoint for list view of SupplierPart object. - GET: Return list of SupplierPart objects @@ -470,6 +509,22 @@ class SupplierPriceBreakDetail(RetrieveUpdateDestroyAPI): manufacturer_part_api_urls = [ + # Base URL for ManufacturerPartAttachment API endpoints + path( + 'attachment/', + include([ + path( + '/', + ManufacturerPartAttachmentDetail.as_view(), + name='api-manufacturer-part-attachment-detail', + ), + path( + '', + ManufacturerPartAttachmentList.as_view(), + name='api-manufacturer-part-attachment-list', + ), + ]), + ), path( 'parameter/', include([ @@ -556,6 +611,19 @@ class SupplierPriceBreakDetail(RetrieveUpdateDestroyAPI): path('', CompanyDetail.as_view(), name='api-company-detail'), ]), ), + path( + 'attachment/', + include([ + path( + '/', + CompanyAttachmentDetail.as_view(), + name='api-company-attachment-detail', + ), + path( + '', CompanyAttachmentList.as_view(), name='api-company-attachment-list' + ), + ]), + ), path( 'contact/', include([ diff --git a/src/backend/InvenTree/company/migrations/0001_initial.py b/src/backend/InvenTree/company/migrations/0001_initial.py index 6c6f31f9386e..c2de9ed45374 100644 --- a/src/backend/InvenTree/company/migrations/0001_initial.py +++ b/src/backend/InvenTree/company/migrations/0001_initial.py @@ -31,9 +31,6 @@ class Migration(migrations.Migration): ('is_customer', models.BooleanField(default=False, help_text='Do you sell items to this company?')), ('is_supplier', models.BooleanField(default=True, help_text='Do you purchase items from this company?')), ], - options={ - 'verbose_name': 'Company', - } ), migrations.CreateModel( name='Contact', @@ -44,9 +41,6 @@ class Migration(migrations.Migration): ('email', models.EmailField(blank=True, max_length=254)), ('role', models.CharField(blank=True, max_length=100)), ], - options={ - 'verbose_name': 'Contact', - } ), migrations.CreateModel( name='SupplierPart', @@ -66,7 +60,6 @@ class Migration(migrations.Migration): ], options={ 'db_table': 'part_supplierpart', - 'verbose_name': 'Supplier Part', }, ), migrations.CreateModel( @@ -78,7 +71,6 @@ class Migration(migrations.Migration): ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pricebreaks', to='company.SupplierPart')), ], options={ - 'verbose_name': 'Supplier Price Break', 'db_table': 'part_supplierpricebreak', }, ), diff --git a/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py b/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py index d184108c9f2f..22097e8e2b03 100644 --- a/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py +++ b/src/backend/InvenTree/company/migrations/0023_auto_20200808_0715.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='company', - options={'ordering': ['name'], 'verbose_name': 'Company'}, + options={'ordering': ['name']}, ), ] diff --git a/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py b/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py index f0db3f5f3809..117710daa777 100644 --- a/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py +++ b/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py @@ -2,7 +2,6 @@ from django.db import migrations, connection import djmoney.models.fields -import common.currency import common.settings @@ -17,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='supplierpricebreak', name='price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), ), migrations.AddField( model_name='supplierpricebreak', name='price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py b/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py index 8b5f6fb89ff4..d9c83d75ed1a 100644 --- a/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py +++ b/src/backend/InvenTree/company/migrations/0032_auto_20210403_1837.py @@ -23,17 +23,17 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='company', name='is_customer', - field=models.BooleanField(default=False, help_text='Do you sell items to this company?', verbose_name='Is customer'), + field=models.BooleanField(default=False, help_text='Do you sell items to this company?', verbose_name='is customer'), ), migrations.AlterField( model_name='company', name='is_manufacturer', - field=models.BooleanField(default=False, help_text='Does this company manufacture parts?', verbose_name='Is manufacturer'), + field=models.BooleanField(default=False, help_text='Does this company manufacture parts?', verbose_name='is manufacturer'), ), migrations.AlterField( model_name='company', name='is_supplier', - field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='Is supplier'), + field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='is supplier'), ), migrations.AlterField( model_name='company', diff --git a/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py b/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py index f50919d59fce..2e8a8bf82f4f 100644 --- a/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py +++ b/src/backend/InvenTree/company/migrations/0034_manufacturerpart.py @@ -22,7 +22,6 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('part', 'manufacturer', 'MPN')}, - 'verbose_name': 'Manufacturer Part', }, ), ] diff --git a/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py b/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py index dd833ccfa3fe..dccfa715e891 100644 --- a/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py +++ b/src/backend/InvenTree/company/migrations/0038_manufacturerpartparameter.py @@ -21,7 +21,6 @@ class Migration(migrations.Migration): ('manufacturer_part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='company.manufacturerpart', verbose_name='Manufacturer Part')), ], options={ - 'verbose_name': 'Manufacturer Part Parameter', 'unique_together': {('manufacturer_part', 'name')}, }, ), diff --git a/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py b/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py index 10c22b3367ca..f26f47019109 100644 --- a/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py +++ b/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py @@ -1,7 +1,6 @@ # Generated by Django 3.2.4 on 2021-07-02 13:21 import InvenTree.validators -import common.currency import common.settings from django.db import migrations, models @@ -16,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='company', name='currency', - field=models.CharField(blank=True, default=common.currency.currency_code_default, help_text='Default currency used for this company', max_length=3, validators=[InvenTree.validators.validate_currency_code], verbose_name='Currency'), + field=models.CharField(blank=True, default=common.settings.currency_code_default, help_text='Default currency used for this company', max_length=3, validators=[InvenTree.validators.validate_currency_code], verbose_name='Currency'), ), ] diff --git a/src/backend/InvenTree/company/migrations/0041_alter_company_options.py b/src/backend/InvenTree/company/migrations/0041_alter_company_options.py index e6b1bed978b2..40849eed1d0a 100644 --- a/src/backend/InvenTree/company/migrations/0041_alter_company_options.py +++ b/src/backend/InvenTree/company/migrations/0041_alter_company_options.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='company', - options={'ordering': ['name'], 'verbose_name': 'Company', 'verbose_name_plural': 'Companies'}, + options={'ordering': ['name'], 'verbose_name_plural': 'Companies'}, ), ] diff --git a/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py b/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py index a0152385eb88..fe526992b0a6 100644 --- a/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py +++ b/src/backend/InvenTree/company/migrations/0043_manufacturerpartattachment.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): name='ManufacturerPartAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/company/migrations/0054_companyattachment.py b/src/backend/InvenTree/company/migrations/0054_companyattachment.py index 4996976ac12e..44a415fce3ca 100644 --- a/src/backend/InvenTree/company/migrations/0054_companyattachment.py +++ b/src/backend/InvenTree/company/migrations/0054_companyattachment.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): name='CompanyAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py b/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py index f5160f3255a5..19ce7983013a 100644 --- a/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py +++ b/src/backend/InvenTree/company/migrations/0066_auto_20230616_2059.py @@ -12,10 +12,7 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='address', - options={ - 'verbose_name': 'Address', - 'verbose_name_plural': 'Addresses' - }, + options={'verbose_name_plural': 'Addresses'}, ), migrations.AlterField( model_name='address', diff --git a/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py b/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py deleted file mode 100644 index d0bec93f7d58..000000000000 --- a/src/backend/InvenTree/company/migrations/0070_remove_manufacturerpartattachment_manufacturer_part_and_more.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-09 09:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('build', '0050_auto_20240508_0138'), - ('common', '0026_auto_20240608_1238'), - ('company', '0069_company_active'), - ('order', '0099_alter_salesorder_status'), - ('part', '0123_parttesttemplate_choices'), - ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') - ] - - operations = [ - migrations.DeleteModel( - name='CompanyAttachment', - ), - migrations.DeleteModel( - name='ManufacturerPartAttachment', - ), - ] diff --git a/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py b/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py deleted file mode 100644 index b7d6c8caf79f..000000000000 --- a/src/backend/InvenTree/company/migrations/0071_manufacturerpart_notes_supplierpart_notes.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.11 on 2024-07-16 12:58 - -import InvenTree.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('company', '0070_remove_manufacturerpartattachment_manufacturer_part_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='manufacturerpart', - name='notes', - field=InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Markdown notes (optional)', max_length=50000, null=True, verbose_name='Notes'), - ), - migrations.AddField( - model_name='supplierpart', - name='notes', - field=InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Markdown notes (optional)', max_length=50000, null=True, verbose_name='Notes'), - ), - ] diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index 9e1c878c57b2..b891b5b06543 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -1,6 +1,7 @@ """Company database model definitions.""" import os +from datetime import datetime from decimal import Decimal from django.apps import apps @@ -19,7 +20,6 @@ from stdimage.models import StdImageField from taggit.managers import TaggableManager -import common.currency import common.models import common.settings import InvenTree.conversion @@ -29,9 +29,9 @@ import InvenTree.ready import InvenTree.tasks import InvenTree.validators -from common.currency import currency_code_default +from common.settings import currency_code_default from InvenTree.fields import InvenTreeURLField, RoundingDecimalField -from order.status_codes import PurchaseOrderStatusGroups +from InvenTree.status_codes import PurchaseOrderStatusGroups def rename_company_image(instance, filename): @@ -60,9 +60,7 @@ def rename_company_image(instance, filename): class Company( - InvenTree.models.InvenTreeAttachmentMixin, - InvenTree.models.InvenTreeNotesMixin, - InvenTree.models.InvenTreeMetadataModel, + InvenTree.models.InvenTreeNotesMixin, InvenTree.models.InvenTreeMetadataModel ): """A Company object represents an external company. @@ -97,8 +95,7 @@ class Meta: constraints = [ UniqueConstraint(fields=['name', 'email'], name='unique_name_email_pair') ] - verbose_name = _('Company') - verbose_name_plural = _('Companies') + verbose_name_plural = 'Companies' @staticmethod def get_api_url(): @@ -165,19 +162,19 @@ def get_api_url(): is_customer = models.BooleanField( default=False, - verbose_name=_('Is customer'), + verbose_name=_('is customer'), help_text=_('Do you sell items to this company?'), ) is_supplier = models.BooleanField( default=True, - verbose_name=_('Is supplier'), + verbose_name=_('is supplier'), help_text=_('Do you purchase items from this company?'), ) is_manufacturer = models.BooleanField( default=False, - verbose_name=_('Is manufacturer'), + verbose_name=_('is manufacturer'), help_text=_('Does this company manufacture parts?'), ) @@ -215,7 +212,7 @@ def currency_code(self): code = self.currency if code not in CURRENCIES: - code = common.currency.currency_code_default() + code = common.settings.currency_code_default() return code @@ -258,6 +255,26 @@ def stock_items(self): ).distinct() +class CompanyAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file or URL attachments against a Company object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with this model.""" + return reverse('api-company-attachment-list') + + def getSubdir(self): + """Return the subdirectory where these attachments are uploaded.""" + return os.path.join('company_files', str(self.company.pk)) + + company = models.ForeignKey( + Company, + on_delete=models.CASCADE, + verbose_name=_('Company'), + related_name='attachments', + ) + + class Contact(InvenTree.models.InvenTreeMetadataModel): """A Contact represents a person who works at a particular company. A Company may have zero or more associated Contact objects. @@ -269,11 +286,6 @@ class Contact(InvenTree.models.InvenTreeMetadataModel): role: position in company """ - class Meta: - """Metaclass defines extra model options.""" - - verbose_name = _('Contact') - @staticmethod def get_api_url(): """Return the API URL associated with the Contcat model.""" @@ -311,8 +323,7 @@ class Address(InvenTree.models.InvenTreeModel): class Meta: """Metaclass defines extra model options.""" - verbose_name = _('Address') - verbose_name_plural = _('Addresses') + verbose_name_plural = 'Addresses' def __init__(self, *args, **kwargs): """Custom init function.""" @@ -449,10 +460,7 @@ def get_api_url(): class ManufacturerPart( - InvenTree.models.InvenTreeAttachmentMixin, - InvenTree.models.InvenTreeBarcodeMixin, - InvenTree.models.InvenTreeNotesMixin, - InvenTree.models.InvenTreeMetadataModel, + InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeMetadataModel ): """Represents a unique part as provided by a Manufacturer Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) Each ManufacturerPart is also linked to a Part object. A Part may be available from multiple manufacturers. @@ -467,7 +475,6 @@ class ManufacturerPart( class Meta: """Metaclass defines extra model options.""" - verbose_name = _('Manufacturer Part') unique_together = ('part', 'manufacturer', 'MPN') @staticmethod @@ -475,11 +482,6 @@ def get_api_url(): """Return the API URL associated with the ManufacturerPart instance.""" return reverse('api-manufacturer-part-list') - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'MP' - part = models.ForeignKey( 'part.Part', on_delete=models.CASCADE, @@ -511,7 +513,6 @@ def barcode_model_type_code(cls): null=True, verbose_name=_('Link'), help_text=_('URL for external manufacturer part link'), - max_length=2000, ) description = models.CharField( @@ -561,6 +562,26 @@ def __str__(self): return s +class ManufacturerPartAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a ManufacturerPart object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ManufacturerPartAttachment model.""" + return reverse('api-manufacturer-part-attachment-list') + + def getSubdir(self): + """Return the subdirectory where attachment files for the ManufacturerPart model are located.""" + return os.path.join('manufacturer_part_files', str(self.manufacturer_part.id)) + + manufacturer_part = models.ForeignKey( + ManufacturerPart, + on_delete=models.CASCADE, + verbose_name=_('Manufacturer Part'), + related_name='attachments', + ) + + class ManufacturerPartParameter(InvenTree.models.InvenTreeModel): """A ManufacturerPartParameter represents a key:value parameter for a MnaufacturerPart. @@ -572,7 +593,6 @@ class ManufacturerPartParameter(InvenTree.models.InvenTreeModel): class Meta: """Metaclass defines extra model options.""" - verbose_name = _('Manufacturer Part Parameter') unique_together = ('manufacturer_part', 'name') @staticmethod @@ -630,7 +650,6 @@ def get_queryset(self): class SupplierPart( InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeBarcodeMixin, - InvenTree.models.InvenTreeNotesMixin, common.models.MetaMixin, InvenTree.models.InvenTreeModel, ): @@ -659,8 +678,6 @@ class Meta: unique_together = ('part', 'supplier', 'SKU') - verbose_name = _('Supplier Part') - # This model was moved from the 'Part' app db_table = 'part_supplierpart' @@ -683,11 +700,6 @@ def api_instance_filters(self): """Return custom API filters for this particular instance.""" return {'manufacturer_part': {'part': self.part.pk}} - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'SP' - def clean(self): """Custom clean action for the SupplierPart model. @@ -817,7 +829,6 @@ def save(self, *args, **kwargs): null=True, verbose_name=_('Link'), help_text=_('URL for external supplier part link'), - max_length=2000, ) description = models.CharField( @@ -954,7 +965,7 @@ def add_price_break(self, quantity, price) -> None: SupplierPriceBreak.objects.create(part=self, quantity=quantity, price=price) - get_price = common.currency.get_price + get_price = common.models.get_price def open_orders(self): """Return a database query for PurchaseOrder line items for this SupplierPart, limited to purchase orders that are open / outstanding.""" @@ -1024,7 +1035,6 @@ class SupplierPriceBreak(common.models.PriceBreak): class Meta: """Metaclass defines extra model options.""" - verbose_name = _('Supplier Price Break') unique_together = ('part', 'quantity') # This model was moved from the 'Part' app diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index ba6d845c0a71..e329ea44e63d 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -10,25 +10,25 @@ from taggit.serializers import TagListSerializerField import part.filters -import part.serializers as part_serializers -from importer.mixins import DataImportExportSerializerMixin -from importer.registry import register_importer from InvenTree.serializers import ( + InvenTreeAttachmentSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, InvenTreeModelSerializer, InvenTreeMoneySerializer, InvenTreeTagModelSerializer, - NotesFieldMixin, RemoteImageMixin, ) +from part.serializers import PartBriefSerializer from .models import ( Address, Company, + CompanyAttachment, Contact, ManufacturerPart, + ManufacturerPartAttachment, ManufacturerPartParameter, SupplierPart, SupplierPriceBreak, @@ -58,8 +58,7 @@ class Meta: thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) -@register_importer() -class AddressSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): +class AddressSerializer(InvenTreeModelSerializer): """Serializer for the Address Model.""" class Meta: @@ -103,19 +102,9 @@ class Meta: ] -@register_importer() -class CompanySerializer( - DataImportExportSerializerMixin, - NotesFieldMixin, - RemoteImageMixin, - InvenTreeModelSerializer, -): +class CompanySerializer(RemoteImageMixin, InvenTreeModelSerializer): """Serializer for Company object (full detail).""" - export_exclude_fields = ['url', 'primary_address'] - - import_exclude_fields = ['image'] - class Meta: """Metaclass options.""" @@ -166,10 +155,6 @@ def annotate_queryset(queryset): image = InvenTreeImageSerializerField(required=False, allow_null=True) - email = serializers.EmailField( - required=False, default='', allow_blank=True, allow_null=True - ) - parts_supplied = serializers.IntegerField(read_only=True) parts_manufactured = serializers.IntegerField(read_only=True) address_count = serializers.IntegerField(read_only=True) @@ -200,25 +185,28 @@ def save(self): return self.instance -@register_importer() -class ContactSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): +class CompanyAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializer for the CompanyAttachment class.""" + + class Meta: + """Metaclass defines serializer options.""" + + model = CompanyAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields(['company']) + + +class ContactSerializer(InvenTreeModelSerializer): """Serializer class for the Contact model.""" class Meta: """Metaclass options.""" model = Contact - fields = ['pk', 'company', 'company_name', 'name', 'phone', 'email', 'role'] - - company_name = serializers.CharField( - label=_('Company Name'), source='company.name', read_only=True - ) + fields = ['pk', 'company', 'name', 'phone', 'email', 'role'] -@register_importer() -class ManufacturerPartSerializer( - DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin -): +class ManufacturerPartSerializer(InvenTreeTagModelSerializer): """Serializer for ManufacturerPart object.""" class Meta: @@ -236,7 +224,6 @@ class Meta: 'MPN', 'link', 'barcode_hash', - 'notes', 'tags', ] @@ -251,17 +238,15 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if manufacturer_detail is not True: - self.fields.pop('manufacturer_detail', None) + self.fields.pop('manufacturer_detail') if prettify is not True: - self.fields.pop('pretty_name', None) + self.fields.pop('pretty_name') - part_detail = part_serializers.PartBriefSerializer( - source='part', many=False, read_only=True - ) + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) manufacturer_detail = CompanyBriefSerializer( source='manufacturer', many=False, read_only=True @@ -274,10 +259,18 @@ def __init__(self, *args, **kwargs): ) -@register_importer() -class ManufacturerPartParameterSerializer( - DataImportExportSerializerMixin, InvenTreeModelSerializer -): +class ManufacturerPartAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializer for the ManufacturerPartAttachment class.""" + + class Meta: + """Metaclass options.""" + + model = ManufacturerPartAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields(['manufacturer_part']) + + +class ManufacturerPartParameterSerializer(InvenTreeModelSerializer): """Serializer for the ManufacturerPartParameter model.""" class Meta: @@ -301,17 +294,14 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not man_detail: - self.fields.pop('manufacturer_part_detail', None) + self.fields.pop('manufacturer_part_detail') manufacturer_part_detail = ManufacturerPartSerializer( source='manufacturer_part', many=False, read_only=True ) -@register_importer() -class SupplierPartSerializer( - DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin -): +class SupplierPartSerializer(InvenTreeTagModelSerializer): """Serializer for SupplierPart object.""" class Meta: @@ -345,7 +335,6 @@ class Meta: 'supplier_detail', 'url', 'updated', - 'notes', 'tags', ] @@ -376,22 +365,17 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if supplier_detail is not True: - self.fields.pop('supplier_detail', None) + self.fields.pop('supplier_detail') if manufacturer_detail is not True: - self.fields.pop('manufacturer_detail', None) - self.fields.pop('manufacturer_part_detail', None) + self.fields.pop('manufacturer_detail') + self.fields.pop('manufacturer_part_detail') - if brief or prettify is not True: - self.fields.pop('pretty_name', None) - - if brief: - self.fields.pop('tags') - self.fields.pop('available') - self.fields.pop('availability_updated') + if prettify is not True: + self.fields.pop('pretty_name') # Annotated field showing total in-stock quantity in_stock = serializers.FloatField(read_only=True, label=_('In Stock')) @@ -400,9 +384,7 @@ def __init__(self, *args, **kwargs): pack_quantity_native = serializers.FloatField(read_only=True) - part_detail = part_serializers.PartBriefSerializer( - source='part', many=False, read_only=True - ) + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) supplier_detail = CompanyBriefSerializer( source='supplier', many=False, read_only=True @@ -477,10 +459,7 @@ def create(self, validated_data): return supplier_part -@register_importer() -class SupplierPriceBreakSerializer( - DataImportExportSerializerMixin, InvenTreeModelSerializer -): +class SupplierPriceBreakSerializer(InvenTreeModelSerializer): """Serializer for SupplierPriceBreak object.""" class Meta: @@ -507,10 +486,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not supplier_detail: - self.fields.pop('supplier_detail', None) + self.fields.pop('supplier_detail') if not part_detail: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') quantity = InvenTreeDecimalField() diff --git a/src/backend/InvenTree/company/templates/company/detail.html b/src/backend/InvenTree/company/templates/company/detail.html index d9fbf521e726..7d380d7c2f97 100644 --- a/src/backend/InvenTree/company/templates/company/detail.html +++ b/src/backend/InvenTree/company/templates/company/detail.html @@ -244,7 +244,17 @@

    {% trans "Attachments" %}

    {{ block.super }} onPanelLoad("attachments", function() { - loadAttachmentTable('company', {{ company.pk }}); + loadAttachmentTable('{% url "api-company-attachment-list" %}', { + filters: { + company: {{ company.pk }}, + }, + fields: { + company: { + value: {{ company.pk }}, + hidden: true + } + } + }); }); // Callback function when the 'contacts' panel is loaded @@ -295,8 +305,6 @@

    {% trans "Attachments" %}

    '{% url "api-company-detail" company.pk %}', { editable: true, - model_type: "company", - model_id: {{ company.pk }}, } ); }); diff --git a/src/backend/InvenTree/company/templates/company/manufacturer_part.html b/src/backend/InvenTree/company/templates/company/manufacturer_part.html index 7d07fe282eab..08e6f3856867 100644 --- a/src/backend/InvenTree/company/templates/company/manufacturer_part.html +++ b/src/backend/InvenTree/company/templates/company/manufacturer_part.html @@ -171,42 +171,23 @@

    {% trans "Parameters" %}

    -
    -
    -
    -

    {% trans "Manufacturer Part Notes" %}

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

    {% trans "Pricing Information" %}

    -
    -
    -
    -

    {% trans "Supplier Part Notes" %}

    - {% include "spacer.html" %} -
    - {% include "notes_buttons.html" %} -
    -
    -
    -
    - -
    -
    - {% endblock page_content %} {% block js_ready %} {{ block.super }} -// Load the "notes" tab -onPanelLoad('supplier-part-notes', function() { - - setupNotesField( - 'supplier-part-notes', - '{% url "api-supplier-part-detail" part.pk %}', - { - model_type: "supplierpart", - model_id: {{ part.pk }}, - editable: {% js_bool roles.purchase_order.change %}, - } - ); -}); - {% if barcodes %} $("#show-qr-code").click(function() { showQRDialog( '{% trans "Supplier Part QR Code" escape %}', - '{{ part.barcode }}' + '{"supplierpart": {{ part.pk }} }' ); }); diff --git a/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html b/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html index d6cd01750027..91c0682e00b2 100644 --- a/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html +++ b/src/backend/InvenTree/company/templates/company/supplier_part_sidebar.html @@ -8,5 +8,3 @@ {% include "sidebar_item.html" with label='purchase-orders' text=text icon="fa-shopping-cart" %} {% trans "Supplier Part Pricing" as text %} {% include "sidebar_item.html" with label='pricing' text=text icon="fa-dollar-sign" %} -{% trans "Notes" as text %} -{% include "sidebar_item.html" with label="supplier-part-notes" text=text icon="fa-clipboard" %} diff --git a/src/backend/InvenTree/company/test_api.py b/src/backend/InvenTree/company/test_api.py index 4774c9d1a96b..332292ca3c8e 100644 --- a/src/backend/InvenTree/company/test_api.py +++ b/src/backend/InvenTree/company/test_api.py @@ -2,6 +2,8 @@ from django.urls import reverse +from rest_framework import status + from InvenTree.unit_test import InvenTreeAPITestCase from part.models import Part @@ -55,20 +57,22 @@ def test_company_list(self): def test_company_detail(self): """Tests for the Company detail endpoint.""" url = reverse('api-company-detail', kwargs={'pk': self.acme.pk}) - response = self.get(url, expected_code=200) + response = self.get(url) - self.assertIn('name', response.data.keys()) self.assertEqual(response.data['name'], 'ACME') # Change the name of the company # Note we should not have the correct permissions (yet) data = response.data + response = self.client.patch(url, data, format='json', expected_code=400) + + self.assignRole('company.change') # Update the name and set the currency to a valid value data['name'] = 'ACMOO' data['currency'] = 'NZD' - response = self.patch(url, data, expected_code=200) + response = self.client.patch(url, data, format='json', expected_code=200) self.assertEqual(response.data['name'], 'ACMOO') self.assertEqual(response.data['currency'], 'NZD') @@ -126,7 +130,7 @@ def test_company_create(self): expected_code=400, ) - self.assertIn('currency', response.data) + self.assertTrue('currency' in response.data) def test_company_active(self): """Test that the 'active' value and filter works.""" @@ -158,7 +162,7 @@ def test_company_active(self): class ContactTest(InvenTreeAPITestCase): """Tests for the Contact models.""" - roles = ['purchase_order.view'] + roles = [] @classmethod def setUpTestData(cls): @@ -264,7 +268,7 @@ def test_delete(self): class AddressTest(InvenTreeAPITestCase): """Test cases for Address API endpoints.""" - roles = ['purchase_order.view'] + roles = [] @classmethod def setUpTestData(cls): @@ -392,7 +396,8 @@ def test_manufacturer_part_list(self): # Create manufacturer part data = {'part': 1, 'manufacturer': 7, 'MPN': 'MPN_TEST'} - response = self.post(url, data, expected_code=201) + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data['MPN'], 'MPN_TEST') # Filter by manufacturer @@ -415,7 +420,9 @@ def test_manufacturer_part_detail(self): # Change the MPN data = {'MPN': 'MPN-TEST-123'} - response = self.patch(url, data) + response = self.client.patch(url, data, format='json') + + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['MPN'], 'MPN-TEST-123') def test_manufacturer_part_search(self): @@ -452,7 +459,8 @@ def test_supplier_part_create(self): 'link': 'https://www.axel-larsson.se/Exego.aspx?p_id=341&ArtNr=0804020E', } - response = self.post(url, data) + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Check link is not modified self.assertEqual( diff --git a/src/backend/InvenTree/company/test_migrations.py b/src/backend/InvenTree/company/test_migrations.py index 305eaf603163..bb5b6f27f922 100644 --- a/src/backend/InvenTree/company/test_migrations.py +++ b/src/backend/InvenTree/company/test_migrations.py @@ -45,7 +45,14 @@ def prepare(self): SupplierPart = self.old_state.apps.get_model('company', 'supplierpart') # Create an initial part - part = Part.objects.create(name='Screw', description='A single screw') + part = Part.objects.create( + name='Screw', + description='A single screw', + level=0, + tree_id=0, + lft=0, + rght=0, + ) # Create a company to act as the supplier supplier = Company.objects.create( diff --git a/src/backend/InvenTree/company/tests.py b/src/backend/InvenTree/company/tests.py index 351fee268da3..a789b951d435 100644 --- a/src/backend/InvenTree/company/tests.py +++ b/src/backend/InvenTree/company/tests.py @@ -286,11 +286,7 @@ def test_exists(self): def test_delete(self): """Test deletion of a ManufacturerPart.""" - part = Part.objects.get(pk=self.part.id) - part.active = False - part.save() - part.delete() - + Part.objects.get(pk=self.part.id).delete() # Check that ManufacturerPart was deleted self.assertEqual(ManufacturerPart.objects.count(), 3) diff --git a/src/backend/InvenTree/config_template.yaml b/src/backend/InvenTree/config_template.yaml index 4ef1bf42bfd4..8e4efeb54c25 100644 --- a/src/backend/InvenTree/config_template.yaml +++ b/src/backend/InvenTree/config_template.yaml @@ -1,6 +1,3 @@ -# InvenTree Configuration Template -# Ref: https://docs.inventree.org/en/stable/start/config/ -# Note: Environment variables take precedence over values set in this file # Secret key for backend # Use the environment variable INVENTREE_SECRET_KEY_FILE @@ -8,12 +5,16 @@ # Database backend selection - Configure backend database settings # Documentation: https://docs.inventree.org/en/latest/start/config/ + # Note: Database configuration options can also be specified from environmental variables, # with the prefix INVENTREE_DB_ # e.g INVENTREE_DB_NAME / INVENTREE_DB_USER / INVENTREE_DB_PASSWORD -# Do not change this section if you are using the package - use `inventree config` instead -# TO MAINTAINERS: Do not change database strings database: + # Uncomment (and edit) one of the database configurations below, + # or specify database options using environment variables + + # Refer to the django documentation for full list of options + # --- Available options: --- # ENGINE: Database engine. Selection from: # - mysql @@ -25,30 +26,69 @@ database: # HOST: Database host address (if required) # PORT: Database host port (if required) -# Set debug to False to run in production mode, or use the environment variable INVENTREE_DEBUG + # --- Database settings --- + #ENGINE: sampleengine + #NAME: '/path/to/database' + #USER: sampleuser + #PASSWORD: samplepassword + #HOST: samplehost + #PORT: 123456 + + # --- Example Configuration - MySQL --- + #ENGINE: mysql + #NAME: inventree + #USER: inventree + #PASSWORD: inventree_password + #HOST: 'localhost' + #PORT: '3306' + + # --- Example Configuration - Postgresql --- + #ENGINE: postgresql + #NAME: inventree + #USER: inventree + #PASSWORD: inventree_password + #HOST: 'localhost' + #PORT: '5432' + + # --- Example Configuration - sqlite3 --- + # ENGINE: sqlite3 + # NAME: '/home/inventree/database.sqlite3' + +# Set debug to False to run in production mode +# Use the environment variable INVENTREE_DEBUG debug: True -# Set to False to disable the admin interface, or use the environment variable INVENTREE_ADMIN_ENABLED +# Set to False to disable the admin interface (default = True) +# Or, use the environment variable INVENTREE_ADMIN_ENABLED #admin_enabled: True -# Set the admin URL, or use the environment variable INVENTREE_ADMIN_URL +# Set the admin URL (default is 'admin') +# Or, use the environment variable INVENTREE_ADMIN_URL #admin_url: 'admin' -# Configure the system logging level (or use environment variable INVENTREE_LOG_LEVEL) +# Configure the system logging level +# Use environment variable INVENTREE_LOG_LEVEL # Options: DEBUG / INFO / WARNING / ERROR / CRITICAL log_level: WARNING -# Enable database-level logging, or use the environment variable INVENTREE_DB_LOGGING +# Enable database-level logging +# Use the environment variable INVENTREE_DB_LOGGING db_logging: False -# Select default system language , or use the environment variable INVENTREE_LANGUAGE +# Select default system language (default is 'en-us') +# Use the environment variable INVENTREE_LANGUAGE language: en-us -# System time-zone (default is UTC). Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# System time-zone (default is UTC) +# Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones timezone: UTC -# Base URL for the InvenTree server (or use the environment variable INVENTREE_SITE_URL) -site_url: 'http://localhost:8000' +# Base URL for the InvenTree server +# Use the environment variable INVENTREE_SITE_URL +# site_url: 'http://localhost:8000' + +# Base currency code (or use env var INVENTREE_BASE_CURRENCY) +base_currency: USD # Add new user on first startup by either adding values here or from a file #admin_user: admin @@ -56,6 +96,17 @@ site_url: 'http://localhost:8000' #admin_password: inventree #admin_password_file: '/etc/inventree/admin_password.txt' +# List of currencies supported by default. Add other currencies here to allow use in InvenTree +currencies: + - AUD + - CAD + - CNY + - EUR + - GBP + - JPY + - NZD + - USD + # Email backend configuration # Ref: https://docs.djangoproject.com/en/dev/topics/email/ # Alternatively, these options can all be set using environment variables, @@ -79,18 +130,34 @@ sentry_enabled: False #sentry_sample_rate: 0.1 #sentry_dsn: https://custom@custom.ingest.sentry.io/custom -# OpenTelemetry tracing/metrics - disabled by default - refer to the documentation for full list of options +# OpenTelemetry tracing/metrics - disabled by default # This can be used to send tracing data, logs and metrics to OpenTelemtry compatible backends -tracing: - enabled: false - -# Set this variable to True to enable InvenTree Plugins, or use the environment variable INVENTREE_PLUGINS_ENABLED +# See https://opentelemetry.io/ecosystem/vendors/ for a list of supported backends +# Alternatively, use environment variables eg. INVENTREE_TRACING_ENABLED, INVENTREE_TRACING_HEADERS, INVENTREE_TRACING_AUTH +#tracing: +# enabled: true +# endpoint: https://otlp-gateway-prod-eu-west-0.grafana.net/otlp +# headers: +# api-key: 'sample' +# auth: +# basic: +# username: '******' +# password: 'glc_****' +# is_http: true +# append_http: true +# console: false +# resources: +# CUSTOM_KEY: 'CUSTOM_VALUE' + +# Set this variable to True to enable InvenTree Plugins +# Alternatively, use the environment variable INVENTREE_PLUGINS_ENABLED plugins_enabled: False #plugin_noinstall: True #plugin_file: '/path/to/plugins.txt' #plugin_dir: '/path/to/plugins/' -# Set this variable to True to enable auto-migrations, or use the environment variable INVENTREE_AUTO_UPDATE +# Set this variable to True to enable auto-migrations +# Alternatively, use the environment variable INVENTREE_AUTO_UPDATE auto_update: False # Allowed hosts (see ALLOWED_HOSTS in Django settings documentation) @@ -114,11 +181,6 @@ use_x_forwarded_host: false # Override with the environment variable INVENTREE_USE_X_FORWARDED_PORT use_x_forwarded_port: false -# Cookie settings -cookie: - secure: false - samesite: none - # Cross Origin Resource Sharing (CORS) settings (see https://github.com/adamchainz/django-cors-headers) cors: allow_all: true @@ -145,13 +207,6 @@ background: timeout: 90 max_attempts: 5 -# External cache configuration (refer to the documentation for full list of options) -cache: - enabled: false - host: 'inventree-cache' - port: 6379 - - # Login configuration login_confirm_days: 3 login_attempts: 5 @@ -188,13 +243,56 @@ remote_login_header: HTTP_REMOTE_USER # github: # VERIFIED_EMAIL: true -# Add LDAP support (refer to the documentation for available options) -# Ref: https://docs.inventree.org/en/stable/start/advanced/#ldap -ldap: - enabled: false +# Add LDAP support +# ldap: +# enabled: false +# debug: false # enable debug mode to troubleshoot ldap configuration +# server_uri: ldaps://example.org +# bind_dn: cn=admin,dc=example,dc=org +# bind_password: admin_password +# search_base_dn: cn=Users,dc=example,dc=org + +# # enable TLS encryption over the standard LDAP port, +# # see: https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls +# # start_tls: false + +# # uncomment if you want to use direct bind, bind_dn and bin_password is not necessary then +# # user_dn_template: "uid=%(user)s,dc=example,dc=org" + +# # uncomment to set advanced global options, see https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options +# # for all available options (keys and values starting with OPT_ get automatically converted to python-ldap keys) +# # global_options: +# # OPT_X_TLS_REQUIRE_CERT: OPT_X_TLS_NEVER +# # OPT_X_TLS_CACERTFILE: /opt/inventree/ldapca.pem + +# # uncomment for advanced filter search, default: uid=%(user)s +# # search_filter_str: + +# # uncomment for advanced user attribute mapping (in the format : ) +# # user_attr_map: +# # first_name: givenName +# # last_name: sn +# # email: mail + +# # always update the user on each login, default: true +# # always_update_user: true + +# # cache timeout to reduce traffic with LDAP server, default: 3600 (1h) +# # cache_timeout: 3600 + +# # LDAP group support +# # group_search: ou=groups,dc=example,dc=com +# # require_group: cn=inventree_allow,ou=groups,dc=example,dc=com +# # deny_group: cn=inventree_deny,ou=groups,dc=example,dc=com +# # Set staff/superuser flag based on LDAP group membership +# # user_flags_by_group: +# # is_staff: cn=inventree_staff,ou=groups,dc=example,dc=com +# # is_superuser: cn=inventree_superuser,ou=groups,dc=example,dc=com # Customization options -# Ref: https://docs.inventree.org/en/stable/start/config/#customization-options +# Add custom messages to the login page or main interface navbar or exchange the logo +# Use environment variable INVENTREE_CUSTOMIZE or INVENTREE_CUSTOM_LOGO +# Logo and splash paths and filenames must be relative to the static_root directory # customize: # login_message: InvenTree demo instance - Click here for login details # navbar_message:
    InvenTree demo mode
    diff --git a/src/backend/InvenTree/generic/states/__init__.py b/src/backend/InvenTree/generic/states/__init__.py index a13139b5ff3a..8d5fdfed7186 100644 --- a/src/backend/InvenTree/generic/states/__init__.py +++ b/src/backend/InvenTree/generic/states/__init__.py @@ -6,13 +6,7 @@ States can be extended with custom options for each InvenTree instance - those options are stored in the database and need to link back to state values. """ -from .states import ColorEnum, StatusCode +from .states import StatusCode from .transition import StateTransitionMixin, TransitionMethod, storage -__all__ = [ - 'ColorEnum', - 'StatusCode', - 'storage', - 'TransitionMethod', - 'StateTransitionMixin', -] +__all__ = ['StatusCode', 'storage', 'TransitionMethod', 'StateTransitionMixin'] diff --git a/src/backend/InvenTree/generic/states/api.py b/src/backend/InvenTree/generic/states/api.py index 49c742533534..203a6dea3abf 100644 --- a/src/backend/InvenTree/generic/states/api.py +++ b/src/backend/InvenTree/generic/states/api.py @@ -2,22 +2,12 @@ import inspect -from django.urls import include, path - from drf_spectacular.utils import OpenApiResponse, extend_schema from rest_framework import permissions, serializers from rest_framework.generics import GenericAPIView from rest_framework.response import Response -import common.models -import common.serializers -from generic.states.custom import get_status_api_response -from importer.mixins import DataExportViewMixin -from InvenTree.filters import SEARCH_ORDER_FILTER -from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI -from InvenTree.permissions import IsStaffOrReadOnly from InvenTree.serializers import EmptySerializer -from machine.machine_type import MachineStatus from .states import StatusCode @@ -83,52 +73,18 @@ class AllStatusViews(StatusView): def get(self, request, *args, **kwargs): """Perform a GET request to learn information about status codes.""" - data = get_status_api_response() - # Extend with MachineStatus classes - data.update(get_status_api_response(MachineStatus, prefix=['MachineStatus'])) - return Response(data) + data = {} + def discover_status_codes(parent_status_class, prefix=None): + """Recursively discover status classes.""" + for status_class in parent_status_class.__subclasses__(): + name = '__'.join([*(prefix or []), status_class.__name__]) + data[name] = { + 'class': status_class.__name__, + 'values': status_class.dict(), + } + discover_status_codes(status_class, [name]) -# Custom states -class CustomStateList(DataExportViewMixin, ListCreateAPI): - """List view for all custom states.""" - - queryset = common.models.InvenTreeCustomUserStateModel.objects.all() - serializer_class = common.serializers.CustomStateSerializer - permission_classes = [permissions.IsAuthenticated, IsStaffOrReadOnly] - filter_backends = SEARCH_ORDER_FILTER - ordering_fields = ['key'] - search_fields = ['key', 'name', 'label', 'reference_status'] - - -class CustomStateDetail(RetrieveUpdateDestroyAPI): - """Detail view for a particular custom states.""" - - queryset = common.models.InvenTreeCustomUserStateModel.objects.all() - serializer_class = common.serializers.CustomStateSerializer - permission_classes = [permissions.IsAuthenticated, IsStaffOrReadOnly] - - -urlpattern = [ - # Custom state - path( - 'custom/', - include([ - path( - '/', CustomStateDetail.as_view(), name='api-custom-state-detail' - ), - path('', CustomStateList.as_view(), name='api-custom-state-list'), - ]), - ), - # Generic status views - path( - '', - include([ - path( - f'/', - include([path('', StatusView.as_view(), name='api-status')]), - ), - path('', AllStatusViews.as_view(), name='api-status-all'), - ]), - ), -] + discover_status_codes(StatusCode) + + return Response(data) diff --git a/src/backend/InvenTree/generic/states/custom.py b/src/backend/InvenTree/generic/states/custom.py deleted file mode 100644 index 8fc8948c28d9..000000000000 --- a/src/backend/InvenTree/generic/states/custom.py +++ /dev/null @@ -1,89 +0,0 @@ -"""Helper functions for custom status labels.""" - -from InvenTree.helpers import inheritors - -from .states import ColorEnum, StatusCode - - -def get_custom_status_labels(include_custom: bool = True): - """Return a dict of custom status labels.""" - return {cls.tag(): cls for cls in get_custom_classes(include_custom)} - - -def get_status_api_response(base_class=StatusCode, prefix=None): - """Return a dict of status classes (custom and class defined). - - Args: - base_class: The base class to search for subclasses. - prefix: A list of strings to prefix the class names with. - """ - return { - '__'.join([*(prefix or []), k.__name__]): { - 'class': k.__name__, - 'values': k.dict(), - } - for k in get_custom_classes(base_class=base_class, subclass=False) - } - - -def state_color_mappings(): - """Return a list of custom user state colors.""" - return [(a.name, a.value) for a in ColorEnum] - - -def state_reference_mappings(): - """Return a list of custom user state references.""" - classes = get_custom_classes(include_custom=False) - return [(a.__name__, a.__name__) for a in sorted(classes, key=lambda x: x.__name__)] - - -def get_logical_value(value, model: str): - """Return the state model for the selected value.""" - from common.models import InvenTreeCustomUserStateModel - - return InvenTreeCustomUserStateModel.objects.get(key=value, model__model=model) - - -def get_custom_classes( - include_custom: bool = True, base_class=StatusCode, subclass=False -): - """Return a dict of status classes (custom and class defined).""" - discovered_classes = inheritors(base_class, subclass) - - if not include_custom: - return discovered_classes - - # Gather DB settings - from common.models import InvenTreeCustomUserStateModel - - custom_db_states = {} - custom_db_mdls = {} - for item in list(InvenTreeCustomUserStateModel.objects.all()): - if not custom_db_states.get(item.reference_status): - custom_db_states[item.reference_status] = [] - custom_db_states[item.reference_status].append(item) - custom_db_mdls[item.model.app_label] = item.reference_status - custom_db_mdls_keys = custom_db_mdls.keys() - - states = {} - for cls in discovered_classes: - tag = cls.tag() - states[tag] = cls - if custom_db_mdls and tag in custom_db_mdls_keys: - data = [(str(m.name), (m.value, m.label, m.color)) for m in states[tag]] - data_keys = [i[0] for i in data] - - # Extent with non present tags - for entry in custom_db_states[custom_db_mdls[tag]]: - ref_name = str(entry.name.upper().replace(' ', '')) - if ref_name not in data_keys: - data += [ - ( - str(entry.name.upper().replace(' ', '')), - (entry.key, entry.label, entry.color), - ) - ] - - # Re-assemble the enum - states[tag] = base_class(f'{tag.capitalize()}Status', data) - return states.values() diff --git a/src/backend/InvenTree/generic/states/fields.py b/src/backend/InvenTree/generic/states/fields.py deleted file mode 100644 index 7f67f5c14b50..000000000000 --- a/src/backend/InvenTree/generic/states/fields.py +++ /dev/null @@ -1,249 +0,0 @@ -"""Custom model/serializer fields for InvenTree models that support custom states.""" - -from typing import Any, Iterable, Optional - -from django.core.exceptions import ObjectDoesNotExist -from django.db import models -from django.utils.encoding import force_str -from django.utils.translation import gettext_lazy as _ - -from rest_framework import serializers -from rest_framework.fields import ChoiceField - -from .custom import get_logical_value - - -class CustomChoiceField(serializers.ChoiceField): - """Custom Choice Field. - - This is not intended to be used directly. - """ - - def __init__(self, choices: Iterable, **kwargs): - """Initialize the field.""" - choice_mdl = kwargs.pop('choice_mdl', None) - choice_field = kwargs.pop('choice_field', None) - is_custom = kwargs.pop('is_custom', False) - kwargs.pop('max_value', None) - kwargs.pop('min_value', None) - super().__init__(choices, **kwargs) - self.choice_mdl = choice_mdl - self.choice_field = choice_field - self.is_custom = is_custom - - def to_internal_value(self, data): - """Map the choice (that might be a custom one) back to the logical value.""" - try: - return super().to_internal_value(data) - except serializers.ValidationError: - try: - logical = get_logical_value(data, self.choice_mdl._meta.model_name) - if self.is_custom: - return logical.key - return logical.logical_key - except (ObjectDoesNotExist, Exception): - raise serializers.ValidationError('Invalid choice') - - def get_field_info(self, field, field_info): - """Return the field information for the given item.""" - from common.models import InvenTreeCustomUserStateModel - - # Static choices - choices = [ - { - 'value': choice_value, - 'display_name': force_str(choice_name, strings_only=True), - } - for choice_value, choice_name in field.choices.items() - ] - # Dynamic choices from InvenTreeCustomUserStateModel - objs = InvenTreeCustomUserStateModel.objects.filter( - model__model=field.choice_mdl._meta.model_name - ) - dyn_choices = [ - {'value': choice.key, 'display_name': choice.label} for choice in objs.all() - ] - - if dyn_choices: - all_choices = choices + dyn_choices - field_info['choices'] = sorted(all_choices, key=lambda kv: kv['value']) - else: - field_info['choices'] = choices - return field_info - - -class ExtraCustomChoiceField(CustomChoiceField): - """Custom Choice Field that returns value of status if empty. - - This is not intended to be used directly. - """ - - def to_representation(self, value): - """Return the value of the status if it is empty.""" - return super().to_representation(value) or value - - -class InvenTreeCustomStatusModelField(models.PositiveIntegerField): - """Custom model field for extendable status codes. - - Adds a secondary *_custom_key field to the model which can be used to store additional status information. - Models using this model field must also include the InvenTreeCustomStatusSerializerMixin in all serializers that create or update the value. - """ - - def deconstruct(self): - """Deconstruct the field for migrations.""" - name, path, args, kwargs = super().deconstruct() - - return name, path, args, kwargs - - def contribute_to_class(self, cls, name): - """Add the _custom_key field to the model.""" - cls._meta.supports_custom_status = True - - if not hasattr(self, '_custom_key_field'): - self.add_field(cls, name) - - super().contribute_to_class(cls, name) - - def clean(self, value: Any, model_instance: Any) -> Any: - """Ensure that the value is not an empty string.""" - if value == '': - value = None - return super().clean(value, model_instance) - - def add_field(self, cls, name): - """Adds custom_key_field to the model class to save additional status information.""" - custom_key_field = ExtraInvenTreeCustomStatusModelField( - default=None, - verbose_name=_('Custom status key'), - help_text=_('Additional status information for this item'), - blank=True, - null=True, - ) - cls.add_to_class(f'{name}_custom_key', custom_key_field) - self._custom_key_field = custom_key_field - - -class ExtraInvenTreeCustomStatusModelField(models.PositiveIntegerField): - """Custom field used to detect custom extenteded fields. - - This is not intended to be used directly, if you want to support custom states in your model use InvenTreeCustomStatusModelField. - """ - - -class InvenTreeCustomStatusSerializerMixin: - """Mixin to ensure custom status fields are set. - - This mixin must be used to ensure that custom status fields are set correctly when updating a model. - """ - - _custom_fields: Optional[list] = None - _custom_fields_leader: Optional[list] = None - _custom_fields_follower: Optional[list] = None - _is_gathering = False - - def update(self, instance, validated_data): - """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: - follower_field_name = f'{field}_custom_key' - if ( - field in self.initial_data - and self.instance - and self.initial_data[field] - != getattr(self.instance, follower_field_name, None) - ): - setattr(self.instance, follower_field_name, self.initial_data[field]) - - # Mirror values from follower to leader - for field in self._custom_fields_follower: - leader_field_name = field.replace('_custom_key', '') - if field in validated_data and leader_field_name not in self.initial_data: - try: - reference = get_logical_value( - validated_data[field], - self.fields[field].choice_mdl._meta.model_name, - ) - validated_data[leader_field_name] = reference.logical_key - except (ObjectDoesNotExist, Exception): - if validated_data[field] in self.fields[leader_field_name].choices: - validated_data[leader_field_name] = validated_data[field] - else: - raise serializers.ValidationError('Invalid choice') - return super().update(instance, validated_data) - - def to_representation(self, instance): - """Ensure custom state fields are not served empty.""" - data = super().to_representation(instance) - for field in self.gather_custom_fields(): - if data[field] is None: - data[field] = data[ - field.replace('_custom_key', '') - ] # Use "normal" status field instead - return data - - def gather_custom_fields(self): - """Gather all custom fields on the serializer.""" - if self._custom_fields_follower: - self._is_gathering = False - return self._custom_fields_follower - - if self._is_gathering: - self._custom_fields = {} - else: - self._is_gathering = True - # Gather fields - self._custom_fields = { - k: v.is_custom - for k, v in self.fields.items() - if isinstance(v, CustomChoiceField) - } - - # Separate fields for easier/cheaper access - self._custom_fields_follower = [k for k, v in self._custom_fields.items() if v] - self._custom_fields_leader = [ - k for k, v in self._custom_fields.items() if not v - ] - - return self._custom_fields_follower - - def build_standard_field(self, field_name, model_field): - """Use custom field for custom status model. - - This is required because of DRF overwriting all fields with choice sets. - """ - field_cls, field_kwargs = super().build_standard_field(field_name, model_field) - if issubclass(field_cls, ChoiceField) and isinstance( - model_field, InvenTreeCustomStatusModelField - ): - field_cls = CustomChoiceField - field_kwargs['choice_mdl'] = model_field.model - field_kwargs['choice_field'] = model_field.name - elif isinstance(model_field, ExtraInvenTreeCustomStatusModelField): - field_cls = ExtraCustomChoiceField - field_kwargs['choice_mdl'] = model_field.model - field_kwargs['choice_field'] = model_field.name - field_kwargs['is_custom'] = True - - # Inherit choices from leader - self.gather_custom_fields() - if 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'): - field_kwargs['choices'] = list(leader_field.choices.items()) - elif hasattr(model_field.model, leader_field_name): - leader_model_field = getattr( - model_field.model, leader_field_name - ).field - if hasattr(leader_model_field, 'choices'): - field_kwargs['choices'] = leader_model_field.choices - - if getattr(leader_field, 'read_only', False) is True: - field_kwargs['read_only'] = True - - if 'choices' not in field_kwargs: - field_kwargs['choices'] = [] - - return field_cls, field_kwargs diff --git a/src/backend/InvenTree/generic/states/states.py b/src/backend/InvenTree/generic/states/states.py index 1ac7de117429..372a5bec45e1 100644 --- a/src/backend/InvenTree/generic/states/states.py +++ b/src/backend/InvenTree/generic/states/states.py @@ -2,7 +2,6 @@ import enum import re -from enum import Enum class BaseEnum(enum.IntEnum): @@ -17,26 +16,11 @@ def __new__(cls, *args): obj._value_ = args[0] return obj - def __int__(self): - """Return an integer representation of the value.""" - return self.value - - def __str__(self): - """Return a string representation of the value.""" - return str(self.value) - def __eq__(self, obj): """Override equality operator to allow comparison with int.""" - if type(obj) is int: - return self.value == obj - - if isinstance(obj, BaseEnum): - return self.value == obj.value - - if hasattr(obj, 'value'): - return self.value == obj.value - - return super().__eq__(obj) + if type(self) is type(obj): + return super().__eq__(obj) + return self.value == obj def __ne__(self, obj): """Override inequality operator to allow comparison with int.""" @@ -66,23 +50,10 @@ def __new__(cls, *args): # Normal item definition if len(args) == 1: obj.label = args[0] - obj.color = ColorEnum.secondary + obj.color = 'secondary' else: obj.label = args[1] - obj.color = args[2] if len(args) > 2 else ColorEnum.secondary - - # Ensure color is a valid value - if isinstance(obj.color, str): - try: - obj.color = ColorEnum(obj.color) - except ValueError: - raise ValueError( - f"Invalid color value '{obj.color}' for status '{obj.label}'" - ) - - # Set color value as string - obj.color = obj.color.value - obj.color_class = obj.color + obj.color = args[2] if len(args) > 2 else 'secondary' return obj @@ -195,15 +166,3 @@ def template_context(cls): ret['list'] = cls.list() return ret - - -class ColorEnum(Enum): - """Enum for color values.""" - - primary = 'primary' - secondary = 'secondary' - success = 'success' - danger = 'danger' - warning = 'warning' - info = 'info' - dark = 'dark' diff --git a/src/backend/InvenTree/generic/states/tags.py b/src/backend/InvenTree/generic/states/tags.py index f93a6b8a9654..19e1471b2840 100644 --- a/src/backend/InvenTree/generic/states/tags.py +++ b/src/backend/InvenTree/generic/states/tags.py @@ -3,21 +3,15 @@ from django.utils.safestring import mark_safe from generic.templatetags.generic import register +from InvenTree.helpers import inheritors -from .custom import get_custom_status_labels +from .states import StatusCode @register.simple_tag -def status_label(typ: str, key: int, include_custom: bool = False, *args, **kwargs): +def status_label(typ: str, key: int, *args, **kwargs): """Render a status label.""" - state = get_custom_status_labels(include_custom=include_custom).get(typ, None) + state = {cls.tag(): cls for cls in inheritors(StatusCode)}.get(typ, None) if state: return mark_safe(state.render(key, large=kwargs.get('large', False))) raise ValueError(f"Unknown status type '{typ}'") - - -@register.simple_tag -def display_status_label(typ: str, key: int, fallback: int, *args, **kwargs): - """Render a status label.""" - render_key = int(key) if key else fallback - return status_label(typ, render_key, *args, include_custom=True, **kwargs) diff --git a/src/backend/InvenTree/generic/states/tests.py b/src/backend/InvenTree/generic/states/tests.py index dbba2d14b23e..c30da83ae363 100644 --- a/src/backend/InvenTree/generic/states/tests.py +++ b/src/backend/InvenTree/generic/states/tests.py @@ -1,15 +1,11 @@ """Tests for the generic states module.""" -from django.contrib.contenttypes.models import ContentType from django.test.client import RequestFactory -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from rest_framework.test import force_authenticate -from common.models import InvenTreeCustomUserStateModel -from generic.states import ColorEnum -from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase +from InvenTree.unit_test import InvenTreeTestCase from .api import StatusView from .states import StatusCode @@ -18,9 +14,9 @@ class GeneralStatus(StatusCode): """Defines a set of status codes for tests.""" - PENDING = 10, _('Pending'), ColorEnum.secondary + PENDING = 10, _('Pending'), 'secondary' PLACED = 20, _('Placed'), 'primary' - COMPLETE = 30, _('Complete'), ColorEnum.success + COMPLETE = 30, _('Complete'), 'success' ABC = None # This should be ignored _DEF = None # This should be ignored jkl = None # This should be ignored @@ -124,19 +120,8 @@ def test_code_functions(self): # label self.assertEqual(GeneralStatus.label(10), 'Pending') - def test_color(self): - """Test that the color enum validation works.""" - with self.assertRaises(ValueError) as e: - - class TTTT(StatusCode): - PENDING = 10, _('Pending'), 'invalid' - - self.assertEqual( - str(e.exception), "Invalid color value 'invalid' for status 'Pending'" - ) - - def test_tag_status_label(self): - """Test that the status_label tag.""" + def test_tag_function(self): + """Test that the status code tag functions.""" from .tags import status_label self.assertEqual( @@ -152,21 +137,6 @@ def test_tag_status_label(self): # Test non-existent key self.assertEqual(status_label('general', 100), '100') - def test_tag_display_status_label(self): - """Test that the display_status_label tag (mainly the same as status_label).""" - from .tags import display_status_label - - self.assertEqual( - display_status_label('general', 10, 11), - "Pending", - ) - # Fallback - self.assertEqual(display_status_label('general', None, 11), '11') - self.assertEqual( - display_status_label('general', None, 10), - "Pending", - ) - def test_api(self): """Test StatusView API view.""" view = StatusView.as_view() @@ -221,59 +191,3 @@ def test_api(self): self.assertEqual( str(e.exception), '`status_class` not a valid StatusCode class' ) - - -class ApiTests(InvenTreeAPITestCase): - """Test the API for the generic states module.""" - - def test_all_states(self): - """Test the API endpoint for listing all status models.""" - response = self.get(reverse('api-status-all')) - self.assertEqual(len(response.data), 12) - - # Test the BuildStatus model - build_status = response.data['BuildStatus'] - self.assertEqual(build_status['class'], 'BuildStatus') - self.assertEqual(len(build_status['values']), 5) - pending = build_status['values']['PENDING'] - self.assertEqual(pending['key'], 10) - self.assertEqual(pending['name'], 'PENDING') - self.assertEqual(pending['label'], 'Pending') - - # Test the StockStatus model (static) - stock_status = response.data['StockStatus'] - self.assertEqual(stock_status['class'], 'StockStatus') - self.assertEqual(len(stock_status['values']), 8) - in_stock = stock_status['values']['OK'] - self.assertEqual(in_stock['key'], 10) - self.assertEqual(in_stock['name'], 'OK') - self.assertEqual(in_stock['label'], 'OK') - - # MachineStatus model - machine_status = response.data['MachineStatus__LabelPrinterStatus'] - self.assertEqual(machine_status['class'], 'LabelPrinterStatus') - self.assertEqual(len(machine_status['values']), 6) - connected = machine_status['values']['CONNECTED'] - self.assertEqual(connected['key'], 100) - self.assertEqual(connected['name'], 'CONNECTED') - - # Add custom status - InvenTreeCustomUserStateModel.objects.create( - key=11, - name='OK - advanced', - label='OK - adv.', - color='secondary', - logical_key=10, - model=ContentType.objects.get(model='stockitem'), - reference_status='StockStatus', - ) - response = self.get(reverse('api-status-all')) - self.assertEqual(len(response.data), 12) - - stock_status_cstm = response.data['StockStatus'] - self.assertEqual(stock_status_cstm['class'], 'StockStatus') - self.assertEqual(len(stock_status_cstm['values']), 9) - ok_advanced = stock_status_cstm['values']['OK'] - self.assertEqual(ok_advanced['key'], 10) - self.assertEqual(ok_advanced['name'], 'OK') - self.assertEqual(ok_advanced['label'], 'OK') diff --git a/src/backend/InvenTree/plugin/samples/icons/__init__.py b/src/backend/InvenTree/generic/templating/__init__.py similarity index 100% rename from src/backend/InvenTree/plugin/samples/icons/__init__.py rename to src/backend/InvenTree/generic/templating/__init__.py diff --git a/src/backend/InvenTree/generic/templating/apps.py b/src/backend/InvenTree/generic/templating/apps.py new file mode 100644 index 000000000000..1fde7e47e90f --- /dev/null +++ b/src/backend/InvenTree/generic/templating/apps.py @@ -0,0 +1,134 @@ +"""Shared templating code.""" + +import logging +import warnings +from pathlib import Path + +from django.core.exceptions import AppRegistryNotReady +from django.core.files.storage import default_storage +from django.db.utils import IntegrityError, OperationalError, ProgrammingError + +from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode + +import InvenTree.helpers +from InvenTree.config import ensure_dir + +logger = logging.getLogger('inventree') + + +class TemplatingMixin: + """Mixin that contains shared templating code.""" + + name: str = '' + db: str = '' + + def __init__(self, *args, **kwargs): + """Ensure that the required properties are set.""" + super().__init__(*args, **kwargs) + if self.name == '': + raise NotImplementedError('ref must be set') + if self.db == '': + raise NotImplementedError('db must be set') + + def create_defaults(self): + """Function that creates all default templates for the app.""" + raise NotImplementedError('create_defaults must be implemented') + + def get_src_dir(self, ref_name): + """Get the source directory for the default templates.""" + raise NotImplementedError('get_src_dir must be implemented') + + def get_new_obj_data(self, data, filename): + """Get the data for a new template db object.""" + raise NotImplementedError('get_new_obj_data must be implemented') + + # Standardized code + def ready(self): + """This function is called whenever the app is loaded.""" + import InvenTree.ready + + # skip loading if plugin registry is not loaded or we run in a background thread + if ( + not InvenTree.ready.isPluginRegistryLoaded() + or not InvenTree.ready.isInMainThread() + ): + return + + if not InvenTree.ready.canAppAccessDatabase(allow_test=False): + return # pragma: no cover + + with maintenance_mode_on(): + try: + self.create_defaults() + except ( + AppRegistryNotReady, + IntegrityError, + OperationalError, + ProgrammingError, + ): + # Database might not yet be ready + warnings.warn( + f'Database was not ready for creating {self.name}s', stacklevel=2 + ) + + set_maintenance_mode(False) + + def create_template_dir(self, model, data): + """Create folder and database entries for the default templates, if they do not already exist.""" + ref_name = model.getSubdir() + + # Create root dir for templates + src_dir = self.get_src_dir(ref_name) + ensure_dir(Path(self.name, 'inventree', ref_name), default_storage) + + # Copy each template across (if required) + for entry in data: + self.create_template_file(model, src_dir, entry, ref_name) + + def create_template_file(self, model, src_dir, data, ref_name): + """Ensure a label template is in place.""" + # Destination filename + filename = Path(self.name, 'inventree', ref_name, data['file']) + src_file = src_dir.joinpath(data['file']) + + do_copy = False + + if not default_storage.exists(filename): + logger.info("%s template '%s' is not present", self.name, filename) + do_copy = True + else: + # Check if the file contents are different + src_hash = InvenTree.helpers.hash_file(src_file) + dst_hash = InvenTree.helpers.hash_file(filename, default_storage) + + if src_hash != dst_hash: + logger.info("Hash differs for '%s'", filename) + do_copy = True + + if do_copy: + logger.info("Copying %s template '%s'", self.name, filename) + # Ensure destination dir exists + ensure_dir(filename.parent, default_storage) + + # Copy file + default_storage.save(filename, src_file.open('rb')) + + # Check if a file matching the template already exists + try: + if model.objects.filter(**{self.db: filename}).exists(): + return # pragma: no cover + except Exception: + logger.exception( + "Failed to query %s for '%s' - you should run 'invoke update' first!", + self.name, + filename, + ) + + logger.info("Creating entry for %s '%s'", model, data.get('name')) + + try: + model.objects.create(**self.get_new_obj_data(data, str(filename))) + except Exception as _e: + logger.warning( + "Failed to create %s '%s' with error '%s'", self.name, data['name'], _e + ) diff --git a/src/backend/InvenTree/importer/admin.py b/src/backend/InvenTree/importer/admin.py deleted file mode 100644 index a33f2e7b5008..000000000000 --- a/src/backend/InvenTree/importer/admin.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Admin site specification for the 'importer' app.""" - -from django.contrib import admin - -import importer.models -import importer.registry - - -class DataImportColumnMapAdmin(admin.TabularInline): - """Inline admin for DataImportColumnMap model.""" - - model = importer.models.DataImportColumnMap - can_delete = False - max_num = 0 - - def get_readonly_fields(self, request, obj=None): - """Return the readonly fields for the admin interface.""" - return ['field'] - - def formfield_for_dbfield(self, db_field, request, **kwargs): - """Override the choices for the column field.""" - if db_field.name == 'column': - # TODO: Implement this! - queryset = self.get_queryset(request) - - if queryset.count() > 0: - session = queryset.first().session - db_field.choices = [(col, col) for col in session.columns] - - return super().formfield_for_choice_field(db_field, request, **kwargs) - - -@admin.register(importer.models.DataImportSession) -class DataImportSessionAdmin(admin.ModelAdmin): - """Admin interface for the DataImportSession model.""" - - list_display = ['id', 'data_file', 'status', 'user'] - - list_filter = ['status'] - - inlines = [DataImportColumnMapAdmin] - - def get_readonly_fields(self, request, obj=None): - """Update the readonly fields for the admin interface.""" - fields = ['columns', 'status', 'timestamp'] - - # Prevent data file from being edited after upload! - if obj: - fields += ['data_file'] - else: - fields += ['field_mapping'] - - return fields - - def formfield_for_dbfield(self, db_field, request, **kwargs): - """Override the choices for the model_type field.""" - if db_field.name == 'model_type': - db_field.choices = importer.registry.supported_model_options() - - return super().formfield_for_dbfield(db_field, request, **kwargs) - - -@admin.register(importer.models.DataImportRow) -class DataImportRowAdmin(admin.ModelAdmin): - """Admin interface for the DataImportRow model.""" - - list_display = ['id', 'session', 'row_index'] - - def get_readonly_fields(self, request, obj=None): - """Return the readonly fields for the admin interface.""" - return ['session', 'row_index', 'row_data', 'errors', 'valid'] - - -class DataExportAdmin(admin.ModelAdmin): - """Custom admin class mixin allowing for data export functionality.""" - - serializer_class = None - - # TODO: Add custom admin action to export queryset data diff --git a/src/backend/InvenTree/importer/api.py b/src/backend/InvenTree/importer/api.py deleted file mode 100644 index 6eb4815784aa..000000000000 --- a/src/backend/InvenTree/importer/api.py +++ /dev/null @@ -1,202 +0,0 @@ -"""API endpoints for the importer app.""" - -from django.shortcuts import get_object_or_404 -from django.urls import include, path - -from drf_spectacular.utils import extend_schema -from rest_framework import permissions -from rest_framework.response import Response -from rest_framework.views import APIView - -import importer.models -import importer.registry -import importer.serializers -from InvenTree.api import BulkDeleteMixin -from InvenTree.filters import SEARCH_ORDER_FILTER -from InvenTree.mixins import ( - CreateAPI, - ListAPI, - ListCreateAPI, - RetrieveUpdateAPI, - RetrieveUpdateDestroyAPI, -) - - -class DataImporterModelList(APIView): - """API endpoint for displaying a list of models available for import.""" - - permission_classes = [permissions.IsAuthenticated] - - def get(self, request): - """Return a list of models available for import.""" - models = [] - - for serializer in importer.registry.get_supported_serializers(): - model = serializer.Meta.model - url = model.get_api_url() if hasattr(model, 'get_api_url') else None - - models.append({ - 'serializer': str(serializer.__name__), - 'model_type': model.__name__.lower(), - 'api_url': url, - }) - - return Response(models) - - -class DataImportSessionList(BulkDeleteMixin, ListCreateAPI): - """API endpoint for accessing a list of DataImportSession objects.""" - - permission_classes = [permissions.IsAuthenticated] - - queryset = importer.models.DataImportSession.objects.all() - serializer_class = importer.serializers.DataImportSessionSerializer - - filter_backends = SEARCH_ORDER_FILTER - - filterset_fields = ['model_type', 'status', 'user'] - - ordering_fields = ['timestamp', 'status', 'model_type'] - - -class DataImportSessionDetail(RetrieveUpdateDestroyAPI): - """Detail endpoint for a single DataImportSession object.""" - - queryset = importer.models.DataImportSession.objects.all() - serializer_class = importer.serializers.DataImportSessionSerializer - - -class DataImportSessionAcceptFields(APIView): - """API endpoint to accept the field mapping for a DataImportSession.""" - - permission_classes = [permissions.IsAuthenticated] - - @extend_schema( - responses={200: importer.serializers.DataImportSessionSerializer(many=False)} - ) - def post(self, request, pk): - """Accept the field mapping for a DataImportSession.""" - session = get_object_or_404(importer.models.DataImportSession, pk=pk) - - # Attempt to accept the mapping (may raise an exception if the mapping is invalid) - session.accept_mapping() - - return Response(importer.serializers.DataImportSessionSerializer(session).data) - - -class DataImportSessionAcceptRows(CreateAPI): - """API endpoint to accept the rows for a DataImportSession.""" - - queryset = importer.models.DataImportSession.objects.all() - serializer_class = importer.serializers.DataImportAcceptRowSerializer - - def get_serializer_context(self): - """Add the import session object to the serializer context.""" - ctx = super().get_serializer_context() - - try: - ctx['session'] = importer.models.DataImportSession.objects.get( - pk=self.kwargs.get('pk', None) - ) - except Exception: - pass - - ctx['request'] = self.request - return ctx - - -class DataImportColumnMappingList(ListAPI): - """API endpoint for accessing a list of DataImportColumnMap objects.""" - - queryset = importer.models.DataImportColumnMap.objects.all() - serializer_class = importer.serializers.DataImportColumnMapSerializer - - filter_backends = SEARCH_ORDER_FILTER - - filterset_fields = ['session'] - - -class DataImportColumnMappingDetail(RetrieveUpdateAPI): - """Detail endpoint for a single DataImportColumnMap object.""" - - queryset = importer.models.DataImportColumnMap.objects.all() - serializer_class = importer.serializers.DataImportColumnMapSerializer - - -class DataImportRowList(BulkDeleteMixin, ListAPI): - """API endpoint for accessing a list of DataImportRow objects.""" - - queryset = importer.models.DataImportRow.objects.all() - serializer_class = importer.serializers.DataImportRowSerializer - - filter_backends = SEARCH_ORDER_FILTER - - filterset_fields = ['session', 'valid', 'complete'] - - ordering_fields = ['pk', 'row_index', 'valid'] - - ordering = 'row_index' - - -class DataImportRowDetail(RetrieveUpdateDestroyAPI): - """Detail endpoint for a single DataImportRow object.""" - - queryset = importer.models.DataImportRow.objects.all() - serializer_class = importer.serializers.DataImportRowSerializer - - -importer_api_urls = [ - path('models/', DataImporterModelList.as_view(), name='api-importer-model-list'), - path( - 'session/', - include([ - path( - '/', - include([ - path( - 'accept_fields/', - DataImportSessionAcceptFields.as_view(), - name='api-import-session-accept-fields', - ), - path( - 'accept_rows/', - DataImportSessionAcceptRows.as_view(), - name='api-import-session-accept-rows', - ), - path( - '', - DataImportSessionDetail.as_view(), - name='api-import-session-detail', - ), - ]), - ), - path('', DataImportSessionList.as_view(), name='api-importer-session-list'), - ]), - ), - path( - 'column-mapping/', - include([ - path( - '/', - DataImportColumnMappingDetail.as_view(), - name='api-importer-mapping-detail', - ), - path( - '', - DataImportColumnMappingList.as_view(), - name='api-importer-mapping-list', - ), - ]), - ), - path( - 'row/', - include([ - path( - '/', - DataImportRowDetail.as_view(), - name='api-importer-row-detail', - ), - path('', DataImportRowList.as_view(), name='api-importer-row-list'), - ]), - ), -] diff --git a/src/backend/InvenTree/importer/apps.py b/src/backend/InvenTree/importer/apps.py deleted file mode 100644 index 4b909df3d23b..000000000000 --- a/src/backend/InvenTree/importer/apps.py +++ /dev/null @@ -1,10 +0,0 @@ -"""AppConfig for the 'importer' app.""" - -from django.apps import AppConfig - - -class ImporterConfig(AppConfig): - """AppConfig class for the 'importer' app.""" - - default_auto_field = 'django.db.models.BigAutoField' - name = 'importer' diff --git a/src/backend/InvenTree/importer/migrations/0001_initial.py b/src/backend/InvenTree/importer/migrations/0001_initial.py deleted file mode 100644 index 0572c1670450..000000000000 --- a/src/backend/InvenTree/importer/migrations/0001_initial.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-30 04:42 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import importer.validators -import InvenTree.helpers -from importer.status_codes import DataImportStatusCode - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='DataImportSession', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='Timestamp')), - ('data_file', models.FileField(help_text='Data file to import', upload_to='import', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=InvenTree.helpers.GetExportFormats()), importer.validators.validate_data_file], verbose_name='Data File')), - ('columns', models.JSONField(blank=True, null=True, verbose_name='Columns')), - ('model_type', models.CharField(max_length=100, validators=[importer.validators.validate_importer_model_type])), - ('status', models.PositiveIntegerField(choices=DataImportStatusCode.items(), default=DataImportStatusCode.INITIAL.value, help_text='Import status')), - ('field_defaults', models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Defaults')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - ), - migrations.CreateModel( - name='DataImportRow', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('row_index', models.PositiveIntegerField(default=0, verbose_name='Row Index')), - ('row_data', models.JSONField(blank=True, null=True, verbose_name='Original row data')), - ('data', models.JSONField(blank=True, null=True, verbose_name='Data')), - ('errors', models.JSONField(blank=True, null=True, verbose_name='Errors')), - ('valid', models.BooleanField(default=False, verbose_name='Valid')), - ('complete', models.BooleanField(default=False, verbose_name='Complete')), - ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rows', to='importer.dataimportsession', verbose_name='Import Session')), - ], - ), - migrations.CreateModel( - name='DataImportColumnMap', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('field', models.CharField(max_length=100, verbose_name='Field')), - ('column', models.CharField(blank=True, max_length=100, verbose_name='Column')), - ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='column_mappings', to='importer.dataimportsession', verbose_name='Import Session')), - ], - ), - ] diff --git a/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py b/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py deleted file mode 100644 index 9d00ce956b4d..000000000000 --- a/src/backend/InvenTree/importer/migrations/0002_dataimportsession_field_overrides.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.14 on 2024-07-12 03:35 - -from django.db import migrations, models -import importer.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('importer', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='dataimportsession', - name='field_overrides', - field=models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Overrides'), - ), - ] diff --git a/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py b/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py deleted file mode 100644 index b5663a5e31e5..000000000000 --- a/src/backend/InvenTree/importer/migrations/0003_dataimportsession_field_filters.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.14 on 2024-07-16 03:04 - -from django.db import migrations, models -import importer.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('importer', '0002_dataimportsession_field_overrides'), - ] - - operations = [ - migrations.AddField( - model_name='dataimportsession', - name='field_filters', - field=models.JSONField(blank=True, null=True, validators=[importer.validators.validate_field_defaults], verbose_name='Field Filters'), - ), - ] diff --git a/src/backend/InvenTree/importer/mixins.py b/src/backend/InvenTree/importer/mixins.py deleted file mode 100644 index e0e064afc43e..000000000000 --- a/src/backend/InvenTree/importer/mixins.py +++ /dev/null @@ -1,267 +0,0 @@ -"""Mixin classes for data import/export functionality.""" - -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -import tablib -from rest_framework import fields, serializers - -import importer.operations -from InvenTree.helpers import DownloadFile, GetExportFormats, current_date - - -class DataImportSerializerMixin: - """Mixin class for adding data import functionality to a DRF serializer.""" - - import_only_fields = [] - import_exclude_fields = [] - - def get_import_only_fields(self, **kwargs) -> list: - """Return the list of field names which are only used during data import.""" - return self.import_only_fields - - def get_import_exclude_fields(self, **kwargs) -> list: - """Return the list of field names which are excluded during data import.""" - return self.import_exclude_fields - - def __init__(self, *args, **kwargs): - """Initialise the DataImportSerializerMixin. - - Determine if the serializer is being used for data import, - and if so, adjust the serializer fields accordingly. - """ - importing = kwargs.pop('importing', False) - - super().__init__(*args, **kwargs) - - if importing: - # Exclude any fields which are not able to be imported - importable_field_names = list(self.get_importable_fields().keys()) - field_names = list(self.fields.keys()) - - for field in field_names: - if field not in importable_field_names: - self.fields.pop(field, None) - - # Exclude fields which are excluded for data import - for field in self.get_import_exclude_fields(**kwargs): - self.fields.pop(field, None) - - else: - # Exclude fields which are only used for data import - for field in self.get_import_only_fields(**kwargs): - self.fields.pop(field, None) - - def get_importable_fields(self) -> dict: - """Return a dict of fields which can be imported against this serializer instance. - - Returns: - dict: A dictionary of field names and field objects - """ - importable_fields = {} - - if meta := getattr(self, 'Meta', None): - read_only_fields = getattr(meta, 'read_only_fields', []) - else: - read_only_fields = [] - - for name, field in self.fields.items(): - # Skip read-only fields - if getattr(field, 'read_only', False): - continue - - if name in read_only_fields: - continue - - # Skip fields which are themselves serializers - if issubclass(field.__class__, serializers.Serializer): - continue - - # Skip file fields - if issubclass(field.__class__, fields.FileField): - continue - - importable_fields[name] = field - - return importable_fields - - -class DataExportSerializerMixin: - """Mixin class for adding data export functionality to a DRF serializer.""" - - export_only_fields = [] - export_exclude_fields = [] - - def get_export_only_fields(self, **kwargs) -> list: - """Return the list of field names which are only used during data export.""" - return self.export_only_fields - - def get_export_exclude_fields(self, **kwargs) -> list: - """Return the list of field names which are excluded during data export.""" - return self.export_exclude_fields - - def __init__(self, *args, **kwargs): - """Initialise the DataExportSerializerMixin. - - Determine if the serializer is being used for data export, - and if so, adjust the serializer fields accordingly. - """ - exporting = kwargs.pop('exporting', False) - - super().__init__(*args, **kwargs) - - if exporting: - # Exclude fields which are not required for data export - for field in self.get_export_exclude_fields(**kwargs): - self.fields.pop(field, None) - else: - # Exclude fields which are only used for data export - for field in self.get_export_only_fields(**kwargs): - self.fields.pop(field, None) - - def get_exportable_fields(self) -> dict: - """Return a dict of fields which can be exported against this serializer instance. - - Note: Any fields which should be excluded from export have already been removed - - Returns: - dict: A dictionary of field names and field objects - """ - fields = {} - - if meta := getattr(self, 'Meta', None): - write_only_fields = getattr(meta, 'write_only_fields', []) - else: - write_only_fields = [] - - for name, field in self.fields.items(): - # Skip write-only fields - if getattr(field, 'write_only', False): - continue - - if name in write_only_fields: - continue - - # Skip fields which are themselves serializers - if issubclass(field.__class__, serializers.Serializer): - continue - - fields[name] = field - - return fields - - def get_exported_filename(self, export_format) -> str: - """Return the filename for the exported data file. - - An implementing class can override this implementation if required. - - Arguments: - export_format: The file format to be exported - - Returns: - str: The filename for the exported file - """ - model = self.Meta.model - date = current_date().isoformat() - - return f'InvenTree_{model.__name__}_{date}.{export_format}' - - @classmethod - def arrange_export_headers(cls, headers: list) -> list: - """Optional method to arrange the export headers.""" - return headers - - def process_row(self, row): - """Optional method to process a row before exporting it.""" - return row - - def export_to_file(self, data, file_format): - """Export the queryset to a file in the specified format. - - Arguments: - queryset: The queryset to export - data: The serialized dataset to export - file_format: The file format to export to - - Returns: - File object containing the exported data - """ - # Extract all exportable fields from this serializer - fields = self.get_exportable_fields() - - field_names = self.arrange_export_headers(list(fields.keys())) - - # Extract human-readable field names - headers = [] - - for field_name, field in fields.items(): - field = fields[field_name] - - headers.append(importer.operations.get_field_label(field) or field_name) - - dataset = tablib.Dataset(headers=headers) - - for row in data: - row = self.process_row(row) - dataset.append([row.get(field, None) for field in field_names]) - - return dataset.export(file_format) - - -class DataImportExportSerializerMixin( - DataImportSerializerMixin, DataExportSerializerMixin -): - """Mixin class for adding data import/export functionality to a DRF serializer.""" - - pass - - -class DataExportViewMixin: - """Mixin class for exporting a dataset via the API. - - Adding this mixin to an API view allows the user to export the dataset to file in a variety of formats. - - We achieve this by overriding the 'get' method, and checking for the presence of the required query parameter. - """ - - EXPORT_QUERY_PARAMETER = 'export' - - def export_data(self, export_format): - """Export the data in the specified format. - - Use the provided serializer to generate the data, and return it as a file download. - """ - serializer_class = self.get_serializer_class() - - if not issubclass(serializer_class, DataExportSerializerMixin): - raise TypeError( - 'Serializer class must inherit from DataExportSerialierMixin' - ) - - queryset = self.filter_queryset(self.get_queryset()) - - serializer = serializer_class(exporting=True) - serializer.initial_data = queryset - - # Export dataset with a second copy of the serializer - # This is because when we pass many=True, the returned class is a ListSerializer - data = serializer_class(queryset, many=True, exporting=True).data - - filename = serializer.get_exported_filename(export_format) - datafile = serializer.export_to_file(data, export_format) - - return DownloadFile(datafile, filename=filename) - - def get(self, request, *args, **kwargs): - """Override the 'get' method to check for the export query parameter.""" - if export_format := request.query_params.get(self.EXPORT_QUERY_PARAMETER, None): - export_format = str(export_format).strip().lower() - if export_format in GetExportFormats(): - return self.export_data(export_format) - else: - raise ValidationError({ - self.EXPORT_QUERY_PARAMETER: _('Invalid export format') - }) - - # If the export query parameter is not present, return the default response - return super().get(request, *args, **kwargs) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py deleted file mode 100644 index 219e1ac60003..000000000000 --- a/src/backend/InvenTree/importer/models.py +++ /dev/null @@ -1,659 +0,0 @@ -"""Model definitions for the 'importer' app.""" - -import json -import logging - -from django.contrib.auth.models import User -from django.core.exceptions import ValidationError as DjangoValidationError -from django.core.validators import FileExtensionValidator -from django.db import models -from django.urls import reverse -from django.utils.translation import gettext_lazy as _ - -from rest_framework.exceptions import ValidationError as DRFValidationError - -import importer.operations -import importer.registry -import importer.tasks -import importer.validators -import InvenTree.helpers -from importer.status_codes import DataImportStatusCode - -logger = logging.getLogger('inventree') - - -class DataImportSession(models.Model): - """Database model representing a data import session. - - An initial file is uploaded, and used to populate the database. - - Fields: - timestamp: Timestamp for the import session - data_file: FileField for the data file to import - status: IntegerField for the status of the import session - user: ForeignKey to the User who initiated the import - field_defaults: JSONField for field default values - provides a backup value for a field - field_overrides: JSONField for field override values - used to force a value for a field - field_filters: JSONField for field filter values - optional field API filters - """ - - @staticmethod - def get_api_url(): - """Return the API URL associated with the DataImportSession model.""" - return reverse('api-importer-session-list') - - def save(self, *args, **kwargs): - """Save the DataImportSession object.""" - initial = self.pk is None - - self.clean() - - super().save(*args, **kwargs) - - if initial: - # New object - run initial setup - self.status = DataImportStatusCode.INITIAL.value - self.progress = 0 - self.extract_columns() - - timestamp = models.DateTimeField(auto_now_add=True, verbose_name=_('Timestamp')) - - data_file = models.FileField( - upload_to='import', - verbose_name=_('Data File'), - help_text=_('Data file to import'), - validators=[ - FileExtensionValidator( - allowed_extensions=InvenTree.helpers.GetExportFormats() - ), - importer.validators.validate_data_file, - ], - ) - - columns = models.JSONField(blank=True, null=True, verbose_name=_('Columns')) - - model_type = models.CharField( - blank=False, - max_length=100, - validators=[importer.validators.validate_importer_model_type], - ) - - status = models.PositiveIntegerField( - default=DataImportStatusCode.INITIAL.value, - choices=DataImportStatusCode.items(), - help_text=_('Import status'), - ) - - user = models.ForeignKey( - User, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('User') - ) - - field_defaults = models.JSONField( - blank=True, - null=True, - verbose_name=_('Field Defaults'), - validators=[importer.validators.validate_field_defaults], - ) - - field_overrides = models.JSONField( - blank=True, - null=True, - verbose_name=_('Field Overrides'), - validators=[importer.validators.validate_field_defaults], - ) - - field_filters = models.JSONField( - blank=True, - null=True, - verbose_name=_('Field Filters'), - validators=[importer.validators.validate_field_defaults], - ) - - @property - def field_mapping(self): - """Construct a dict of field mappings for this import session. - - Returns: A dict of field: column mappings - """ - mapping = {} - - for map in self.column_mappings.all(): - mapping[map.field] = map.column - - return mapping - - @property - def serializer_class(self): - """Return the serializer class for this importer.""" - from importer.registry import supported_models - - return supported_models().get(self.model_type, None) - - def extract_columns(self): - """Run initial column extraction and mapping. - - This method is called when the import session is first created. - - - Extract column names from the data file - - Create a default mapping for each field in the serializer - """ - # Extract list of column names from the file - self.columns = importer.operations.extract_column_names(self.data_file) - - serializer_fields = self.available_fields() - - # Remove any existing mappings - self.column_mappings.all().delete() - - column_mappings = [] - - matched_columns = set() - - field_overrides = self.field_overrides or {} - - # Create a default mapping for each available field in the database - for field, field_def in serializer_fields.items(): - # If an override value is provided for the field, - # skip creating a mapping for this field - if field in field_overrides: - continue - - # Generate a list of possible column names for this field - field_options = [ - field, - field_def.get('label', field), - field_def.get('help_text', field), - ] - column_name = '' - - for column in self.columns: - # No title provided for the column - if not column: - continue - - # Ignore if we have already matched this column to a field - if column in matched_columns: - continue - - # Try direct match - if column in field_options: - column_name = column - break - - # Try lower case match - if column.lower() in [f.lower() for f in field_options]: - column_name = column - break - - column_mappings.append( - DataImportColumnMap(session=self, column=column_name, field=field) - ) - - # Create the column mappings - DataImportColumnMap.objects.bulk_create(column_mappings) - - self.status = DataImportStatusCode.MAPPING.value - self.save() - - def accept_mapping(self): - """Accept current mapping configuration. - - - Validate that the current column mapping is correct - - Trigger the data import process - """ - # First, we need to ensure that all the *required* columns have been mapped - required_fields = self.required_fields() - - field_defaults = self.field_defaults or {} - field_overrides = self.field_overrides or {} - - missing_fields = [] - - for field in required_fields.keys(): - # An override value exists - if field in field_overrides: - continue - - # A default value exists - if field in field_defaults and field_defaults[field]: - continue - - # The field has been mapped to a data column - if mapping := self.column_mappings.filter(field=field).first(): - if mapping.column: - continue - - missing_fields.append(field) - - if len(missing_fields) > 0: - raise DjangoValidationError({ - 'error': _('Some required fields have not been mapped'), - 'fields': missing_fields, - }) - - # No errors, so trigger the data import process - self.trigger_data_import() - - def trigger_data_import(self): - """Trigger the data import process for this session. - - Offloads the task to the background worker process. - """ - from InvenTree.tasks import offload_task - - # Mark the import task status as "IMPORTING" - self.status = DataImportStatusCode.IMPORTING.value - self.save() - - offload_task(importer.tasks.import_data, self.pk) - - def import_data(self): - """Perform the data import process for this session.""" - # Clear any existing data rows - self.rows.all().delete() - - df = importer.operations.load_data_file(self.data_file) - - if df is None: - # TODO: Log an error message against the import session - logger.error('Failed to load data file') - return - - headers = df.headers - - imported_rows = [] - - field_mapping = self.field_mapping - available_fields = self.available_fields() - - # Iterate through each "row" in the data file, and create a new DataImportRow object - for idx, row in enumerate(df): - row_data = dict(zip(headers, row)) - - # Skip completely empty rows - if not any(row_data.values()): - continue - - row = importer.models.DataImportRow( - session=self, row_data=row_data, row_index=idx - ) - - row.extract_data( - field_mapping=field_mapping, - available_fields=available_fields, - commit=False, - ) - - row.valid = row.validate(commit=False) - imported_rows.append(row) - - # Perform database writes as a single operation - importer.models.DataImportRow.objects.bulk_create(imported_rows) - - # Mark the import task as "PROCESSING" - self.status = DataImportStatusCode.PROCESSING.value - self.save() - - def check_complete(self) -> bool: - """Check if the import session is complete.""" - if self.completed_row_count < self.row_count: - return False - - # Update the status of this session - if self.status != DataImportStatusCode.COMPLETE.value: - self.status = DataImportStatusCode.COMPLETE.value - self.save() - - return True - - @property - def row_count(self): - """Return the number of rows in the import session.""" - return self.rows.count() - - @property - def completed_row_count(self): - """Return the number of completed rows for this session.""" - return self.rows.filter(complete=True).count() - - def available_fields(self): - """Returns information on the available fields. - - - This method is designed to be introspected by the frontend, for rendering the various fields. - - We make use of the InvenTree.metadata module to provide extra information about the fields. - - Note that we cache these fields, as they are expensive to compute. - """ - if fields := getattr(self, '_available_fields', None): - return fields - - from InvenTree.metadata import InvenTreeMetadata - - metadata = InvenTreeMetadata() - - if serializer_class := self.serializer_class: - serializer = serializer_class(data={}, importing=True) - fields = metadata.get_serializer_info(serializer) - else: - fields = {} - - self._available_fields = fields - return fields - - def required_fields(self): - """Returns information on which fields are *required* for import.""" - fields = self.available_fields() - - required = {} - - for field, info in fields.items(): - if info.get('required', False): - required[field] = info - - return required - - -class DataImportColumnMap(models.Model): - """Database model representing a mapping between a file column and serializer field. - - - Each row maps a "column" (in the import file) to a "field" (in the serializer) - - Column must exist in the file - - Field must exist in the serializer (and not be read-only) - """ - - @staticmethod - def get_api_url(): - """Return the API URL associated with the DataImportColumnMap model.""" - return reverse('api-importer-mapping-list') - - def save(self, *args, **kwargs): - """Save the DataImportColumnMap object.""" - self.clean() - self.validate_unique() - - super().save(*args, **kwargs) - - def validate_unique(self, exclude=None): - """Ensure that the column mapping is unique within the session.""" - super().validate_unique(exclude) - - columns = self.session.column_mappings.exclude(pk=self.pk) - - if ( - self.column not in ['', None] - and columns.filter(column=self.column).exists() - ): - raise DjangoValidationError({ - 'column': _('Column is already mapped to a database field') - }) - - if columns.filter(field=self.field).exists(): - raise DjangoValidationError({ - 'field': _('Field is already mapped to a data column') - }) - - def clean(self): - """Validate the column mapping.""" - super().clean() - - if not self.session: - raise DjangoValidationError({ - 'session': _('Column mapping must be linked to a valid import session') - }) - - if self.column and self.column not in self.session.columns: - raise DjangoValidationError({ - 'column': _('Column does not exist in the data file') - }) - - field_def = self.field_definition - - if not field_def: - raise DjangoValidationError({ - 'field': _('Field does not exist in the target model') - }) - - if field_def.get('read_only', False): - raise DjangoValidationError({'field': _('Selected field is read-only')}) - - session = models.ForeignKey( - DataImportSession, - on_delete=models.CASCADE, - verbose_name=_('Import Session'), - related_name='column_mappings', - ) - - field = models.CharField(max_length=100, verbose_name=_('Field')) - - column = models.CharField(blank=True, max_length=100, verbose_name=_('Column')) - - @property - def available_fields(self): - """Return a list of available fields for this import session. - - These fields get cached, as they are expensive to compute. - """ - if fields := getattr(self, '_available_fields', None): - return fields - - self._available_fields = self.session.available_fields() - - return self._available_fields - - @property - def field_definition(self): - """Return the field definition associated with this column mapping.""" - fields = self.available_fields - return fields.get(self.field, None) - - @property - def label(self): - """Extract the 'label' associated with the mapped field.""" - if field_def := self.field_definition: - return field_def.get('label', None) - - @property - def description(self): - """Extract the 'description' associated with the mapped field.""" - description = None - - if field_def := self.field_definition: - description = field_def.get('help_text', None) - - if not description: - description = self.label - - return description - - -class DataImportRow(models.Model): - """Database model representing a single row in a data import session. - - Each row corresponds to a single row in the import file, and is used to populate the database. - - Fields: - session: ForeignKey to the parent DataImportSession object - data: JSONField for the data in this row - status: IntegerField for the status of the row import - """ - - @staticmethod - def get_api_url(): - """Return the API URL associated with the DataImportRow model.""" - return reverse('api-importer-row-list') - - def save(self, *args, **kwargs): - """Save the DataImportRow object.""" - self.valid = self.validate() - super().save(*args, **kwargs) - - session = models.ForeignKey( - DataImportSession, - on_delete=models.CASCADE, - verbose_name=_('Import Session'), - related_name='rows', - ) - - row_index = models.PositiveIntegerField(default=0, verbose_name=_('Row Index')) - - row_data = models.JSONField( - blank=True, null=True, verbose_name=_('Original row data') - ) - - data = models.JSONField(blank=True, null=True, verbose_name=_('Data')) - - errors = models.JSONField(blank=True, null=True, verbose_name=_('Errors')) - - valid = models.BooleanField(default=False, verbose_name=_('Valid')) - - complete = models.BooleanField(default=False, verbose_name=_('Complete')) - - @property - def default_values(self) -> dict: - """Return a dict object of the 'default' values for this row.""" - defaults = self.session.field_defaults or {} - - if type(defaults) is not dict: - try: - defaults = json.loads(str(defaults)) - except json.JSONDecodeError: - logger.warning('Failed to parse default values for import row') - defaults = {} - - return defaults - - @property - def override_values(self) -> dict: - """Return a dict object of the 'override' values for this row.""" - overrides = self.session.field_overrides or {} - - if type(overrides) is not dict: - try: - overrides = json.loads(str(overrides)) - except json.JSONDecodeError: - logger.warning('Failed to parse override values for import row') - overrides = {} - - return overrides - - def extract_data( - self, available_fields: dict = None, field_mapping: dict = None, commit=True - ): - """Extract row data from the provided data dictionary.""" - if not field_mapping: - field_mapping = self.session.field_mapping - - if not available_fields: - available_fields = self.session.available_fields() - - overrride_values = self.override_values - default_values = self.default_values - - data = {} - - # We have mapped column (file) to field (serializer) already - for field, col in field_mapping.items(): - # Data override (force value and skip any further checks) - if field in overrride_values: - data[field] = overrride_values[field] - continue - - # Default value (if provided) - if field in default_values: - data[field] = default_values[field] - - # If this field is *not* mapped to any column, skip - if not col or col not in self.row_data: - continue - - # Extract field type - field_def = available_fields.get(field, {}) - - field_type = field_def.get('type', None) - - value = self.row_data.get(col, None) - - if field_type == 'boolean': - value = InvenTree.helpers.str2bool(value) - elif field_type == 'date': - value = value or None - - # Use the default value, if provided - if value in [None, ''] and field in default_values: - value = default_values[field] - - data[field] = value - - self.data = data - - if commit: - self.save() - - def serializer_data(self): - """Construct data object to be sent to the serializer. - - - If available, we use the "default" values provided by the import session - - If available, we use the "override" values provided by the import session - """ - data = self.default_values - - if self.data: - data.update(self.data) - - # Override values take priority, if present - data.update(self.override_values) - - return data - - def construct_serializer(self): - """Construct a serializer object for this row.""" - if serializer_class := self.session.serializer_class: - return serializer_class(data=self.serializer_data()) - - def validate(self, commit=False) -> bool: - """Validate the data in this row against the linked serializer. - - Arguments: - commit: If True, the data is saved to the database (if validation passes) - - Returns: - True if the data is valid, False otherwise - - Raises: - ValidationError: If the linked serializer is not valid - """ - if self.complete: - # Row has already been completed - return True - - serializer = self.construct_serializer() - - if not serializer: - self.errors = { - 'non_field_errors': 'No serializer class linked to this import session' - } - return False - - result = False - - try: - result = serializer.is_valid(raise_exception=True) - except (DjangoValidationError, DRFValidationError) as e: - self.errors = e.detail - - if result: - self.errors = None - - if commit: - try: - serializer.save() - self.complete = True - self.save() - - self.session.check_complete() - - except Exception as e: - self.errors = {'non_field_errors': str(e)} - result = False - - return result diff --git a/src/backend/InvenTree/importer/operations.py b/src/backend/InvenTree/importer/operations.py deleted file mode 100644 index 7b9806d07b56..000000000000 --- a/src/backend/InvenTree/importer/operations.py +++ /dev/null @@ -1,122 +0,0 @@ -"""Data import operational functions.""" - -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -import tablib - -import InvenTree.helpers - - -def load_data_file(data_file, file_format=None): - """Load data file into a tablib dataset. - - Arguments: - data_file: django file object containing data to import (should be already opened!) - file_format: Format specifier for the data file - """ - # Introspect the file format based on the provided file - if not file_format: - file_format = data_file.name.split('.')[-1] - - if file_format and file_format.startswith('.'): - file_format = file_format[1:] - - file_format = file_format.strip().lower() - - if file_format not in InvenTree.helpers.GetExportFormats(): - raise ValidationError(_('Unsupported data file format')) - - file_object = data_file.file - - if hasattr(file_object, 'open'): - file_object.open('r') - - file_object.seek(0) - - try: - data = file_object.read() - except (IOError, FileNotFoundError): - raise ValidationError(_('Failed to open data file')) - - # Excel formats expect binary data - if file_format not in ['xls', 'xlsx']: - data = data.decode() - - try: - data = tablib.Dataset().load(data, headers=True, format=file_format) - except tablib.core.UnsupportedFormat: - raise ValidationError(_('Unsupported data file format')) - except tablib.core.InvalidDimensions: - raise ValidationError(_('Invalid data file dimensions')) - - return data - - -def extract_column_names(data_file) -> list: - """Extract column names from a data file. - - Uses the tablib library to extract column names from a data file. - - Args: - data_file: File object containing data to import - - Returns: - List of column names extracted from the file - - Raises: - ValidationError: If the data file is not in a valid format - """ - data = load_data_file(data_file) - - headers = [] - - for idx, header in enumerate(data.headers): - if header: - headers.append(header) - else: - # If the header is empty, generate a default header - headers.append(f'Column {idx + 1}') - - return headers - - -def extract_rows(data_file) -> list: - """Extract rows from the data file. - - Each returned row is a dictionary of column_name: value pairs. - """ - data = load_data_file(data_file) - - headers = data.headers - - rows = [] - - for row in data: - rows.append(dict(zip(headers, row))) - - return rows - - -def get_field_label(field) -> str: - """Return the label for a field in a serializer class. - - Check for labels in the following order of descending priority: - - - The serializer class has a 'label' specified for the field - - The underlying model has a 'verbose_name' specified - - The field name is used as the label - - Arguments: - field: Field instance from a serializer class - - Returns: - str: Field label - """ - if field: - if label := getattr(field, 'label', None): - return label - - # TODO: Check if the field is a model field - - return None diff --git a/src/backend/InvenTree/importer/registry.py b/src/backend/InvenTree/importer/registry.py deleted file mode 100644 index 2614c29ea5de..000000000000 --- a/src/backend/InvenTree/importer/registry.py +++ /dev/null @@ -1,72 +0,0 @@ -"""Registry for supported serializers for data import operations.""" - -import logging - -from rest_framework.serializers import Serializer - -from importer.mixins import DataImportSerializerMixin - -logger = logging.getLogger('inventree') - - -class DataImportSerializerRegister: - """Registry for supported serializers for data import operations. - - To add a new serializer to the registry, add the @register_importer decorator to the serializer class. - """ - - supported_serializers: list[Serializer] = [] - - def register(self, serializer) -> None: - """Register a new serializer with the importer registry.""" - if not issubclass(serializer, DataImportSerializerMixin): - logger.debug('Invalid serializer class: %s', type(serializer)) - return - - if not issubclass(serializer, Serializer): - logger.debug('Invalid serializer class: %s', type(serializer)) - return - - logger.debug('Registering serializer class for import: %s', type(serializer)) - - if serializer not in self.supported_serializers: - self.supported_serializers.append(serializer) - - -_serializer_registry = DataImportSerializerRegister() - - -def get_supported_serializers(): - """Return a list of supported serializers which can be used for importing data.""" - return _serializer_registry.supported_serializers - - -def supported_models(): - """Return a map of supported models to their respective serializers.""" - data = {} - - for serializer in get_supported_serializers(): - model = serializer.Meta.model - data[model.__name__.lower()] = serializer - - return data - - -def supported_model_options(): - """Return a list of supported model options for importing data.""" - options = [] - - for model_name, serializer in supported_models().items(): - options.append((model_name, serializer.Meta.model._meta.verbose_name)) - - return options - - -def register_importer(): - """Decorator function to register a serializer with the importer registry.""" - - def _decorator(cls): - _serializer_registry.register(cls) - return cls - - return _decorator diff --git a/src/backend/InvenTree/importer/serializers.py b/src/backend/InvenTree/importer/serializers.py deleted file mode 100644 index ac68056f55e5..000000000000 --- a/src/backend/InvenTree/importer/serializers.py +++ /dev/null @@ -1,216 +0,0 @@ -"""API serializers for the importer app.""" - -import json - -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -from rest_framework import serializers - -import importer.models -import importer.registry -from InvenTree.serializers import ( - InvenTreeAttachmentSerializerField, - InvenTreeModelSerializer, - UserSerializer, -) - - -class DataImportColumnMapSerializer(InvenTreeModelSerializer): - """Serializer for the DataImportColumnMap model.""" - - class Meta: - """Meta class options for the serializer.""" - - model = importer.models.DataImportColumnMap - fields = ['pk', 'session', 'column', 'field', 'label', 'description'] - read_only_fields = ['field', 'session'] - - label = serializers.CharField(read_only=True) - description = serializers.CharField(read_only=True) - - -class DataImportSessionSerializer(InvenTreeModelSerializer): - """Serializer for the DataImportSession model.""" - - class Meta: - """Meta class options for the serializer.""" - - model = importer.models.DataImportSession - fields = [ - 'pk', - 'timestamp', - 'data_file', - 'model_type', - 'available_fields', - 'status', - 'user', - 'user_detail', - 'columns', - 'column_mappings', - 'field_defaults', - 'field_overrides', - 'field_filters', - 'row_count', - 'completed_row_count', - ] - read_only_fields = ['pk', 'user', 'status', 'columns'] - - def __init__(self, *args, **kwargs): - """Override the constructor for the DataImportSession serializer.""" - super().__init__(*args, **kwargs) - - self.fields['model_type'].choices = importer.registry.supported_model_options() - - data_file = InvenTreeAttachmentSerializerField() - - model_type = serializers.ChoiceField( - required=True, - allow_blank=False, - choices=importer.registry.supported_model_options(), - ) - - available_fields = serializers.JSONField(read_only=True) - - row_count = serializers.IntegerField(read_only=True) - completed_row_count = serializers.IntegerField(read_only=True) - - column_mappings = DataImportColumnMapSerializer(many=True, read_only=True) - - user_detail = UserSerializer(source='user', read_only=True, many=False) - - def validate_field_defaults(self, defaults): - """De-stringify the field defaults.""" - if defaults is None: - return None - - if type(defaults) is not dict: - try: - defaults = json.loads(str(defaults)) - except: - raise ValidationError(_('Invalid field defaults')) - - return defaults - - def validate_field_overrides(self, overrides): - """De-stringify the field overrides.""" - if overrides is None: - return None - - if type(overrides) is not dict: - try: - overrides = json.loads(str(overrides)) - except: - raise ValidationError(_('Invalid field overrides')) - - return overrides - - def validate_field_filters(self, filters): - """De-stringify the field filters.""" - if filters is None: - return None - - if type(filters) is not dict: - try: - filters = json.loads(str(filters)) - except: - raise ValidationError(_('Invalid field filters')) - - return filters - - def create(self, validated_data): - """Override create method for this serializer. - - Attach user information based on provided session data. - """ - session = super().create(validated_data) - - request = self.context.get('request', None) - - if request: - session.user = request.user - session.save() - - return session - - -class DataImportRowSerializer(InvenTreeModelSerializer): - """Serializer for the DataImportRow model.""" - - class Meta: - """Meta class options for the serializer.""" - - model = importer.models.DataImportRow - fields = [ - 'pk', - 'session', - 'row_index', - 'row_data', - 'data', - 'errors', - 'valid', - 'complete', - ] - - read_only_fields = [ - 'pk', - 'session', - 'row_index', - 'row_data', - 'errors', - 'valid', - 'complete', - ] - - -class DataImportAcceptRowSerializer(serializers.Serializer): - """Serializer for accepting rows of data.""" - - class Meta: - """Serializer meta options.""" - - fields = ['rows'] - - rows = serializers.PrimaryKeyRelatedField( - queryset=importer.models.DataImportRow.objects.all(), - many=True, - required=True, - label=_('Rows'), - help_text=_('List of row IDs to accept'), - ) - - def validate_rows(self, rows): - """Ensure that the provided rows are valid. - - - Row must point to the same import session - - Row must contain valid data - - Row must not have already been completed - """ - session = self.context.get('session', None) - - if not rows or len(rows) == 0: - raise ValidationError(_('No rows provided')) - - for row in rows: - if row.session != session: - raise ValidationError(_('Row does not belong to this session')) - - if not row.valid: - raise ValidationError(_('Row contains invalid data')) - - if row.complete: - raise ValidationError(_('Row has already been completed')) - - return rows - - def save(self): - """Complete the provided rows.""" - rows = self.validated_data['rows'] - - for row in rows: - row.validate(commit=True) - - if session := self.context.get('session', None): - session.check_complete() - - return rows diff --git a/src/backend/InvenTree/importer/status_codes.py b/src/backend/InvenTree/importer/status_codes.py deleted file mode 100644 index 2a884cec1775..000000000000 --- a/src/backend/InvenTree/importer/status_codes.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Status codes for common model types.""" - -from django.utils.translation import gettext_lazy as _ - -from generic.states import ColorEnum, StatusCode - - -class DataImportStatusCode(StatusCode): - """Defines a set of status codes for a DataImportSession.""" - - INITIAL = ( - 0, - _('Initializing'), - ColorEnum.secondary, - ) # Import session has been created - MAPPING = ( - 10, - _('Mapping Columns'), - ColorEnum.primary, - ) # Import fields are being mapped - IMPORTING = 20, _('Importing Data'), ColorEnum.primary # Data is being imported - PROCESSING = ( - 30, - _('Processing Data'), - ColorEnum.primary, - ) # Data is being processed by the user - COMPLETE = 40, _('Complete'), ColorEnum.success # Import has been completed diff --git a/src/backend/InvenTree/importer/tasks.py b/src/backend/InvenTree/importer/tasks.py deleted file mode 100644 index 0a6e38f123ce..000000000000 --- a/src/backend/InvenTree/importer/tasks.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Task definitions for the 'importer' app.""" - -import logging -from datetime import timedelta - -import InvenTree.helpers -import InvenTree.tasks - -logger = logging.getLogger('inventree') - - -def import_data(session_id: int): - """Load data from the provided file. - - Attempt to load data from the provided file, and potentially handle any errors. - """ - import importer.models - import importer.operations - import importer.status_codes - - try: - session = importer.models.DataImportSession.objects.get(pk=session_id) - logger.info("Loading data from session ID '%s'", session_id) - session.import_data() - except (ValueError, importer.models.DataImportSession.DoesNotExist): - logger.error("Data import session with ID '%s' does not exist", session_id) - return - - -@InvenTree.tasks.scheduled_task(InvenTree.tasks.ScheduledTask.DAILY) -def cleanup_import_sessions(): - """Periodically remove old import sessions. - - Every 5 days, remove any importer sessions that are more than 5 days old - """ - CLEANUP_DAYS = 5 - - import importer.models - - if not InvenTree.tasks.check_daily_holdoff('cleanup_import_sessions', CLEANUP_DAYS): - return - - logger.info('Cleaning old data import sessions') - - before = InvenTree.helpers.current_date() - timedelta(days=CLEANUP_DAYS) - - sessions = importer.models.DataImportSession.objects.filter(timestamp__lte=before) - - if sessions.count() > 0: - logger.info('Deleting %s old data import sessions', sessions.count()) - sessions.delete() - - InvenTree.tasks.record_task_success('cleanup_import_sessions') diff --git a/src/backend/InvenTree/importer/test_data/companies.csv b/src/backend/InvenTree/importer/test_data/companies.csv deleted file mode 100644 index 8e5468b25b82..000000000000 --- a/src/backend/InvenTree/importer/test_data/companies.csv +++ /dev/null @@ -1,13 +0,0 @@ -ID,Company name,Company description,Website,Phone number,Address,Email,Currency,Contact,Link,Image,Active,Is customer,Is manufacturer,Is supplier,Notes,Parts supplied,Parts manufactured,Address count -3,Arrow,Arrow Electronics,https://www.arrow.com/,,"70680 Shannon Rapid Apt. 570, 96124, Jenniferport, Arkansas, Holy See (Vatican City State)",,AUD,,,/media/company_images/company_3_img.jpg,True,False,False,True,,60,0,2 -1,DigiKey,DigiKey Electronics,https://www.digikey.com/,,"04964 Cox View Suite 815, 94832, Wesleyport, Delaware, Bolivia",,USD,,,/media/company_images/company_1_img.jpg,True,False,False,True,,200,0,2 -41,Future,Electronic components distributor,https://www.futureelectronics.com/,,"Wogan Terrace 79, 20157, Teasdale, Lebanon",,USD,,,/media/company_images/company_41_img.png,True,False,False,True,,60,0,4 -39,LCSC,Electronic components distributor,https://lcsc.com/,,"77673 Bishop Turnpike, 74969, North Cheryl, Hawaii, Portugal",,USD,,,/media/company_images/company_39_img.webp,True,False,False,True,,60,0,2 -38,McMaster-Carr,Supplier of mechanical components,https://www.mcmaster.com/,,"Schroeders Avenue 56, 8014, Sylvanite, Cayman Islands",,USD,,,/media/company_images/company_38_img.png,True,False,False,True,,240,0,1 -2,Mouser,Mouser Electronics,https://mouser.com/,,"Ashford Street 71, 24165, Leland, Jamaica",,AUD,,,/media/company_images/company_2_img.jpg,True,False,False,True,,61,0,2 -40,Newark,Online distributor of electronic components,https://www.newark.com/,,"Dekoven Court 3, 18301, Emison, Tuvalu",,USD,,,/media/company_images/company_40_img.png,True,False,False,True,,60,0,1 -36,Paint by Numbers,Supplier of high quality paint,,,"Orient Avenue 59, 18609, Corinne, Alabama, France, Metropolitan",,EUR,Pippy Painter,,/media/company_images/company_36_img.jpg,True,False,False,True,,15,0,1 -43,PCBWOY,PCB fabricator / supplier,,,"McKibben Street 77, 12370, Russellville, Benin",,USD,,,/media/company_images/company_43_img.png,True,False,False,True,,1,0,2 -29,Texas Instruments,,https://www.ti.com/,,"264 David Villages, 97718, Lake Michael, New Mexico, Kenya",,USD,,,/media/company_images/company_29_img.jpg,True,False,True,True,,0,1,2 -44,Wire-E-Coyote,American wire supplier,,,"Fountain Avenue 74, 12115, Gulf, Seychelles",,USD,,,,True,False,False,True,,5,0,3 -42,Wirey,Supplier of wire,,,"Preston Court 80, 4462, Manila, Russian Federation",,USD,,,/media/company_images/company_42_img.jpg,True,False,False,True,,11,0,2 diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py deleted file mode 100644 index 179d36dad990..000000000000 --- a/src/backend/InvenTree/importer/tests.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Unit tests for the 'importer' app.""" - -import os - -from django.core.files.base import ContentFile - -from importer.models import DataImportSession -from InvenTree.unit_test import InvenTreeTestCase - - -class ImporterTest(InvenTreeTestCase): - """Basic tests for file imports.""" - - def test_import_session(self): - """Test creation of a data import session.""" - from company.models import Company - - n = Company.objects.count() - - fn = os.path.join(os.path.dirname(__file__), 'test_data', 'companies.csv') - - with open(fn, 'r') as input_file: - data = input_file.read() - - session = DataImportSession.objects.create( - data_file=ContentFile(data, 'companies.csv'), model_type='company' - ) - - session.extract_columns() - - self.assertEqual(session.column_mappings.count(), 14) - - # Check some of the field mappings - for field, col in [ - ('website', 'Website'), - ('is_customer', 'Is customer'), - ('phone', 'Phone number'), - ('description', 'Company description'), - ('active', 'Active'), - ]: - self.assertTrue( - session.column_mappings.filter(field=field, column=col).exists() - ) - - # Run the data import - session.import_data() - self.assertEqual(session.rows.count(), 12) - - # Check that some data has been imported - for row in session.rows.all(): - self.assertIsNotNone(row.data.get('name', None)) - self.assertTrue(row.valid) - - row.validate(commit=True) - self.assertTrue(row.complete) - - self.assertEqual(session.completed_row_count, 12) - - # Check that the new companies have been created - self.assertEqual(n + 12, Company.objects.count()) - - def test_field_defaults(self): - """Test default field values.""" - ... diff --git a/src/backend/InvenTree/importer/validators.py b/src/backend/InvenTree/importer/validators.py deleted file mode 100644 index 166c30acc6ed..000000000000 --- a/src/backend/InvenTree/importer/validators.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Custom validation routines for the 'importer' app.""" - -import json - -from django.core.exceptions import ValidationError -from django.utils.translation import gettext_lazy as _ - -# Define maximum limits for imported file data -IMPORTER_MAX_FILE_SIZE = 32 * 1024 * 1042 -IMPORTER_MAX_ROWS = 5000 -IMPORTER_MAX_COLS = 1000 - - -def validate_data_file(data_file): - """Validate the provided data file.""" - import importer.operations - - filesize = data_file.size - - if filesize > IMPORTER_MAX_FILE_SIZE: - raise ValidationError(_('Data file exceeds maximum size limit')) - - dataset = importer.operations.load_data_file(data_file) - - if not dataset.headers or len(dataset.headers) == 0: - raise ValidationError(_('Data file contains no headers')) - - if len(dataset.headers) > IMPORTER_MAX_COLS: - raise ValidationError(_('Data file contains too many columns')) - - if len(dataset) > IMPORTER_MAX_ROWS: - raise ValidationError(_('Data file contains too many rows')) - - -def validate_importer_model_type(value): - """Validate that the given model type is supported for importing.""" - from importer.registry import supported_models - - if value not in supported_models().keys(): - raise ValidationError(f"Unsupported model type '{value}'") - - -def validate_field_defaults(value): - """Validate that the provided value is a valid dict.""" - if value is None: - return - - if type(value) is not dict: - # OK if we can parse it as JSON - try: - value = json.loads(value) - except json.JSONDecodeError: - raise ValidationError(_('Value must be a valid dictionary object')) diff --git a/src/backend/InvenTree/label/__init__.py b/src/backend/InvenTree/label/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/backend/InvenTree/label/admin.py b/src/backend/InvenTree/label/admin.py new file mode 100644 index 000000000000..fd11629134a1 --- /dev/null +++ b/src/backend/InvenTree/label/admin.py @@ -0,0 +1,17 @@ +"""Admin functionality for the 'label' app.""" + +from django.contrib import admin + +import label.models + + +class LabelAdmin(admin.ModelAdmin): + """Admin class for the various label models.""" + + list_display = ('name', 'description', 'label', 'filters', 'enabled') + + +admin.site.register(label.models.StockItemLabel, LabelAdmin) +admin.site.register(label.models.StockLocationLabel, LabelAdmin) +admin.site.register(label.models.PartLabel, LabelAdmin) +admin.site.register(label.models.BuildLineLabel, LabelAdmin) diff --git a/src/backend/InvenTree/label/api.py b/src/backend/InvenTree/label/api.py new file mode 100644 index 000000000000..9cf252b2ebc1 --- /dev/null +++ b/src/backend/InvenTree/label/api.py @@ -0,0 +1,504 @@ +"""API functionality for the 'label' app.""" + +from django.core.exceptions import FieldError, ValidationError +from django.http import JsonResponse +from django.urls import include, path, re_path +from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ +from django.views.decorators.cache import cache_page, never_cache + +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import serializers +from rest_framework.exceptions import NotFound +from rest_framework.request import clone_request + +import build.models +import common.models +import InvenTree.exceptions +import InvenTree.helpers +import label.models +import label.serializers +from InvenTree.api import MetadataView +from InvenTree.filters import InvenTreeSearchFilter +from InvenTree.mixins import ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI +from part.models import Part +from plugin.builtin.labels.inventree_label import InvenTreeLabelPlugin +from plugin.registry import registry +from stock.models import StockItem, StockLocation + + +class LabelFilterMixin: + """Mixin for filtering a queryset by a list of object ID values. + + Each implementing class defines a database model to lookup, + and a "key" (query parameter) for providing a list of ID (PK) values. + + This mixin defines a 'get_items' method which provides a generic + implementation to return a list of matching database model instances. + """ + + # Database model for instances to actually be "printed" against this label template + ITEM_MODEL = None + + # Default key for looking up database model instances + ITEM_KEY = 'item' + + def get_items(self): + """Return a list of database objects from query parameter.""" + ids = [] + + # Construct a list of possible query parameter value options + # e.g. if self.ITEM_KEY = 'part' -> ['part', 'part[]', 'parts', parts[]'] + for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: + if ids := self.request.query_params.getlist(k, []): + # Return the first list of matches + break + + # Next we must validate each provided object ID + valid_ids = [] + + for id in ids: + try: + valid_ids.append(int(id)) + except ValueError: + pass + + # Filter queryset by matching ID values + return self.ITEM_MODEL.objects.filter(pk__in=valid_ids) + + +class LabelListView(LabelFilterMixin, ListCreateAPI): + """Generic API class for label templates.""" + + def filter_queryset(self, queryset): + """Filter the queryset based on the provided label ID values. + + As each 'label' instance may optionally define its own filters, + the resulting queryset is the 'union' of the two. + """ + queryset = super().filter_queryset(queryset) + + items = self.get_items() + + if len(items) > 0: + """ + At this point, we are basically forced to be inefficient, + as we need to compare the 'filters' string of each label, + and see if it matches against each of the requested items. + + TODO: In the future, if this becomes excessively slow, it + will need to be readdressed. + """ + valid_label_ids = set() + + for lbl in queryset.all(): + matches = True + + try: + filters = InvenTree.helpers.validateFilterString(lbl.filters) + except ValidationError: + continue + + for item in items: + item_query = self.ITEM_MODEL.objects.filter(pk=item.pk) + + try: + if not item_query.filter(**filters).exists(): + matches = False + break + except FieldError: + matches = False + break + + # Matched all items + if matches: + valid_label_ids.add(lbl.pk) + else: + continue + + # Reduce queryset to only valid matches + queryset = queryset.filter(pk__in=list(valid_label_ids)) + + return queryset + + filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] + + filterset_fields = ['enabled'] + + search_fields = ['name', 'description'] + + +@method_decorator(cache_page(5), name='dispatch') +class LabelPrintMixin(LabelFilterMixin): + """Mixin for printing labels.""" + + rolemap = {'GET': 'view', 'POST': 'view'} + + def check_permissions(self, request): + """Override request method to GET so that also non superusers can print using a post request.""" + if request.method == 'POST': + request = clone_request(request, 'GET') + return super().check_permissions(request) + + @method_decorator(never_cache) + def dispatch(self, *args, **kwargs): + """Prevent caching when printing report templates.""" + return super().dispatch(*args, **kwargs) + + def get_serializer(self, *args, **kwargs): + """Define a get_serializer method to be discoverable by the OPTIONS request.""" + # Check the request to determine if the user has selected a label printing plugin + plugin = self.get_plugin(self.request) + + kwargs.setdefault('context', self.get_serializer_context()) + serializer = plugin.get_printing_options_serializer( + self.request, *args, **kwargs + ) + + # if no serializer is defined, return an empty serializer + if not serializer: + return serializers.Serializer() + + return serializer + + def get(self, request, *args, **kwargs): + """Perform a GET request against this endpoint to print labels.""" + common.models.InvenTreeUserSetting.set_setting( + 'DEFAULT_' + self.ITEM_KEY.upper() + '_LABEL_TEMPLATE', + self.get_object().pk, + None, + user=request.user, + ) + return self.print(request, self.get_items()) + + def post(self, request, *args, **kwargs): + """Perform a GET request against this endpoint to print labels.""" + return self.get(request, *args, **kwargs) + + def get_plugin(self, request): + """Return the label printing plugin associated with this request. + + This is provided in the url, e.g. ?plugin=myprinter + + Requires: + - settings.PLUGINS_ENABLED is True + - matching plugin can be found + - matching plugin implements the 'labels' mixin + - matching plugin is enabled + """ + plugin_key = request.query_params.get('plugin', None) + + # No plugin provided! + if plugin_key is None: + # Default to the builtin label printing plugin + plugin_key = InvenTreeLabelPlugin.NAME.lower() + + plugin = registry.get_plugin(plugin_key) + + if not plugin: + raise NotFound(f"Plugin '{plugin_key}' not found") + + if not plugin.is_active(): + raise ValidationError(f"Plugin '{plugin_key}' is not enabled") + + if not plugin.mixin_enabled('labels'): + raise ValidationError( + f"Plugin '{plugin_key}' is not a label printing plugin" + ) + + # Only return the plugin if it is enabled and has the label printing mixin + return plugin + + def print(self, request, items_to_print): + """Print this label template against a number of pre-validated items.""" + # Check the request to determine if the user has selected a label printing plugin + plugin = self.get_plugin(request) + + if len(items_to_print) == 0: + # No valid items provided, return an error message + raise ValidationError('No valid objects provided to label template') + + # Label template + label = self.get_object() + + # Check the label dimensions + if label.width <= 0 or label.height <= 0: + raise ValidationError('Label has invalid dimensions') + + # if the plugin returns a serializer, validate the data + if serializer := plugin.get_printing_options_serializer( + request, data=request.data, context=self.get_serializer_context() + ): + serializer.is_valid(raise_exception=True) + + # At this point, we offload the label(s) to the selected plugin. + # The plugin is responsible for handling the request and returning a response. + + try: + result = plugin.print_labels( + label, + items_to_print, + request, + printing_options=(serializer.data if serializer else {}), + ) + except ValidationError as e: + raise (e) + except Exception as e: + raise ValidationError([_('Error printing label'), str(e)]) + + if isinstance(result, JsonResponse): + result['plugin'] = plugin.plugin_slug() + return result + raise ValidationError( + f"Plugin '{plugin.plugin_slug()}' returned invalid response type '{type(result)}'" + ) + + +class StockItemLabelMixin: + """Mixin for StockItemLabel endpoints.""" + + queryset = label.models.StockItemLabel.objects.all() + serializer_class = label.serializers.StockItemLabelSerializer + + ITEM_MODEL = StockItem + ITEM_KEY = 'item' + + +class StockItemLabelList(StockItemLabelMixin, LabelListView): + """API endpoint for viewing list of StockItemLabel objects. + + Filterable by: + + - enabled: Filter by enabled / disabled status + - item: Filter by single stock item + - items: Filter by list of stock items + """ + + pass + + +class StockItemLabelDetail(StockItemLabelMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single StockItemLabel object.""" + + pass + + +class StockItemLabelPrint(StockItemLabelMixin, LabelPrintMixin, RetrieveAPI): + """API endpoint for printing a StockItemLabel object.""" + + pass + + +class StockLocationLabelMixin: + """Mixin for StockLocationLabel endpoints.""" + + queryset = label.models.StockLocationLabel.objects.all() + serializer_class = label.serializers.StockLocationLabelSerializer + + ITEM_MODEL = StockLocation + ITEM_KEY = 'location' + + +class StockLocationLabelList(StockLocationLabelMixin, LabelListView): + """API endpoint for viewiing list of StockLocationLabel objects. + + Filterable by: + + - enabled: Filter by enabled / disabled status + - location: Filter by a single stock location + - locations: Filter by list of stock locations + """ + + pass + + +class StockLocationLabelDetail(StockLocationLabelMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single StockLocationLabel object.""" + + pass + + +class StockLocationLabelPrint(StockLocationLabelMixin, LabelPrintMixin, RetrieveAPI): + """API endpoint for printing a StockLocationLabel object.""" + + pass + + +class PartLabelMixin: + """Mixin for PartLabel endpoints.""" + + queryset = label.models.PartLabel.objects.all() + serializer_class = label.serializers.PartLabelSerializer + + ITEM_MODEL = Part + ITEM_KEY = 'part' + + +class PartLabelList(PartLabelMixin, LabelListView): + """API endpoint for viewing list of PartLabel objects.""" + + pass + + +class PartLabelDetail(PartLabelMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single PartLabel object.""" + + pass + + +class PartLabelPrint(PartLabelMixin, LabelPrintMixin, RetrieveAPI): + """API endpoint for printing a PartLabel object.""" + + pass + + +class BuildLineLabelMixin: + """Mixin class for BuildLineLabel endpoints.""" + + queryset = label.models.BuildLineLabel.objects.all() + serializer_class = label.serializers.BuildLineLabelSerializer + + ITEM_MODEL = build.models.BuildLine + ITEM_KEY = 'line' + + +class BuildLineLabelList(BuildLineLabelMixin, LabelListView): + """API endpoint for viewing a list of BuildLineLabel objects.""" + + pass + + +class BuildLineLabelDetail(BuildLineLabelMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single BuildLineLabel object.""" + + pass + + +class BuildLineLabelPrint(BuildLineLabelMixin, LabelPrintMixin, RetrieveAPI): + """API endpoint for printing a BuildLineLabel object.""" + + pass + + +label_api_urls = [ + # Stock item labels + path( + 'stock/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + StockItemLabelPrint.as_view(), + name='api-stockitem-label-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': label.models.StockItemLabel}, + name='api-stockitem-label-metadata', + ), + path( + '', + StockItemLabelDetail.as_view(), + name='api-stockitem-label-detail', + ), + ]), + ), + # List view + path('', StockItemLabelList.as_view(), name='api-stockitem-label-list'), + ]), + ), + # Stock location labels + path( + 'location/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + StockLocationLabelPrint.as_view(), + name='api-stocklocation-label-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': label.models.StockLocationLabel}, + name='api-stocklocation-label-metadata', + ), + path( + '', + StockLocationLabelDetail.as_view(), + name='api-stocklocation-label-detail', + ), + ]), + ), + # List view + path( + '', + StockLocationLabelList.as_view(), + name='api-stocklocation-label-list', + ), + ]), + ), + # Part labels + path( + 'part/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + PartLabelPrint.as_view(), + name='api-part-label-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': label.models.PartLabel}, + name='api-part-label-metadata', + ), + path('', PartLabelDetail.as_view(), name='api-part-label-detail'), + ]), + ), + # List view + path('', PartLabelList.as_view(), name='api-part-label-list'), + ]), + ), + # BuildLine labels + path( + 'buildline/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + BuildLineLabelPrint.as_view(), + name='api-buildline-label-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': label.models.BuildLineLabel}, + name='api-buildline-label-metadata', + ), + path( + '', + BuildLineLabelDetail.as_view(), + name='api-buildline-label-detail', + ), + ]), + ), + # List view + path('', BuildLineLabelList.as_view(), name='api-buildline-label-list'), + ]), + ), +] diff --git a/src/backend/InvenTree/label/apps.py b/src/backend/InvenTree/label/apps.py new file mode 100644 index 000000000000..583d2a2591f6 --- /dev/null +++ b/src/backend/InvenTree/label/apps.py @@ -0,0 +1,107 @@ +"""Config options for the label app.""" + +from pathlib import Path + +from django.apps import AppConfig + +from generic.templating.apps import TemplatingMixin + + +class LabelConfig(TemplatingMixin, AppConfig): + """Configuration class for the "label" app.""" + + name = 'label' + db = 'label' + + def create_defaults(self): + """Create all default templates.""" + # Test if models are ready + try: + import label.models + except Exception: # pragma: no cover + # Database is not ready yet + return + assert bool(label.models.StockLocationLabel is not None) + + # Create the categories + self.create_template_dir( + label.models.StockItemLabel, + [ + { + 'file': 'qr.html', + 'name': 'QR Code', + 'description': 'Simple QR code label', + 'width': 24, + 'height': 24, + } + ], + ) + + self.create_template_dir( + label.models.StockLocationLabel, + [ + { + 'file': 'qr.html', + 'name': 'QR Code', + 'description': 'Simple QR code label', + 'width': 24, + 'height': 24, + }, + { + 'file': 'qr_and_text.html', + 'name': 'QR and text', + 'description': 'Label with QR code and name of location', + 'width': 50, + 'height': 24, + }, + ], + ) + + self.create_template_dir( + label.models.PartLabel, + [ + { + 'file': 'part_label.html', + 'name': 'Part Label', + 'description': 'Simple part label', + 'width': 70, + 'height': 24, + }, + { + 'file': 'part_label_code128.html', + 'name': 'Barcode Part Label', + 'description': 'Simple part label with Code128 barcode', + 'width': 70, + 'height': 24, + }, + ], + ) + + self.create_template_dir( + label.models.BuildLineLabel, + [ + { + 'file': 'buildline_label.html', + 'name': 'Build Line Label', + 'description': 'Example build line label', + 'width': 125, + 'height': 48, + } + ], + ) + + def get_src_dir(self, ref_name): + """Get the source directory.""" + return Path(__file__).parent.joinpath('templates', self.name, ref_name) + + def get_new_obj_data(self, data, filename): + """Get the data for a new template db object.""" + return { + 'name': data['name'], + 'description': data['description'], + 'label': filename, + 'filters': '', + 'enabled': True, + 'width': data['width'], + 'height': data['height'], + } diff --git a/src/backend/InvenTree/label/migrations/0001_initial.py b/src/backend/InvenTree/label/migrations/0001_initial.py new file mode 100644 index 000000000000..e960bcef67b5 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.7 on 2020-08-15 23:27 + +import InvenTree.helpers +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='StockItemLabel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Label name', max_length=100, unique=True)), + ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True)), + ('label', models.FileField(help_text='Label template file', upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])])), + ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString])), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py b/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py new file mode 100644 index 000000000000..684299e18424 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-08-22 23:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='stockitemlabel', + name='enabled', + field=models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py b/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py new file mode 100644 index 000000000000..d15fcfa396bc --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.7 on 2021-01-08 12:06 + +import InvenTree.helpers +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0002_stockitemlabel_enabled'), + ] + + operations = [ + migrations.CreateModel( + name='StockLocationLabel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Label name', max_length=100, unique=True)), + ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True)), + ('label', models.FileField(help_text='Label template file', upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])])), + ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString])), + ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py b/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py new file mode 100644 index 000000000000..5194a4bda1d1 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py @@ -0,0 +1,56 @@ +# Generated by Django 3.0.7 on 2021-01-11 12:02 + +import InvenTree.helpers +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0003_stocklocationlabel'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitemlabel', + name='description', + field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='label', + field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='name', + field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='description', + field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='label', + field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='name', + field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py b/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py new file mode 100644 index 000000000000..ad256412acc4 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py @@ -0,0 +1,24 @@ +# Generated by Django 3.0.7 on 2021-01-13 12:02 + +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0004_auto_20210111_2302'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_location_filters], verbose_name='Filters'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py b/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py new file mode 100644 index 000000000000..ea3441b64fa1 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py @@ -0,0 +1,34 @@ +# Generated by Django 3.0.7 on 2021-02-22 04:35 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0005_auto_20210113_2302'), + ] + + operations = [ + migrations.AddField( + model_name='stockitemlabel', + name='height', + field=models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]'), + ), + migrations.AddField( + model_name='stockitemlabel', + name='width', + field=models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]'), + ), + migrations.AddField( + model_name='stocklocationlabel', + name='height', + field=models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]'), + ), + migrations.AddField( + model_name='stocklocationlabel', + name='width', + field=models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py b/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py new file mode 100644 index 000000000000..d49c83c92b58 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2 on 2021-05-13 03:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0006_auto_20210222_1535'), + ] + + operations = [ + migrations.AddField( + model_name='stockitemlabel', + name='filename_pattern', + field=models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern'), + ), + migrations.AddField( + model_name='stocklocationlabel', + name='filename_pattern', + field=models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py b/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py new file mode 100644 index 000000000000..ea575269097f --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.4 on 2021-07-08 11:06 + +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0007_auto_20210513_1327'), + ] + + operations = [ + migrations.CreateModel( + name='PartLabel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Label name', max_length=100, verbose_name='Name')), + ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description')), + ('label', models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label')), + ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), + ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), + ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), + ('filename_pattern', models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern')), + ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated value of key=value pairs)', max_length=250, validators=[label.models.validate_part_filters], verbose_name='Filters')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs),', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py b/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py new file mode 100644 index 000000000000..16b81a5f7f02 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0008_auto_20210708_2106'), + ] + + operations = [ + migrations.AddField( + model_name='partlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='stockitemlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='stocklocationlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py b/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py new file mode 100644 index 000000000000..329c2743670b --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.19 on 2023-06-13 11:10 + +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0009_auto_20230317_0816'), + ] + + operations = [ + migrations.CreateModel( + name='BuildLineLabel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), + ('name', models.CharField(help_text='Label name', max_length=100, verbose_name='Name')), + ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description')), + ('label', models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label')), + ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), + ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), + ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), + ('filename_pattern', models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern')), + ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_build_line_filters], verbose_name='Filters')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py b/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py new file mode 100644 index 000000000000..764925fc07ff --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.19 on 2023-06-23 21:58 + +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0010_buildlinelabel'), + ] + + operations = [ + migrations.AlterField( + model_name='partlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_part_filters], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_stock_location_filters], verbose_name='Filters'), + ), + ] diff --git a/src/backend/InvenTree/label/migrations/0012_labeloutput.py b/src/backend/InvenTree/label/migrations/0012_labeloutput.py new file mode 100644 index 000000000000..3a69fb9a9b50 --- /dev/null +++ b/src/backend/InvenTree/label/migrations/0012_labeloutput.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.20 on 2023-07-14 11:55 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('label', '0011_auto_20230623_2158'), + ] + + operations = [ + migrations.CreateModel( + name='LabelOutput', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.FileField(unique=True, upload_to=label.models.rename_label_output)), + ('created', models.DateField(auto_now_add=True)), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/src/backend/InvenTree/label/migrations/__init__.py b/src/backend/InvenTree/label/migrations/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/backend/InvenTree/label/models.py b/src/backend/InvenTree/label/models.py new file mode 100644 index 000000000000..17cc252afb26 --- /dev/null +++ b/src/backend/InvenTree/label/models.py @@ -0,0 +1,429 @@ +"""Label printing models.""" + +import logging +import os +import sys + +from django.conf import settings +from django.contrib.auth.models import User +from django.core.validators import FileExtensionValidator, MinValueValidator +from django.db import models +from django.template import Context, Template +from django.template.loader import render_to_string +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ + +import build.models +import InvenTree.helpers +import InvenTree.models +import part.models +import stock.models +from InvenTree.helpers import normalize, validateFilterString +from InvenTree.helpers_model import get_base_url +from plugin.registry import registry + +try: + from django_weasyprint import WeasyTemplateResponseMixin +except OSError as err: # pragma: no cover + print(f'OSError: {err}') + print('You may require some further system packages to be installed.') + sys.exit(1) + + +logger = logging.getLogger('inventree') + + +def rename_label(instance, filename): + """Place the label file into the correct subdirectory.""" + filename = os.path.basename(filename) + + return os.path.join('label', 'template', instance.SUBDIR, filename) + + +def rename_label_output(instance, filename): + """Place the label output file into the correct subdirectory.""" + filename = os.path.basename(filename) + + return os.path.join('label', 'output', filename) + + +def validate_stock_item_filters(filters): + """Validate query filters for the StockItemLabel model.""" + filters = validateFilterString(filters, model=stock.models.StockItem) + + return filters + + +def validate_stock_location_filters(filters): + """Validate query filters for the StockLocationLabel model.""" + filters = validateFilterString(filters, model=stock.models.StockLocation) + + return filters + + +def validate_part_filters(filters): + """Validate query filters for the PartLabel model.""" + filters = validateFilterString(filters, model=part.models.Part) + + return filters + + +def validate_build_line_filters(filters): + """Validate query filters for the BuildLine model.""" + filters = validateFilterString(filters, model=build.models.BuildLine) + + return filters + + +class WeasyprintLabelMixin(WeasyTemplateResponseMixin): + """Class for rendering a label to a PDF.""" + + pdf_filename = 'label.pdf' + pdf_attachment = True + + def __init__(self, request, template, **kwargs): + """Initialize a label mixin with certain properties.""" + self.request = request + self.template_name = template + self.pdf_filename = kwargs.get('filename', 'label.pdf') + + +class LabelTemplate(InvenTree.models.InvenTreeMetadataModel): + """Base class for generic, filterable labels.""" + + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + + abstract = True + + @classmethod + def getSubdir(cls) -> str: + """Return the subdirectory for this label.""" + return cls.SUBDIR + + # Each class of label files will be stored in a separate subdirectory + SUBDIR: str = 'label' + + # Object we will be printing against (will be filled out later) + object_to_print = None + + @property + def template(self): + """Return the file path of the template associated with this label instance.""" + return self.label.path + + def __str__(self): + """Format a string representation of a label instance.""" + return f'{self.name} - {self.description}' + + name = models.CharField( + blank=False, max_length=100, verbose_name=_('Name'), help_text=_('Label name') + ) + + description = models.CharField( + max_length=250, + blank=True, + null=True, + verbose_name=_('Description'), + help_text=_('Label description'), + ) + + label = models.FileField( + upload_to=rename_label, + unique=True, + blank=False, + null=False, + verbose_name=_('Label'), + help_text=_('Label template file'), + validators=[FileExtensionValidator(allowed_extensions=['html'])], + ) + + enabled = models.BooleanField( + default=True, + verbose_name=_('Enabled'), + help_text=_('Label template is enabled'), + ) + + width = models.FloatField( + default=50, + verbose_name=_('Width [mm]'), + help_text=_('Label width, specified in mm'), + validators=[MinValueValidator(2)], + ) + + height = models.FloatField( + default=20, + verbose_name=_('Height [mm]'), + help_text=_('Label height, specified in mm'), + validators=[MinValueValidator(2)], + ) + + filename_pattern = models.CharField( + default='label.pdf', + verbose_name=_('Filename Pattern'), + help_text=_('Pattern for generating label filenames'), + max_length=100, + ) + + @property + def template_name(self): + """Returns the file system path to the template file. + + Required for passing the file to an external process + """ + template = self.label.name + template = template.replace('/', os.path.sep) + template = template.replace('\\', os.path.sep) + + template = settings.MEDIA_ROOT.joinpath(template) + + return template + + def get_context_data(self, request): + """Supply custom context data to the template for rendering. + + Note: Override this in any subclass + """ + return {} # pragma: no cover + + def generate_filename(self, request, **kwargs): + """Generate a filename for this label.""" + template_string = Template(self.filename_pattern) + + ctx = self.context(request) + + context = Context(ctx) + + return template_string.render(context) + + def generate_page_style(self, **kwargs): + """Generate @page style for the label template. + + This is inserted at the top of the style block for a given label + """ + width = kwargs.get('width', self.width) + height = kwargs.get('height', self.height) + margin = kwargs.get('margin', 0) + + return f""" + @page {{ + size: {width}mm {height}mm; + margin: {margin}mm; + }} + """ + + def context(self, request, **kwargs): + """Provides context data to the template. + + Arguments: + request: The HTTP request object + kwargs: Additional keyword arguments + """ + context = self.get_context_data(request) + + # By default, each label is supplied with '@page' data + # However, it can be excluded, e.g. when rendering a label sheet + if kwargs.get('insert_page_style', True): + context['page_style'] = self.generate_page_style() + + # Add "basic" context data which gets passed to every label + context['base_url'] = get_base_url(request=request) + context['date'] = InvenTree.helpers.current_date() + context['datetime'] = InvenTree.helpers.current_time() + context['request'] = request + context['user'] = request.user + context['width'] = self.width + context['height'] = self.height + + # Pass the context through to any registered plugins + plugins = registry.with_mixin('report') + + for plugin in plugins: + # Let each plugin add its own context data + plugin.add_label_context(self, self.object_to_print, request, context) + + return context + + def render_as_string(self, request, target_object=None, **kwargs): + """Render the label to a HTML string.""" + if target_object: + self.object_to_print = target_object + + context = self.context(request, **kwargs) + + return render_to_string(self.template_name, context, request) + + def render(self, request, target_object=None, **kwargs): + """Render the label template to a PDF file. + + Uses django-weasyprint plugin to render HTML template + """ + if target_object: + self.object_to_print = target_object + + context = self.context(request, **kwargs) + + wp = WeasyprintLabelMixin( + request, + self.template_name, + base_url=request.build_absolute_uri('/'), + presentational_hints=True, + filename=self.generate_filename(request), + **kwargs, + ) + + return wp.render_to_response(context, **kwargs) + + +class LabelOutput(models.Model): + """Class representing a label output file. + + 'Printing' a label may generate a file object (such as PDF) + which is made available for download. + + Future work will offload this task to the background worker, + and provide a 'progress' bar for the user. + """ + + # File will be stored in a subdirectory + label = models.FileField( + upload_to=rename_label_output, unique=True, blank=False, null=False + ) + + # Creation date of label output + created = models.DateField(auto_now_add=True, editable=False) + + # User who generated the label + user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True) + + +class StockItemLabel(LabelTemplate): + """Template for printing StockItem labels.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the StockItemLabel model.""" + return reverse('api-stockitem-label-list') # pragma: no cover + + SUBDIR = 'stockitem' + + filters = models.CharField( + blank=True, + max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs)'), + verbose_name=_('Filters'), + validators=[validate_stock_item_filters], + ) + + def get_context_data(self, request): + """Generate context data for each provided StockItem.""" + stock_item = self.object_to_print + + return { + 'item': stock_item, + 'part': stock_item.part, + 'name': stock_item.part.full_name, + 'ipn': stock_item.part.IPN, + 'revision': stock_item.part.revision, + 'quantity': normalize(stock_item.quantity), + 'serial': stock_item.serial, + 'barcode_data': stock_item.barcode_data, + 'barcode_hash': stock_item.barcode_hash, + 'qr_data': stock_item.format_barcode(brief=True), + 'qr_url': request.build_absolute_uri(stock_item.get_absolute_url()), + 'tests': stock_item.testResultMap(), + 'parameters': stock_item.part.parameters_map(), + } + + +class StockLocationLabel(LabelTemplate): + """Template for printing StockLocation labels.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the StockLocationLabel model.""" + return reverse('api-stocklocation-label-list') # pragma: no cover + + SUBDIR = 'stocklocation' + + filters = models.CharField( + blank=True, + max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs)'), + verbose_name=_('Filters'), + validators=[validate_stock_location_filters], + ) + + def get_context_data(self, request): + """Generate context data for each provided StockLocation.""" + location = self.object_to_print + + return {'location': location, 'qr_data': location.format_barcode(brief=True)} + + +class PartLabel(LabelTemplate): + """Template for printing Part labels.""" + + @staticmethod + def get_api_url(): + """Return the API url associated with the PartLabel model.""" + return reverse('api-part-label-list') # pragma: no cover + + SUBDIR = 'part' + + filters = models.CharField( + blank=True, + max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs)'), + verbose_name=_('Filters'), + validators=[validate_part_filters], + ) + + def get_context_data(self, request): + """Generate context data for each provided Part object.""" + part = self.object_to_print + + return { + 'part': part, + 'category': part.category, + 'name': part.name, + 'description': part.description, + 'IPN': part.IPN, + 'revision': part.revision, + 'qr_data': part.format_barcode(brief=True), + 'qr_url': request.build_absolute_uri(part.get_absolute_url()), + 'parameters': part.parameters_map(), + } + + +class BuildLineLabel(LabelTemplate): + """Template for printing labels against BuildLine objects.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the BuildLineLabel model.""" + return reverse('api-buildline-label-list') + + SUBDIR = 'buildline' + + filters = models.CharField( + blank=True, + max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs)'), + verbose_name=_('Filters'), + validators=[validate_build_line_filters], + ) + + def get_context_data(self, request): + """Generate context data for each provided BuildLine object.""" + build_line = self.object_to_print + + return { + 'build_line': build_line, + 'build': build_line.build, + 'bom_item': build_line.bom_item, + 'part': build_line.bom_item.sub_part, + 'quantity': build_line.quantity, + 'allocated_quantity': build_line.allocated_quantity, + 'allocations': build_line.allocations, + } diff --git a/src/backend/InvenTree/label/serializers.py b/src/backend/InvenTree/label/serializers.py new file mode 100644 index 000000000000..ef1f467937c3 --- /dev/null +++ b/src/backend/InvenTree/label/serializers.py @@ -0,0 +1,67 @@ +"""API serializers for the label app.""" + +import label.models +from InvenTree.serializers import ( + InvenTreeAttachmentSerializerField, + InvenTreeModelSerializer, +) + + +class LabelSerializerBase(InvenTreeModelSerializer): + """Base class for label serializer.""" + + label = InvenTreeAttachmentSerializerField(required=True) + + @staticmethod + def label_fields(): + """Generic serializer fields for a label template.""" + return [ + 'pk', + 'name', + 'description', + 'label', + 'filters', + 'width', + 'height', + 'enabled', + ] + + +class StockItemLabelSerializer(LabelSerializerBase): + """Serializes a StockItemLabel object.""" + + class Meta: + """Metaclass options.""" + + model = label.models.StockItemLabel + fields = LabelSerializerBase.label_fields() + + +class StockLocationLabelSerializer(LabelSerializerBase): + """Serializes a StockLocationLabel object.""" + + class Meta: + """Metaclass options.""" + + model = label.models.StockLocationLabel + fields = LabelSerializerBase.label_fields() + + +class PartLabelSerializer(LabelSerializerBase): + """Serializes a PartLabel object.""" + + class Meta: + """Metaclass options.""" + + model = label.models.PartLabel + fields = LabelSerializerBase.label_fields() + + +class BuildLineLabelSerializer(LabelSerializerBase): + """Serializes a BuildLineLabel object.""" + + class Meta: + """Metaclass options.""" + + model = label.models.BuildLineLabel + fields = LabelSerializerBase.label_fields() diff --git a/src/backend/InvenTree/label/tasks.py b/src/backend/InvenTree/label/tasks.py new file mode 100644 index 000000000000..b1630f629694 --- /dev/null +++ b/src/backend/InvenTree/label/tasks.py @@ -0,0 +1,15 @@ +"""Background tasks for the label app.""" + +from datetime import timedelta + +from django.utils import timezone + +from InvenTree.tasks import ScheduledTask, scheduled_task +from label.models import LabelOutput + + +@scheduled_task(ScheduledTask.DAILY) +def cleanup_old_label_outputs(): + """Remove old label outputs from the database.""" + # Remove any label outputs which are older than 30 days + LabelOutput.objects.filter(created__lte=timezone.now() - timedelta(days=5)).delete() diff --git a/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html b/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html new file mode 100644 index 000000000000..efbb9a3db655 --- /dev/null +++ b/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html @@ -0,0 +1,3 @@ +{% extends "label/buildline/buildline_label_base.html" %} + + diff --git a/src/backend/InvenTree/report/templates/label/buildline_label.html b/src/backend/InvenTree/label/templates/label/buildline/buildline_label_base.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/buildline_label.html rename to src/backend/InvenTree/label/templates/label/buildline/buildline_label_base.html diff --git a/src/backend/InvenTree/report/templates/label/label_base.html b/src/backend/InvenTree/label/templates/label/label_base.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/label_base.html rename to src/backend/InvenTree/label/templates/label/label_base.html diff --git a/src/backend/InvenTree/report/templates/label/part_label.html b/src/backend/InvenTree/label/templates/label/part/part_label.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/part_label.html rename to src/backend/InvenTree/label/templates/label/part/part_label.html diff --git a/src/backend/InvenTree/report/templates/label/part_label_code128.html b/src/backend/InvenTree/label/templates/label/part/part_label_code128.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/part_label_code128.html rename to src/backend/InvenTree/label/templates/label/part/part_label_code128.html diff --git a/src/backend/InvenTree/report/templates/label/stockitem_qr.html b/src/backend/InvenTree/label/templates/label/stockitem/qr.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/stockitem_qr.html rename to src/backend/InvenTree/label/templates/label/stockitem/qr.html diff --git a/src/backend/InvenTree/report/templates/label/stocklocation_qr.html b/src/backend/InvenTree/label/templates/label/stocklocation/qr.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/stocklocation_qr.html rename to src/backend/InvenTree/label/templates/label/stocklocation/qr.html diff --git a/src/backend/InvenTree/report/templates/label/stocklocation_qr_and_text.html b/src/backend/InvenTree/label/templates/label/stocklocation/qr_and_text.html similarity index 100% rename from src/backend/InvenTree/report/templates/label/stocklocation_qr_and_text.html rename to src/backend/InvenTree/label/templates/label/stocklocation/qr_and_text.html diff --git a/src/backend/InvenTree/label/test_api.py b/src/backend/InvenTree/label/test_api.py new file mode 100644 index 000000000000..f2e4d728ec96 --- /dev/null +++ b/src/backend/InvenTree/label/test_api.py @@ -0,0 +1,301 @@ +"""Unit tests for label API.""" + +import json +from io import StringIO + +from django.core.cache import cache +from django.urls import reverse + +import label.models as label_models +from build.models import BuildLine +from InvenTree.unit_test import InvenTreeAPITestCase +from part.models import Part +from stock.models import StockItem, StockLocation + + +class LabelTest(InvenTreeAPITestCase): + """Base class for unit testing label model API endpoints.""" + + fixtures = ['category', 'part', 'location', 'stock', 'bom', 'build'] + + superuser = True + + model = None + list_url = None + detail_url = None + metadata_url = None + + print_url = None + print_itemname = None + print_itemmodel = None + + def setUp(self): + """Ensure cache is cleared as part of test setup.""" + cache.clear() + return super().setUp() + + def test_api_url(self): + """Test returned API Url against URL tag defined in this file.""" + if not self.list_url: + return + + self.assertEqual(reverse(self.list_url), self.model.get_api_url()) + + def test_list_endpoint(self): + """Test that the LIST endpoint works for each model.""" + if not self.list_url: + return + + url = reverse(self.list_url) + + response = self.get(url) + self.assertEqual(response.status_code, 200) + + labels = self.model.objects.all() + n = len(labels) + + # API endpoint must return correct number of reports + self.assertEqual(len(response.data), n) + + # Filter by "enabled" status + response = self.get(url, {'enabled': True}) + self.assertEqual(len(response.data), n) + + response = self.get(url, {'enabled': False}) + self.assertEqual(len(response.data), 0) + + # Filter by "enabled" status + response = self.get(url, {'enabled': True}) + self.assertEqual(len(response.data), 0) + + response = self.get(url, {'enabled': False}) + self.assertEqual(len(response.data), n) + + def test_create_endpoint(self): + """Test that creating a new report works for each label.""" + if not self.list_url: + return + + url = reverse(self.list_url) + + # Create a new label + # Django REST API "APITestCase" does not work like requests - to send a file without it existing on disk, + # create it as a StringIO object, and upload it under parameter template + filestr = StringIO( + '{% extends "label/label_base.html" %}{% block content %}
    TEST LABEL
    {% endblock content %}' + ) + filestr.name = 'ExampleTemplate.html' + + response = self.post( + url, + data={ + 'name': 'New label', + 'description': 'A fancy new label created through API test', + 'label': filestr, + }, + format=None, + expected_code=201, + ) + + # Make sure the expected keys are in the response + self.assertIn('pk', response.data) + self.assertIn('name', response.data) + self.assertIn('description', response.data) + self.assertIn('label', response.data) + self.assertIn('filters', response.data) + self.assertIn('enabled', response.data) + + self.assertEqual(response.data['name'], 'New label') + self.assertEqual( + response.data['description'], 'A fancy new label created through API test' + ) + self.assertEqual(response.data['label'].count('ExampleTemplate'), 1) + + def test_detail_endpoint(self): + """Test that the DETAIL endpoint works for each label.""" + if not self.detail_url: + return + + # Create an item first + self.test_create_endpoint() + + labels = self.model.objects.all() + + n = len(labels) + + # Make sure at least one report defined + self.assertGreaterEqual(n, 1) + + # Check detail page for first report + response = self.get( + reverse(self.detail_url, kwargs={'pk': labels[0].pk}), expected_code=200 + ) + + # Make sure the expected keys are in the response + self.assertIn('pk', response.data) + self.assertIn('name', response.data) + self.assertIn('description', response.data) + self.assertIn('label', response.data) + self.assertIn('filters', response.data) + self.assertIn('enabled', response.data) + + filestr = StringIO( + '{% extends "label/label_base.html" %}{% block content %}
    TEST LABEL
    {% endblock content %}' + ) + filestr.name = 'ExampleTemplate_Updated.html' + + # Check PATCH method + response = self.patch( + reverse(self.detail_url, kwargs={'pk': labels[0].pk}), + { + 'name': 'Changed name during test', + 'description': 'New version of the template', + 'label': filestr, + }, + format=None, + expected_code=200, + ) + + # Make sure the expected keys are in the response + self.assertIn('pk', response.data) + self.assertIn('name', response.data) + self.assertIn('description', response.data) + self.assertIn('label', response.data) + self.assertIn('filters', response.data) + self.assertIn('enabled', response.data) + + self.assertEqual(response.data['name'], 'Changed name during test') + self.assertEqual(response.data['description'], 'New version of the template') + + self.assertEqual(response.data['label'].count('ExampleTemplate_Updated'), 1) + + def test_delete(self): + """Test deleting, after other test are done.""" + if not self.detail_url: + return + + # Create an item first + self.test_create_endpoint() + + labels = self.model.objects.all() + n = len(labels) + # Make sure at least one label defined + self.assertGreaterEqual(n, 1) + + # Delete the last report + self.delete( + reverse(self.detail_url, kwargs={'pk': labels[n - 1].pk}), expected_code=204 + ) + + def test_print_label(self): + """Test printing a label.""" + if not self.print_url: + return + + # Create an item first + self.test_create_endpoint() + + labels = self.model.objects.all() + n = len(labels) + # Make sure at least one label defined + self.assertGreaterEqual(n, 1) + + url = reverse(self.print_url, kwargs={'pk': labels[0].pk}) + + # Try to print without providing a valid item + self.get(url, expected_code=400) + + # Try to print with an invalid item + self.get(url, {self.print_itemname: 9999}, expected_code=400) + + # Now print with a valid item + print(f'{self.print_itemmodel = }') + print(f'{self.print_itemmodel.objects.all() = }') + + item = self.print_itemmodel.objects.first() + self.assertIsNotNone(item) + + response = self.get(url, {self.print_itemname: item.pk}, expected_code=200) + + response_json = json.loads(response.content.decode('utf-8')) + + self.assertIn('file', response_json) + self.assertIn('success', response_json) + self.assertIn('message', response_json) + self.assertTrue(response_json['success']) + + def test_metadata_endpoint(self): + """Unit tests for the metadata field.""" + if not self.metadata_url: + return + + # Create an item first + self.test_create_endpoint() + + labels = self.model.objects.all() + n = len(labels) + # Make sure at least one label defined + self.assertGreaterEqual(n, 1) + + # Test getting metadata + response = self.get( + reverse(self.metadata_url, kwargs={'pk': labels[0].pk}), expected_code=200 + ) + + self.assertEqual(response.data, {'metadata': {}}) + + +class TestStockItemLabel(LabelTest): + """Unit testing class for the StockItemLabel model.""" + + model = label_models.StockItemLabel + + list_url = 'api-stockitem-label-list' + detail_url = 'api-stockitem-label-detail' + metadata_url = 'api-stockitem-label-metadata' + + print_url = 'api-stockitem-label-print' + print_itemname = 'item' + print_itemmodel = StockItem + + +class TestStockLocationLabel(LabelTest): + """Unit testing class for the StockLocationLabel model.""" + + model = label_models.StockLocationLabel + + list_url = 'api-stocklocation-label-list' + detail_url = 'api-stocklocation-label-detail' + metadata_url = 'api-stocklocation-label-metadata' + + print_url = 'api-stocklocation-label-print' + print_itemname = 'location' + print_itemmodel = StockLocation + + +class TestPartLabel(LabelTest): + """Unit testing class for the PartLabel model.""" + + model = label_models.PartLabel + + list_url = 'api-part-label-list' + detail_url = 'api-part-label-detail' + metadata_url = 'api-part-label-metadata' + + print_url = 'api-part-label-print' + print_itemname = 'part' + print_itemmodel = Part + + +class TestBuildLineLabel(LabelTest): + """Unit testing class for the BuildLine model.""" + + model = label_models.BuildLineLabel + + list_url = 'api-buildline-label-list' + detail_url = 'api-buildline-label-detail' + metadata_url = 'api-buildline-label-metadata' + + print_url = 'api-buildline-label-print' + print_itemname = 'line' + print_itemmodel = BuildLine diff --git a/src/backend/InvenTree/label/tests.py b/src/backend/InvenTree/label/tests.py new file mode 100644 index 000000000000..b4afce22168e --- /dev/null +++ b/src/backend/InvenTree/label/tests.py @@ -0,0 +1,166 @@ +"""Tests for labels.""" + +import io +import json + +from django.apps import apps +from django.conf import settings +from django.core.exceptions import ValidationError +from django.core.files.base import ContentFile +from django.http import JsonResponse +from django.urls import reverse + +from common.models import InvenTreeSetting +from InvenTree.helpers import validateFilterString +from InvenTree.unit_test import InvenTreeAPITestCase +from label.models import LabelOutput +from part.models import Part +from plugin.registry import registry +from stock.models import StockItem + +from .models import PartLabel, StockItemLabel, StockLocationLabel + + +class LabelTest(InvenTreeAPITestCase): + """Unit test class for label models.""" + + fixtures = ['category', 'part', 'location', 'stock'] + + @classmethod + def setUpTestData(cls): + """Ensure that some label instances exist as part of init routine.""" + super().setUpTestData() + apps.get_app_config('label').create_defaults() + + def test_default_labels(self): + """Test that the default label templates are copied across.""" + labels = StockItemLabel.objects.all() + + self.assertTrue(labels.count() > 0) + + labels = StockLocationLabel.objects.all() + + self.assertTrue(labels.count() > 0) + + def test_default_files(self): + """Test that label files exist in the MEDIA directory.""" + + def test_subdir(ref_name): + item_dir = settings.MEDIA_ROOT.joinpath('label', 'inventree', ref_name) + self.assertTrue(len([item_dir.iterdir()]) > 0) + + test_subdir('stockitem') + test_subdir('stocklocation') + test_subdir('part') + + def test_filters(self): + """Test the label filters.""" + filter_string = 'part__pk=10' + + filters = validateFilterString(filter_string, model=StockItem) + + self.assertEqual(type(filters), dict) + + bad_filter_string = 'part_pk=10' + + with self.assertRaises(ValidationError): + validateFilterString(bad_filter_string, model=StockItem) + + def test_label_rendering(self): + """Test label rendering.""" + labels = PartLabel.objects.all() + part = Part.objects.first() + + for label in labels: + url = reverse('api-part-label-print', kwargs={'pk': label.pk}) + + # Check that label printing returns the correct response type + response = self.get(f'{url}?parts={part.pk}', expected_code=200) + self.assertIsInstance(response, JsonResponse) + data = json.loads(response.content) + + self.assertIn('message', data) + self.assertIn('file', data) + label_file = data['file'] + self.assertIn('/media/label/output/', label_file) + + def test_print_part_label(self): + """Actually 'print' a label, and ensure that the correct information is contained.""" + label_data = """ + {% load barcode %} + {% load report %} + + + + part: {{ part.pk }} - {{ part.name }} + + data: {{ qr_data|safe }} + + url: {{ qr_url|safe }} + + image: {% part_image part width=128 %} + + logo: {% logo_image %} + + """ + + buffer = io.StringIO() + buffer.write(label_data) + + template = ContentFile(buffer.getvalue(), 'label.html') + + # Construct a label template + label = PartLabel.objects.create( + name='test', description='Test label', enabled=True, label=template + ) + + # Ensure we are in "debug" mode (so the report is generated as HTML) + InvenTreeSetting.set_setting('REPORT_ENABLE', True, None) + + # Set the 'debug' setting for the plugin + plugin = registry.get_plugin('inventreelabel') + plugin.set_setting('DEBUG', True) + + # Print via the API (Note: will default to the builtin plugin if no plugin supplied) + url = reverse('api-part-label-print', kwargs={'pk': label.pk}) + + prt = Part.objects.first() + part_pk = prt.pk + part_name = prt.name + + response = self.get(f'{url}?parts={part_pk}', expected_code=200) + data = json.loads(response.content) + self.assertIn('file', data) + + # Find the generated file + output = LabelOutput.objects.last() + + # Open the file and read data + with open(output.label.path, 'r') as f: + content = f.read() + + # Test that each element has been rendered correctly + self.assertIn(f'part: {part_pk} - {part_name}', content) + self.assertIn(f'data: {{"part": {part_pk}}}', content) + if settings.ENABLE_CLASSIC_FRONTEND: + self.assertIn(f'http://testserver/part/{part_pk}/', content) + + # Check that a encoded image has been generated + self.assertIn('data:image/png;charset=utf-8;base64,', content) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [StockItemLabel, StockLocationLabel, PartLabel]: + p = model.objects.first() + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po deleted file mode 100644 index 41e7bdce1a00..000000000000 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ /dev/null @@ -1,15239 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: inventree\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" -"Last-Translator: \n" -"Language-Team: Arabic\n" -"Language: ar_SA\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: ar\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" - -#: InvenTree/api.py:269 -msgid "API endpoint not found" -msgstr "نقطة نهاية API غير موجودة" - -#: InvenTree/api.py:502 -msgid "User does not have permission to view this model" -msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" - -#: InvenTree/conversion.py:160 -#, python-brace-format -msgid "Invalid unit provided ({unit})" -msgstr "الوحدة المقدمة غير صالحة ({unit})" - -#: InvenTree/conversion.py:177 -msgid "No value provided" -msgstr "لم يتم تقديم قيمة" - -#: InvenTree/conversion.py:204 -#, python-brace-format -msgid "Could not convert {original} to {unit}" -msgstr "تعذّر تحويل {original} إلى {unit}" - -#: InvenTree/conversion.py:206 -msgid "Invalid quantity supplied" -msgstr "الكمية المقدمة غير صحيحة" - -#: InvenTree/conversion.py:220 -#, python-brace-format -msgid "Invalid quantity supplied ({exc})" -msgstr "الكمية المقدمة غير صحيحة ({exc})" - -#: InvenTree/exceptions.py:108 -msgid "Error details can be found in the admin panel" -msgstr "يمكن العثور على تفاصيل الخطأ في لوحة التحكم" - -#: InvenTree/fields.py:136 -msgid "Enter date" -msgstr "أدخل التاريخ" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 -#: order/templates/order/return_order_sidebar.html:9 -#: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 -msgid "Notes" -msgstr "ملاحظات" - -#: InvenTree/format.py:164 -#, python-brace-format -msgid "Value '{name}' does not appear in pattern format" -msgstr "القيمة '{name}' لا تظهر في تنسيق النمط" - -#: InvenTree/format.py:175 -msgid "Provided value does not match required pattern: " -msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: " - -#: InvenTree/forms.py:129 -msgid "Enter password" -msgstr "أدخل كلمة المرور" - -#: InvenTree/forms.py:130 -msgid "Enter new password" -msgstr "أدخل كلمة مرور جديدة" - -#: InvenTree/forms.py:139 -msgid "Confirm password" -msgstr "تأكيد كلمة المرور" - -#: InvenTree/forms.py:140 -msgid "Confirm new password" -msgstr "تأكيد كلمة المرور الجديدة" - -#: InvenTree/forms.py:144 -msgid "Old password" -msgstr "كلمة المرور القديمة" - -#: InvenTree/forms.py:183 -msgid "Email (again)" -msgstr "البريد الإلكتروني (مرة أخرى)" - -#: InvenTree/forms.py:187 -msgid "Email address confirmation" -msgstr "تأكيد البريد الإلكتروني" - -#: InvenTree/forms.py:210 -msgid "You must type the same email each time." -msgstr "يجب عليك كتابة نفس البريد الإلكتروني كل مرة." - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 -msgid "The provided primary email address is not valid." -msgstr "عنوان البريد الإلكتروني الرئيسي المقدم غير صالح." - -#: InvenTree/forms.py:274 -msgid "The provided email domain is not approved." -msgstr "لم تتم الموافقة على نطاق البريد الإلكتروني المقدم." - -#: InvenTree/forms.py:403 -msgid "Registration is disabled." -msgstr "التسجيل معطل." - -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 -msgid "Invalid quantity provided" -msgstr "الكمية المقدمة غير صحيحة" - -#: InvenTree/helpers.py:499 -msgid "Empty serial number string" -msgstr "سلسلة الرقم التسلسلي فارغة" - -#: InvenTree/helpers.py:528 -msgid "Duplicate serial" -msgstr "تكرار التسلسل" - -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 -#, python-brace-format -msgid "Invalid group range: {group}" -msgstr "" - -#: InvenTree/helpers.py:591 -#, python-brace-format -msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 -#, python-brace-format -msgid "Invalid group sequence: {group}" -msgstr "" - -#: InvenTree/helpers.py:657 -msgid "No serial numbers found" -msgstr "" - -#: InvenTree/helpers.py:662 -msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:780 -msgid "Remove HTML tags from this value" -msgstr "" - -#: InvenTree/helpers_model.py:133 -msgid "Connection error" -msgstr "" - -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 -msgid "Server responded with invalid status code" -msgstr "" - -#: InvenTree/helpers_model.py:141 -msgid "Exception occurred" -msgstr "" - -#: InvenTree/helpers_model.py:151 -msgid "Server responded with invalid Content-Length value" -msgstr "" - -#: InvenTree/helpers_model.py:154 -msgid "Image size is too large" -msgstr "" - -#: InvenTree/helpers_model.py:166 -msgid "Image download exceeded maximum size" -msgstr "" - -#: InvenTree/helpers_model.py:171 -msgid "Remote server returned empty response" -msgstr "" - -#: InvenTree/helpers_model.py:179 -msgid "Supplied URL is not a valid image file" -msgstr "" - -#: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 -msgid "Bulgarian" -msgstr "" - -#: InvenTree/locales.py:20 -msgid "Czech" -msgstr "" - -#: InvenTree/locales.py:21 -msgid "Danish" -msgstr "" - -#: InvenTree/locales.py:22 -msgid "German" -msgstr "" - -#: InvenTree/locales.py:23 -msgid "Greek" -msgstr "" - -#: InvenTree/locales.py:24 -msgid "English" -msgstr "" - -#: InvenTree/locales.py:25 -msgid "Spanish" -msgstr "" - -#: InvenTree/locales.py:26 -msgid "Spanish (Mexican)" -msgstr "" - -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 -msgid "Farsi / Persian" -msgstr "" - -#: InvenTree/locales.py:29 -msgid "Finnish" -msgstr "" - -#: InvenTree/locales.py:30 -msgid "French" -msgstr "" - -#: InvenTree/locales.py:31 -msgid "Hebrew" -msgstr "" - -#: InvenTree/locales.py:32 -msgid "Hindi" -msgstr "" - -#: InvenTree/locales.py:33 -msgid "Hungarian" -msgstr "" - -#: InvenTree/locales.py:34 -msgid "Italian" -msgstr "" - -#: InvenTree/locales.py:35 -msgid "Japanese" -msgstr "" - -#: InvenTree/locales.py:36 -msgid "Korean" -msgstr "" - -#: InvenTree/locales.py:37 -msgid "Latvian" -msgstr "" - -#: InvenTree/locales.py:38 -msgid "Dutch" -msgstr "" - -#: InvenTree/locales.py:39 -msgid "Norwegian" -msgstr "" - -#: InvenTree/locales.py:40 -msgid "Polish" -msgstr "" - -#: InvenTree/locales.py:41 -msgid "Portuguese" -msgstr "" - -#: InvenTree/locales.py:42 -msgid "Portuguese (Brazilian)" -msgstr "" - -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 -msgid "Russian" -msgstr "" - -#: InvenTree/locales.py:45 -msgid "Slovak" -msgstr "" - -#: InvenTree/locales.py:46 -msgid "Slovenian" -msgstr "" - -#: InvenTree/locales.py:47 -msgid "Serbian" -msgstr "" - -#: InvenTree/locales.py:48 -msgid "Swedish" -msgstr "" - -#: InvenTree/locales.py:49 -msgid "Thai" -msgstr "" - -#: InvenTree/locales.py:50 -msgid "Turkish" -msgstr "" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 -msgid "Vietnamese" -msgstr "" - -#: InvenTree/locales.py:53 -msgid "Chinese (Simplified)" -msgstr "" - -#: InvenTree/locales.py:54 -msgid "Chinese (Traditional)" -msgstr "" - -#: InvenTree/magic_login.py:28 -#, python-brace-format -msgid "[{site_name}] Log in to the app" -msgstr "" - -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 -#: templates/InvenTree/settings/user.html:49 -#: templates/js/translated/company.js:677 -msgid "Email" -msgstr "" - -#: InvenTree/models.py:103 -msgid "Error running plugin validation" -msgstr "" - -#: InvenTree/models.py:172 -msgid "Metadata must be a python dict object" -msgstr "" - -#: InvenTree/models.py:178 -msgid "Plugin Metadata" -msgstr "" - -#: InvenTree/models.py:179 -msgid "JSON metadata field, for use by external plugins" -msgstr "" - -#: InvenTree/models.py:409 -msgid "Improperly formatted pattern" -msgstr "" - -#: InvenTree/models.py:416 -msgid "Unknown format key specified" -msgstr "" - -#: InvenTree/models.py:422 -msgid "Missing required format key" -msgstr "" - -#: InvenTree/models.py:433 -msgid "Reference field cannot be empty" -msgstr "" - -#: InvenTree/models.py:441 -msgid "Reference must match required pattern" -msgstr "" - -#: InvenTree/models.py:472 -msgid "Reference number is too large" -msgstr "" - -#: InvenTree/models.py:723 -msgid "Duplicate names cannot exist under the same parent" -msgstr "" - -#: InvenTree/models.py:740 -msgid "Invalid choice" -msgstr "" - -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 -#: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 -#: templates/InvenTree/settings/plugin_settings.html:22 -#: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 -#: templates/js/translated/company.js:676 -#: templates/js/translated/company.js:724 -#: templates/js/translated/company.js:913 -#: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 -msgid "Name" -msgstr "" - -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 -#: company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 -#: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 -#: templates/InvenTree/settings/notifications.html:19 -#: templates/InvenTree/settings/plugin_settings.html:27 -#: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 -#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 -#: templates/js/translated/company.js:1330 -#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 -#: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 -msgid "Description" -msgstr "" - -#: InvenTree/models.py:777 stock/models.py:84 -msgid "Description (optional)" -msgstr "" - -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 -msgid "Path" -msgstr "" - -#: InvenTree/models.py:929 -msgid "Markdown notes (optional)" -msgstr "" - -#: InvenTree/models.py:960 -msgid "Barcode Data" -msgstr "" - -#: InvenTree/models.py:961 -msgid "Third party barcode data" -msgstr "" - -#: InvenTree/models.py:967 -msgid "Barcode Hash" -msgstr "" - -#: InvenTree/models.py:968 -msgid "Unique hash of barcode data" -msgstr "" - -#: InvenTree/models.py:1035 -msgid "Existing barcode found" -msgstr "" - -#: InvenTree/models.py:1078 -msgid "Server Error" -msgstr "" - -#: InvenTree/models.py:1079 -msgid "An error has been logged by the server." -msgstr "" - -#: InvenTree/serializers.py:63 part/models.py:4387 -msgid "Must be a valid number" -msgstr "" - -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 -#: templates/InvenTree/settings/settings_staff_js.html:44 -#: templates/currency_data.html:5 -msgid "Currency" -msgstr "" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "" - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "" - -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" -msgstr "" - -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "" - -#: InvenTree/serializers.py:561 -msgid "Invalid value" -msgstr "" - -#: InvenTree/serializers.py:581 importer/models.py:63 -msgid "Data File" -msgstr "" - -#: InvenTree/serializers.py:582 -msgid "Select data file for upload" -msgstr "" - -#: InvenTree/serializers.py:599 -msgid "Unsupported file type" -msgstr "" - -#: InvenTree/serializers.py:605 -msgid "File is too large" -msgstr "" - -#: InvenTree/serializers.py:626 -msgid "No columns found in file" -msgstr "" - -#: InvenTree/serializers.py:629 -msgid "No data rows found in file" -msgstr "" - -#: InvenTree/serializers.py:742 -msgid "No data rows provided" -msgstr "" - -#: InvenTree/serializers.py:745 -msgid "No data columns supplied" -msgstr "" - -#: InvenTree/serializers.py:812 -#, python-brace-format -msgid "Missing required column: '{name}'" -msgstr "" - -#: InvenTree/serializers.py:821 -#, python-brace-format -msgid "Duplicate column: '{col}'" -msgstr "" - -#: InvenTree/serializers.py:861 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" -msgstr "" - -#: InvenTree/status.py:70 -msgid "Email backend not configured" -msgstr "" - -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" -msgstr "" - -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" -msgstr "" - -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" -msgstr "" - -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" -msgstr "" - -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" -msgstr "" - -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" -msgstr "" - -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" -msgstr "" - -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" -msgstr "" - -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" -msgstr "" - -#: InvenTree/views.py:434 -msgid "Password fields must match" -msgstr "" - -#: InvenTree/views.py:442 -msgid "Wrong password provided" -msgstr "" - -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" -msgstr "" - -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" -msgstr "" - -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "" - -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" -msgstr "" - -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" -msgstr "" - -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" -msgstr "" - -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" -msgstr "" - -#: build/models.py:180 -msgid "Build order part cannot be changed" -msgstr "" - -#: build/models.py:241 -msgid "Build Order Reference" -msgstr "" - -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 -#: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 -#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 -msgid "Reference" -msgstr "" - -#: build/models.py:253 -msgid "Brief description of the build (optional)" -msgstr "" - -#: build/models.py:262 -msgid "BuildOrder to which this build is allocated" -msgstr "" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 -#: part/templates/part/part_app_base.html:8 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/upload_bom.html:52 -#: report/templates/report/inventree_bill_of_materials_report.html:110 -#: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 -#: templates/email/build_order_completed.html:17 -#: templates/email/build_order_required_stock.html:17 -#: templates/email/low_stock_notification.html:15 -#: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 -#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 -#: templates/js/translated/company.js:1116 -#: templates/js/translated/company.js:1271 -#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 -#: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 -#: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 -msgid "Part" -msgstr "" - -#: build/models.py:275 -msgid "Select part to build" -msgstr "" - -#: build/models.py:280 -msgid "Sales Order Reference" -msgstr "" - -#: build/models.py:284 -msgid "SalesOrder to which this build is allocated" -msgstr "" - -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 -msgid "Source Location" -msgstr "" - -#: build/models.py:293 -msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" - -#: build/models.py:298 -msgid "Destination Location" -msgstr "" - -#: build/models.py:302 -msgid "Select location where the completed items will be stored" -msgstr "" - -#: build/models.py:306 -msgid "Build Quantity" -msgstr "" - -#: build/models.py:309 -msgid "Number of stock items to build" -msgstr "" - -#: build/models.py:313 -msgid "Completed items" -msgstr "" - -#: build/models.py:315 -msgid "Number of stock items which have been completed" -msgstr "" - -#: build/models.py:319 -msgid "Build Status" -msgstr "" - -#: build/models.py:323 -msgid "Build status code" -msgstr "" - -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 -msgid "Batch Code" -msgstr "" - -#: build/models.py:336 build/serializers.py:303 -msgid "Batch code for this build output" -msgstr "" - -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 -msgid "Creation Date" -msgstr "" - -#: build/models.py:343 -msgid "Target completion date" -msgstr "" - -#: build/models.py:344 -msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" - -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 -msgid "Completion Date" -msgstr "" - -#: build/models.py:353 -msgid "completed by" -msgstr "" - -#: build/models.py:361 templates/js/translated/build.js:2379 -msgid "Issued by" -msgstr "" - -#: build/models.py:362 -msgid "User who issued this build order" -msgstr "" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 -#: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 -msgid "Responsible" -msgstr "" - -#: build/models.py:371 -msgid "User or group responsible for this build order" -msgstr "" - -#: build/models.py:376 build/templates/build/detail.html:108 -#: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 -#: stock/templates/stock/item_base.html:200 -#: templates/js/translated/company.js:1019 -msgid "External Link" -msgstr "" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 -msgid "Build Priority" -msgstr "" - -#: build/models.py:384 -msgid "Priority of this build order" -msgstr "" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 -#: templates/project_code_data.html:6 -msgid "Project Code" -msgstr "" - -#: build/models.py:392 -msgid "Project code for this build order" -msgstr "" - -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 -#, python-brace-format -msgid "Build order {build} has been completed" -msgstr "" - -#: build/models.py:679 -msgid "A build order has been completed" -msgstr "" - -#: build/models.py:967 build/models.py:1055 -msgid "No build output specified" -msgstr "" - -#: build/models.py:970 -msgid "Build output is already completed" -msgstr "" - -#: build/models.py:973 -msgid "Build output does not match Build Order" -msgstr "" - -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 -msgid "Quantity must be greater than zero" -msgstr "" - -#: build/models.py:1064 build/serializers.py:240 -msgid "Quantity cannot be greater than the output quantity" -msgstr "" - -#: build/models.py:1124 build/serializers.py:563 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 -msgid "Build object" -msgstr "" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 -#: part/templates/part/part_pricing.html:16 -#: part/templates/part/upload_bom.html:53 -#: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 -#: stock/templates/stock/item_base.html:287 -#: stock/templates/stock/item_base.html:295 -#: stock/templates/stock/item_base.html:342 -#: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 -#: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 -#: templates/js/translated/pricing.js:381 -#: templates/js/translated/pricing.js:474 -#: templates/js/translated/pricing.js:522 -#: templates/js/translated/pricing.js:616 -#: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 -#: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 -msgid "Quantity" -msgstr "" - -#: build/models.py:1505 -msgid "Required quantity for build order" -msgstr "" - -#: build/models.py:1585 -msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" - -#: build/models.py:1594 -#, python-brace-format -msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" - -#: build/models.py:1604 order/models.py:1992 -msgid "Stock item is over-allocated" -msgstr "" - -#: build/models.py:1610 order/models.py:1995 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1616 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1675 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 -#: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 -#: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 -msgid "Stock Item" -msgstr "" - -#: build/models.py:1748 -msgid "Source stock item" -msgstr "" - -#: build/models.py:1761 -msgid "Stock quantity to allocate to build" -msgstr "" - -#: build/models.py:1769 -msgid "Install into" -msgstr "" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 -msgid "Build Output" -msgstr "" - -#: build/serializers.py:184 -msgid "Build output does not match the parent build" -msgstr "" - -#: build/serializers.py:188 -msgid "Output part does not match BuildOrder part" -msgstr "" - -#: build/serializers.py:192 -msgid "This build output has already been completed" -msgstr "" - -#: build/serializers.py:203 -msgid "This build output is not fully allocated" -msgstr "" - -#: build/serializers.py:223 build/serializers.py:270 -msgid "Enter quantity for build output" -msgstr "" - -#: build/serializers.py:291 -msgid "Integer quantity required for trackable parts" -msgstr "" - -#: build/serializers.py:294 -msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" - -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 -msgid "Serial Numbers" -msgstr "" - -#: build/serializers.py:310 -msgid "Enter serial numbers for build outputs" -msgstr "" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:331 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:457 -msgid "Stock location for scrapped outputs" -msgstr "" - -#: build/serializers.py:463 -msgid "Discard Allocations" -msgstr "" - -#: build/serializers.py:464 -msgid "Discard any stock allocations for scrapped outputs" -msgstr "" - -#: build/serializers.py:469 -msgid "Reason for scrapping build output(s)" -msgstr "" - -#: build/serializers.py:529 -msgid "Location for completed build outputs" -msgstr "" - -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 -msgid "Status" -msgstr "" - -#: build/serializers.py:541 -msgid "Accept Incomplete Allocation" -msgstr "" - -#: build/serializers.py:542 -msgid "Complete outputs if stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" - -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" - -#: build/serializers.py:661 -msgid "Remove Incomplete Outputs" -msgstr "" - -#: build/serializers.py:662 -msgid "Delete any build outputs which have not been completed" -msgstr "" - -#: build/serializers.py:689 -msgid "Not permitted" -msgstr "" - -#: build/serializers.py:690 -msgid "Accept as consumed by this build order" -msgstr "" - -#: build/serializers.py:691 -msgid "Deallocate before completing this build order" -msgstr "" - -#: build/serializers.py:721 -msgid "Overallocated Stock" -msgstr "" - -#: build/serializers.py:723 -msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" - -#: build/serializers.py:733 -msgid "Some stock items have been overallocated" -msgstr "" - -#: build/serializers.py:738 -msgid "Accept Unallocated" -msgstr "" - -#: build/serializers.py:739 -msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" - -#: build/serializers.py:749 templates/js/translated/build.js:316 -msgid "Required stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 -msgid "Accept Incomplete" -msgstr "" - -#: build/serializers.py:755 -msgid "Accept that the required number of build outputs have not been completed" -msgstr "" - -#: build/serializers.py:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 -msgid "Build order has incomplete outputs" -msgstr "" - -#: build/serializers.py:818 -msgid "Build Line" -msgstr "" - -#: build/serializers.py:828 -msgid "Build output" -msgstr "" - -#: build/serializers.py:836 -msgid "Build output must point to the same build" -msgstr "" - -#: build/serializers.py:872 -msgid "Build Line Item" -msgstr "" - -#: build/serializers.py:886 -msgid "bom_item.part must point to the same part as the build order" -msgstr "" - -#: build/serializers.py:901 stock/serializers.py:1294 -msgid "Item must be in stock" -msgstr "" - -#: build/serializers.py:949 order/serializers.py:1351 -#, python-brace-format -msgid "Available quantity ({q}) exceeded" -msgstr "" - -#: build/serializers.py:955 -msgid "Build output must be specified for allocation of tracked parts" -msgstr "" - -#: build/serializers.py:962 -msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" - -#: build/serializers.py:986 order/serializers.py:1610 -msgid "Allocation items must be provided" -msgstr "" - -#: build/serializers.py:1049 -msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" - -#: build/serializers.py:1057 -msgid "Exclude Location" -msgstr "" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "" - -#: build/serializers.py:1064 -msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" - -#: build/serializers.py:1069 -msgid "Substitute Stock" -msgstr "" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 -msgid "Stock required for build order" -msgstr "" - -#: build/tasks.py:201 -msgid "Overdue Build Order" -msgstr "" - -#: build/tasks.py:206 -#, python-brace-format -msgid "Build order {bo} is now overdue" -msgstr "" - -#: build/templates/build/build_base.html:18 -msgid "Part thumbnail" -msgstr "" - -#: build/templates/build/build_base.html:38 -#: company/templates/company/supplier_part.html:35 -#: order/templates/order/order_base.html:29 -#: order/templates/order/return_order_base.html:38 -#: order/templates/order/sales_order_base.html:38 -#: part/templates/part/part_base.html:41 -#: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 -msgid "Barcode actions" -msgstr "" - -#: build/templates/build/build_base.html:42 -#: company/templates/company/supplier_part.html:39 -#: order/templates/order/order_base.html:33 -#: order/templates/order/return_order_base.html:42 -#: order/templates/order/sales_order_base.html:42 -#: part/templates/part/part_base.html:44 -#: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: build/templates/build/build_base.html:45 -#: company/templates/company/supplier_part.html:41 -#: order/templates/order/order_base.html:36 -#: order/templates/order/return_order_base.html:45 -#: order/templates/order/sales_order_base.html:45 -#: part/templates/part/part_base.html:47 -#: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 -msgid "Unlink Barcode" -msgstr "" - -#: build/templates/build/build_base.html:47 -#: company/templates/company/supplier_part.html:43 -#: order/templates/order/order_base.html:38 -#: order/templates/order/return_order_base.html:47 -#: order/templates/order/sales_order_base.html:47 -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 -msgid "Link Barcode" -msgstr "" - -#: build/templates/build/build_base.html:56 -#: order/templates/order/order_base.html:46 -#: order/templates/order/return_order_base.html:55 -#: order/templates/order/sales_order_base.html:55 -msgid "Print actions" -msgstr "" - -#: build/templates/build/build_base.html:60 -msgid "Print build order report" -msgstr "" - -#: build/templates/build/build_base.html:67 -msgid "Build actions" -msgstr "" - -#: build/templates/build/build_base.html:71 -msgid "Edit Build" -msgstr "" - -#: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" - -#: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" - -#: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 -msgid "Delete Build" -msgstr "" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 -msgid "Complete Build" -msgstr "" - -#: build/templates/build/build_base.html:115 -msgid "Build Description" -msgstr "" - -#: build/templates/build/build_base.html:125 -msgid "No build outputs have been created for this build order" -msgstr "" - -#: build/templates/build/build_base.html:132 -msgid "Build Order is ready to mark as completed" -msgstr "" - -#: build/templates/build/build_base.html:137 -msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" - -#: build/templates/build/build_base.html:142 -msgid "Required build quantity has not yet been completed" -msgstr "" - -#: build/templates/build/build_base.html:147 -msgid "Stock has not been fully allocated to this Build Order" -msgstr "" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 -msgid "Target Date" -msgstr "" - -#: build/templates/build/build_base.html:173 -#, python-format -msgid "This build was due on %(target)s" -msgstr "" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 -msgid "Overdue" -msgstr "" - -#: build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 -msgid "Completed Outputs" -msgstr "" - -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 -#: order/templates/order/sales_order_base.html:9 -#: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 -#: stock/templates/stock/item_base.html:369 -#: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 -msgid "Sales Order" -msgstr "" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 -msgid "Delete Build Order" -msgstr "" - -#: build/templates/build/build_base.html:312 -msgid "Build Order QR Code" -msgstr "" - -#: build/templates/build/build_base.html:324 -msgid "Link Barcode to Build Order" -msgstr "" - -#: build/templates/build/detail.html:15 -msgid "Build Details" -msgstr "" - -#: build/templates/build/detail.html:38 -msgid "Stock Source" -msgstr "" - -#: build/templates/build/detail.html:43 -msgid "Stock can be taken from any available location." -msgstr "" - -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 -msgid "Destination" -msgstr "" - -#: build/templates/build/detail.html:56 -msgid "Destination location not specified" -msgstr "" - -#: build/templates/build/detail.html:73 -msgid "Allocated Parts" -msgstr "" - -#: build/templates/build/detail.html:80 stock/admin.py:162 -#: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 -msgid "Batch" -msgstr "" - -#: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 -msgid "Created" -msgstr "" - -#: build/templates/build/detail.html:144 -msgid "No target date set" -msgstr "" - -#: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 -msgid "Completed" -msgstr "" - -#: build/templates/build/detail.html:153 -msgid "Build not complete" -msgstr "" - -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 -msgid "Child Build Orders" -msgstr "" - -#: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" - -#: build/templates/build/detail.html:181 -msgid "Deallocate stock" -msgstr "" - -#: build/templates/build/detail.html:182 -msgid "Deallocate Stock" -msgstr "" - -#: build/templates/build/detail.html:184 -msgid "Automatically allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:185 -msgid "Auto Allocate" -msgstr "" - -#: build/templates/build/detail.html:187 -msgid "Manually allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:188 -msgid "Allocate Stock" -msgstr "" - -#: build/templates/build/detail.html:191 -msgid "Order required parts" -msgstr "" - -#: build/templates/build/detail.html:192 -#: templates/js/translated/purchase_order.js:795 -msgid "Order Parts" -msgstr "" - -#: build/templates/build/detail.html:205 -msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" - -#: build/templates/build/detail.html:215 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:219 -msgid "Create new build output" -msgstr "" - -#: build/templates/build/detail.html:220 -msgid "New Build Output" -msgstr "" - -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 -msgid "Consumed Stock" -msgstr "" - -#: build/templates/build/detail.html:261 -msgid "Completed Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 -#: company/templates/company/detail.html:229 -#: company/templates/company/manufacturer_part.html:141 -#: company/templates/company/manufacturer_part_sidebar.html:9 -#: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - -#: common/files.py:63 -#, python-brace-format -msgid "Unsupported file format: {fmt}" -msgstr "" - -#: common/files.py:65 -msgid "Error reading file (invalid encoding)" -msgstr "" - -#: common/files.py:70 -msgid "Error reading file (invalid format)" -msgstr "" - -#: common/files.py:72 -msgid "Error reading file (incorrect dimension)" -msgstr "" - -#: common/files.py:74 -msgid "Error reading file (data could be corrupted)" -msgstr "" - -#: common/forms.py:12 -msgid "File" -msgstr "" - -#: common/forms.py:12 -msgid "Select file to upload" -msgstr "" - -#: common/forms.py:25 -msgid "{name.title()} File" -msgstr "" - -#: common/forms.py:26 -#, python-brace-format -msgid "Select {name} file to upload" -msgstr "" - -#: common/models.py:86 -msgid "Updated" -msgstr "" - -#: common/models.py:87 -msgid "Timestamp of last update" -msgstr "" - -#: common/models.py:120 -msgid "Site URL is locked by configuration" -msgstr "" - -#: common/models.py:150 -msgid "Unique project code" -msgstr "" - -#: common/models.py:157 -msgid "Project description" -msgstr "" - -#: common/models.py:166 -msgid "User or group responsible for this project" -msgstr "" - -#: common/models.py:783 -msgid "Settings key (must be unique - case insensitive)" -msgstr "" - -#: common/models.py:787 -msgid "Settings value" -msgstr "" - -#: common/models.py:839 -msgid "Chosen value is not a valid option" -msgstr "" - -#: common/models.py:855 -msgid "Value must be a boolean value" -msgstr "" - -#: common/models.py:863 -msgid "Value must be an integer value" -msgstr "" - -#: common/models.py:900 -msgid "Key string must be unique" -msgstr "" - -#: common/models.py:1132 -msgid "No group" -msgstr "" - -#: common/models.py:1231 -msgid "Restart required" -msgstr "" - -#: common/models.py:1233 -msgid "A setting has been changed which requires a server restart" -msgstr "" - -#: common/models.py:1240 -msgid "Pending migrations" -msgstr "" - -#: common/models.py:1241 -msgid "Number of pending database migrations" -msgstr "" - -#: common/models.py:1246 -msgid "Server Instance Name" -msgstr "" - -#: common/models.py:1248 -msgid "String descriptor for the server instance" -msgstr "" - -#: common/models.py:1252 -msgid "Use instance name" -msgstr "" - -#: common/models.py:1253 -msgid "Use the instance name in the title-bar" -msgstr "" - -#: common/models.py:1258 -msgid "Restrict showing `about`" -msgstr "" - -#: common/models.py:1259 -msgid "Show the `about` modal only to superusers" -msgstr "" - -#: common/models.py:1264 company/models.py:111 company/models.py:112 -msgid "Company name" -msgstr "" - -#: common/models.py:1265 -msgid "Internal company name" -msgstr "" - -#: common/models.py:1269 -msgid "Base URL" -msgstr "" - -#: common/models.py:1270 -msgid "Base URL for server instance" -msgstr "" - -#: common/models.py:1276 -msgid "Default Currency" -msgstr "" - -#: common/models.py:1277 -msgid "Select base currency for pricing calculations" -msgstr "" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 -msgid "Currency Update Interval" -msgstr "" - -#: common/models.py:1292 -msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" - -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 -msgid "days" -msgstr "" - -#: common/models.py:1299 -msgid "Currency Update Plugin" -msgstr "" - -#: common/models.py:1300 -msgid "Currency update plugin to use" -msgstr "" - -#: common/models.py:1305 -msgid "Download from URL" -msgstr "" - -#: common/models.py:1307 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/models.py:1313 -msgid "Download Size Limit" -msgstr "" - -#: common/models.py:1314 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/models.py:1320 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:1322 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" - -#: common/models.py:1327 -msgid "Strict URL Validation" -msgstr "" - -#: common/models.py:1328 -msgid "Require schema specification when validating URLs" -msgstr "" - -#: common/models.py:1333 -msgid "Require confirm" -msgstr "" - -#: common/models.py:1334 -msgid "Require explicit user confirmation for certain action." -msgstr "" - -#: common/models.py:1339 -msgid "Tree Depth" -msgstr "" - -#: common/models.py:1341 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" - -#: common/models.py:1347 -msgid "Update Check Interval" -msgstr "" - -#: common/models.py:1348 -msgid "How often to check for updates (set to zero to disable)" -msgstr "" - -#: common/models.py:1354 -msgid "Automatic Backup" -msgstr "" - -#: common/models.py:1355 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:1360 -msgid "Auto Backup Interval" -msgstr "" - -#: common/models.py:1361 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:1367 -msgid "Task Deletion Interval" -msgstr "" - -#: common/models.py:1369 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1376 -msgid "Error Log Deletion Interval" -msgstr "" - -#: common/models.py:1378 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1385 -msgid "Notification Deletion Interval" -msgstr "" - -#: common/models.py:1387 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1395 -msgid "Enable barcode scanner support in the web interface" -msgstr "" - -#: common/models.py:1400 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1401 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1407 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 -msgid "Part Revisions" -msgstr "" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "" - -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1444 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1447 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1448 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1453 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1454 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1459 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1460 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1465 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1466 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1471 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1472 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1477 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1478 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 -msgid "Template" -msgstr "" - -#: common/models.py:1484 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1490 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 -msgid "Component" -msgstr "" - -#: common/models.py:1496 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1502 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 -msgid "Salable" -msgstr "" - -#: common/models.py:1508 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1514 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 -#: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 -msgid "Virtual" -msgstr "" - -#: common/models.py:1520 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1525 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1526 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1531 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1532 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1537 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1538 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1543 templates/js/translated/part.js:108 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1545 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1551 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1552 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1558 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1559 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1564 -msgid "Enforce Parameter Units" -msgstr "" - -#: common/models.py:1566 -msgid "If units are provided, parameter values must match the specified units" -msgstr "" - -#: common/models.py:1572 -msgid "Minimum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1574 -msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1585 -msgid "Maximum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1587 -msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1598 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1600 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1606 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1608 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1614 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1616 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1622 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1624 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1631 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1632 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1637 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1639 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1645 -msgid "Pricing Rebuild Interval" -msgstr "" - -#: common/models.py:1647 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1654 -msgid "Internal Prices" -msgstr "" - -#: common/models.py:1655 -msgid "Enable internal prices for parts" -msgstr "" - -#: common/models.py:1660 -msgid "Internal Price Override" -msgstr "" - -#: common/models.py:1662 -msgid "If available, internal prices override price range calculations" -msgstr "" - -#: common/models.py:1668 -msgid "Enable label printing" -msgstr "" - -#: common/models.py:1669 -msgid "Enable label printing from the web interface" -msgstr "" - -#: common/models.py:1674 -msgid "Label Image DPI" -msgstr "" - -#: common/models.py:1676 -msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" - -#: common/models.py:1682 -msgid "Enable Reports" -msgstr "" - -#: common/models.py:1683 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1688 templates/stats.html:25 -msgid "Debug Mode" -msgstr "" - -#: common/models.py:1689 -msgid "Generate reports in debug mode (HTML output)" -msgstr "" - -#: common/models.py:1694 -msgid "Log Report Errors" -msgstr "" - -#: common/models.py:1695 -msgid "Log errors which occur when generating reports" -msgstr "" - -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 -msgid "Page Size" -msgstr "" - -#: common/models.py:1701 -msgid "Default page size for PDF reports" -msgstr "" - -#: common/models.py:1706 -msgid "Enable Test Reports" -msgstr "" - -#: common/models.py:1707 -msgid "Enable generation of test reports" -msgstr "" - -#: common/models.py:1712 -msgid "Attach Test Reports" -msgstr "" - -#: common/models.py:1714 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "" - -#: common/models.py:1720 -msgid "Globally Unique Serials" -msgstr "" - -#: common/models.py:1721 -msgid "Serial numbers for stock items must be globally unique" -msgstr "" - -#: common/models.py:1726 -msgid "Autofill Serial Numbers" -msgstr "" - -#: common/models.py:1727 -msgid "Autofill serial numbers in forms" -msgstr "" - -#: common/models.py:1732 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1734 -msgid "Determines default behavior when a stock item is depleted" -msgstr "" - -#: common/models.py:1740 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1742 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1747 -msgid "Stock Expiry" -msgstr "" - -#: common/models.py:1748 -msgid "Enable stock expiry functionality" -msgstr "" - -#: common/models.py:1753 -msgid "Sell Expired Stock" -msgstr "" - -#: common/models.py:1754 -msgid "Allow sale of expired stock" -msgstr "" - -#: common/models.py:1759 -msgid "Stock Stale Time" -msgstr "" - -#: common/models.py:1761 -msgid "Number of days stock items are considered stale before expiring" -msgstr "" - -#: common/models.py:1768 -msgid "Build Expired Stock" -msgstr "" - -#: common/models.py:1769 -msgid "Allow building with expired stock" -msgstr "" - -#: common/models.py:1774 -msgid "Stock Ownership Control" -msgstr "" - -#: common/models.py:1775 -msgid "Enable ownership control over stock locations and items" -msgstr "" - -#: common/models.py:1780 -msgid "Stock Location Default Icon" -msgstr "" - -#: common/models.py:1781 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1786 -msgid "Show Installed Stock Items" -msgstr "" - -#: common/models.py:1787 -msgid "Display installed stock items in stock tables" -msgstr "" - -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 -msgid "Build Order Reference Pattern" -msgstr "" - -#: common/models.py:1810 -msgid "Required pattern for generating Build Order reference field" -msgstr "" - -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/models.py:1852 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" - -#: common/models.py:1858 -msgid "Enable Return Orders" -msgstr "" - -#: common/models.py:1859 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1864 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1866 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1878 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1880 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1886 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1888 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1900 -msgid "Sales Order Default Shipment" -msgstr "" - -#: common/models.py:1901 -msgid "Enable creation of default shipment with sales orders" -msgstr "" - -#: common/models.py:1906 -msgid "Edit Completed Sales Orders" -msgstr "" - -#: common/models.py:1908 -msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 -msgid "Purchase Order Reference Pattern" -msgstr "" - -#: common/models.py:1924 -msgid "Required pattern for generating Purchase Order reference field" -msgstr "" - -#: common/models.py:1936 -msgid "Edit Completed Purchase Orders" -msgstr "" - -#: common/models.py:1938 -msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1944 -msgid "Auto Complete Purchase Orders" -msgstr "" - -#: common/models.py:1946 -msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" - -#: common/models.py:1953 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1954 -msgid "Enable password forgot function on the login pages" -msgstr "" - -#: common/models.py:1959 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1960 -msgid "Enable self-registration for users on the login pages" -msgstr "" - -#: common/models.py:1965 -msgid "Enable SSO" -msgstr "" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "" - -#: common/models.py:1973 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" - -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 -msgid "Email required" -msgstr "" - -#: common/models.py:2012 -msgid "Require user to supply mail on signup" -msgstr "" - -#: common/models.py:2017 -msgid "Auto-fill SSO users" -msgstr "" - -#: common/models.py:2019 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" - -#: common/models.py:2025 -msgid "Mail twice" -msgstr "" - -#: common/models.py:2026 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:2031 -msgid "Password twice" -msgstr "" - -#: common/models.py:2032 -msgid "On signup ask users twice for their password" -msgstr "" - -#: common/models.py:2037 -msgid "Allowed domains" -msgstr "" - -#: common/models.py:2039 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" - -#: common/models.py:2045 -msgid "Group on signup" -msgstr "" - -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" - -#: common/models.py:2053 -msgid "Enforce MFA" -msgstr "" - -#: common/models.py:2054 -msgid "Users must use multifactor security." -msgstr "" - -#: common/models.py:2059 -msgid "Check plugins on startup" -msgstr "" - -#: common/models.py:2061 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:2069 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:2070 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:2076 -msgid "Enable URL integration" -msgstr "" - -#: common/models.py:2077 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:2083 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:2084 -msgid "Enable plugins to integrate into navigation" -msgstr "" - -#: common/models.py:2090 -msgid "Enable app integration" -msgstr "" - -#: common/models.py:2091 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:2097 -msgid "Enable schedule integration" -msgstr "" - -#: common/models.py:2098 -msgid "Enable plugins to run scheduled tasks" -msgstr "" - -#: common/models.py:2104 -msgid "Enable event integration" -msgstr "" - -#: common/models.py:2105 -msgid "Enable plugins to respond to internal events" -msgstr "" - -#: common/models.py:2111 -msgid "Enable project codes" -msgstr "" - -#: common/models.py:2112 -msgid "Enable project codes for tracking projects" -msgstr "" - -#: common/models.py:2117 -msgid "Stocktake Functionality" -msgstr "" - -#: common/models.py:2119 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "" - -#: common/models.py:2125 -msgid "Exclude External Locations" -msgstr "" - -#: common/models.py:2127 -msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" - -#: common/models.py:2133 -msgid "Automatic Stocktake Period" -msgstr "" - -#: common/models.py:2135 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "" - -#: common/models.py:2141 -msgid "Report Deletion Interval" -msgstr "" - -#: common/models.py:2143 -msgid "Stocktake reports will be deleted after specified number of days" -msgstr "" - -#: common/models.py:2150 -msgid "Display Users full names" -msgstr "" - -#: common/models.py:2151 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/models.py:2156 -msgid "Enable Test Station Data" -msgstr "" - -#: common/models.py:2157 -msgid "Enable test station data collection for test results" -msgstr "" - -#: common/models.py:2169 common/models.py:2549 -msgid "Settings key (must be unique - case insensitive" -msgstr "" - -#: common/models.py:2212 -msgid "Hide inactive parts" -msgstr "" - -#: common/models.py:2214 -msgid "Hide inactive parts in results displayed on the homepage" -msgstr "" - -#: common/models.py:2220 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2221 -msgid "Show subscribed parts on the homepage" -msgstr "" - -#: common/models.py:2226 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:2227 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:2232 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:2233 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:2238 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2239 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:2244 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:2245 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:2250 -msgid "Show low stock" -msgstr "" - -#: common/models.py:2251 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2256 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2257 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2262 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2263 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2268 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2269 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2274 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2275 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2280 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2281 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2286 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2287 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2292 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2293 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2298 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2299 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2304 -msgid "Show outstanding SOs" -msgstr "" - -#: common/models.py:2305 -msgid "Show outstanding SOs on the homepage" -msgstr "" - -#: common/models.py:2310 -msgid "Show overdue SOs" -msgstr "" - -#: common/models.py:2311 -msgid "Show overdue SOs on the homepage" -msgstr "" - -#: common/models.py:2316 -msgid "Show pending SO shipments" -msgstr "" - -#: common/models.py:2317 -msgid "Show pending SO shipments on the homepage" -msgstr "" - -#: common/models.py:2322 -msgid "Show News" -msgstr "" - -#: common/models.py:2323 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:2328 -msgid "Inline label display" -msgstr "" - -#: common/models.py:2330 -msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2336 -msgid "Default label printer" -msgstr "" - -#: common/models.py:2338 -msgid "Configure which label printer should be selected by default" -msgstr "" - -#: common/models.py:2344 -msgid "Inline report display" -msgstr "" - -#: common/models.py:2346 -msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2352 -msgid "Search Parts" -msgstr "" - -#: common/models.py:2353 -msgid "Display parts in search preview window" -msgstr "" - -#: common/models.py:2358 -msgid "Search Supplier Parts" -msgstr "" - -#: common/models.py:2359 -msgid "Display supplier parts in search preview window" -msgstr "" - -#: common/models.py:2364 -msgid "Search Manufacturer Parts" -msgstr "" - -#: common/models.py:2365 -msgid "Display manufacturer parts in search preview window" -msgstr "" - -#: common/models.py:2370 -msgid "Hide Inactive Parts" -msgstr "" - -#: common/models.py:2371 -msgid "Excluded inactive parts from search preview window" -msgstr "" - -#: common/models.py:2376 -msgid "Search Categories" -msgstr "" - -#: common/models.py:2377 -msgid "Display part categories in search preview window" -msgstr "" - -#: common/models.py:2382 -msgid "Search Stock" -msgstr "" - -#: common/models.py:2383 -msgid "Display stock items in search preview window" -msgstr "" - -#: common/models.py:2388 -msgid "Hide Unavailable Stock Items" -msgstr "" - -#: common/models.py:2390 -msgid "Exclude stock items which are not available from the search preview window" -msgstr "" - -#: common/models.py:2396 -msgid "Search Locations" -msgstr "" - -#: common/models.py:2397 -msgid "Display stock locations in search preview window" -msgstr "" - -#: common/models.py:2402 -msgid "Search Companies" -msgstr "" - -#: common/models.py:2403 -msgid "Display companies in search preview window" -msgstr "" - -#: common/models.py:2408 -msgid "Search Build Orders" -msgstr "" - -#: common/models.py:2409 -msgid "Display build orders in search preview window" -msgstr "" - -#: common/models.py:2414 -msgid "Search Purchase Orders" -msgstr "" - -#: common/models.py:2415 -msgid "Display purchase orders in search preview window" -msgstr "" - -#: common/models.py:2420 -msgid "Exclude Inactive Purchase Orders" -msgstr "" - -#: common/models.py:2422 -msgid "Exclude inactive purchase orders from search preview window" -msgstr "" - -#: common/models.py:2428 -msgid "Search Sales Orders" -msgstr "" - -#: common/models.py:2429 -msgid "Display sales orders in search preview window" -msgstr "" - -#: common/models.py:2434 -msgid "Exclude Inactive Sales Orders" -msgstr "" - -#: common/models.py:2436 -msgid "Exclude inactive sales orders from search preview window" -msgstr "" - -#: common/models.py:2442 -msgid "Search Return Orders" -msgstr "" - -#: common/models.py:2443 -msgid "Display return orders in search preview window" -msgstr "" - -#: common/models.py:2448 -msgid "Exclude Inactive Return Orders" -msgstr "" - -#: common/models.py:2450 -msgid "Exclude inactive return orders from search preview window" -msgstr "" - -#: common/models.py:2456 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:2458 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:2464 -msgid "Regex Search" -msgstr "" - -#: common/models.py:2465 -msgid "Enable regular expressions in search queries" -msgstr "" - -#: common/models.py:2470 -msgid "Whole Word Search" -msgstr "" - -#: common/models.py:2471 -msgid "Search queries return results for whole word matches" -msgstr "" - -#: common/models.py:2476 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:2477 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2482 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:2483 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2488 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:2489 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:2494 -msgid "Date Format" -msgstr "" - -#: common/models.py:2495 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:2508 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:2509 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:2514 part/templates/part/detail.html:62 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:2516 -msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "" - -#: common/models.py:2522 -msgid "Table String Length" -msgstr "" - -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" -msgstr "" - -#: common/models.py:2530 -msgid "Receive error reports" -msgstr "" - -#: common/models.py:2531 -msgid "Receive notifications for system errors" -msgstr "" - -#: common/models.py:2536 -msgid "Last used printing machines" -msgstr "" - -#: common/models.py:2537 -msgid "Save the last used printing machines for a user" -msgstr "" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 -msgid "Price break quantity" -msgstr "" - -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 -#: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 -msgid "Price" -msgstr "" - -#: common/models.py:2588 -msgid "Unit price at specified quantity" -msgstr "" - -#: common/models.py:2692 common/models.py:2877 -msgid "Endpoint" -msgstr "" - -#: common/models.py:2693 -msgid "Endpoint at which this webhook is received" -msgstr "" - -#: common/models.py:2703 -msgid "Name for this webhook" -msgstr "" - -#: common/models.py:2707 -msgid "Is this webhook active" -msgstr "" - -#: common/models.py:2723 users/models.py:159 -msgid "Token" -msgstr "" - -#: common/models.py:2724 -msgid "Token for access" -msgstr "" - -#: common/models.py:2732 -msgid "Secret" -msgstr "" - -#: common/models.py:2733 -msgid "Shared secret for HMAC" -msgstr "" - -#: common/models.py:2841 -msgid "Message ID" -msgstr "" - -#: common/models.py:2842 -msgid "Unique identifier for this message" -msgstr "" - -#: common/models.py:2850 -msgid "Host" -msgstr "" - -#: common/models.py:2851 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:2859 -msgid "Header" -msgstr "" - -#: common/models.py:2860 -msgid "Header of this message" -msgstr "" - -#: common/models.py:2867 -msgid "Body" -msgstr "" - -#: common/models.py:2868 -msgid "Body of this message" -msgstr "" - -#: common/models.py:2878 -msgid "Endpoint on which this message was received" -msgstr "" - -#: common/models.py:2883 -msgid "Worked on" -msgstr "" - -#: common/models.py:2884 -msgid "Was the work on this message finished?" -msgstr "" - -#: common/models.py:3010 -msgid "Id" -msgstr "" - -#: common/models.py:3012 templates/js/translated/company.js:965 -#: templates/js/translated/news.js:44 -msgid "Title" -msgstr "" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 -msgid "Published" -msgstr "" - -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 -#: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 -msgid "Author" -msgstr "" - -#: common/models.py:3020 templates/js/translated/news.js:52 -msgid "Summary" -msgstr "" - -#: common/models.py:3023 -msgid "Read" -msgstr "" - -#: common/models.py:3023 -msgid "Was this news item read?" -msgstr "" - -#: common/models.py:3040 company/models.py:159 part/models.py:1067 -#: report/templates/report/inventree_bill_of_materials_report.html:126 -#: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report.html:35 -#: stock/templates/stock/item_base.html:133 templates/503.html:31 -#: templates/hover_image.html:7 templates/hover_image.html:9 -#: templates/modals.html:6 -msgid "Image" -msgstr "" - -#: common/models.py:3040 -msgid "Image file" -msgstr "" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 -msgid "Unit name must be a valid identifier" -msgstr "" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - -#: common/notifications.py:314 -#, python-brace-format -msgid "New {verbose_name}" -msgstr "" - -#: common/notifications.py:316 -msgid "A new order has been created and assigned to you" -msgstr "" - -#: common/notifications.py:322 -#, python-brace-format -msgid "{verbose_name} canceled" -msgstr "" - -#: common/notifications.py:324 -msgid "A order that is assigned to you was canceled" -msgstr "" - -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 -msgid "Items Received" -msgstr "" - -#: common/notifications.py:332 -msgid "Items have been received against a purchase order" -msgstr "" - -#: common/notifications.py:339 -msgid "Items have been received against a return order" -msgstr "" - -#: common/notifications.py:457 -msgid "Error raised by plugin" -msgstr "" - -#: common/serializers.py:375 -msgid "Is Running" -msgstr "" - -#: common/serializers.py:381 -msgid "Pending Tasks" -msgstr "" - -#: common/serializers.py:387 -msgid "Scheduled Tasks" -msgstr "" - -#: common/serializers.py:393 -msgid "Failed Tasks" -msgstr "" - -#: common/serializers.py:408 -msgid "Task ID" -msgstr "" - -#: common/serializers.py:408 -msgid "Unique task ID" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock time" -msgstr "" - -#: common/serializers.py:412 -msgid "Task name" -msgstr "" - -#: common/serializers.py:414 -msgid "Function" -msgstr "" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:118 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 -#: templates/patterns/wizard/upload.html:37 -msgid "Upload File" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:119 -#: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 -#: templates/patterns/wizard/match_fields.html:51 -msgid "Match Fields" -msgstr "" - -#: common/views.py:84 -msgid "Match Items" -msgstr "" - -#: common/views.py:401 -msgid "Fields matching failed" -msgstr "" - -#: common/views.py:464 -msgid "Parts imported" -msgstr "" - -#: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 -#: order/templates/order/order_wizard/match_parts.html:19 -#: order/templates/order/order_wizard/po_upload.html:49 -#: part/templates/part/import_wizard/match_fields.html:27 -#: part/templates/part/import_wizard/match_references.html:19 -#: part/templates/part/import_wizard/part_upload.html:56 -#: templates/patterns/wizard/match_fields.html:26 -#: templates/patterns/wizard/upload.html:35 -msgid "Previous Step" -msgstr "" - -#: company/api.py:141 -msgid "Part is Active" -msgstr "" - -#: company/api.py:145 -msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:278 -msgid "Supplier Part is Active" -msgstr "" - -#: company/api.py:282 -msgid "Internal Part is Active" -msgstr "" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 -msgid "Company description" -msgstr "" - -#: company/models.py:118 -msgid "Description of the company" -msgstr "" - -#: company/models.py:123 company/templates/company/company_base.html:106 -#: templates/InvenTree/settings/plugin_settings.html:54 -#: templates/js/translated/company.js:532 -msgid "Website" -msgstr "" - -#: company/models.py:123 -msgid "Company website URL" -msgstr "" - -#: company/models.py:128 -msgid "Phone number" -msgstr "" - -#: company/models.py:130 -msgid "Contact phone number" -msgstr "" - -#: company/models.py:137 -msgid "Contact email address" -msgstr "" - -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 -msgid "Contact" -msgstr "" - -#: company/models.py:144 -msgid "Point of contact" -msgstr "" - -#: company/models.py:150 -msgid "Link to external company information" -msgstr "" - -#: company/models.py:163 -msgid "Is this company active?" -msgstr "" - -#: company/models.py:168 -msgid "Is customer" -msgstr "" - -#: company/models.py:169 -msgid "Do you sell items to this company?" -msgstr "" - -#: company/models.py:174 -msgid "Is supplier" -msgstr "" - -#: company/models.py:175 -msgid "Do you purchase items from this company?" -msgstr "" - -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" - -#: company/models.py:181 -msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:189 -msgid "Default currency used for this company" -msgstr "" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" - -#: company/models.py:372 -msgid "Select company" -msgstr "" - -#: company/models.py:377 -msgid "Address title" -msgstr "" - -#: company/models.py:378 -msgid "Title describing the address entry" -msgstr "" - -#: company/models.py:384 -msgid "Primary address" -msgstr "" - -#: company/models.py:385 -msgid "Set as primary address" -msgstr "" - -#: company/models.py:390 templates/js/translated/company.js:914 -#: templates/js/translated/company.js:971 -msgid "Line 1" -msgstr "" - -#: company/models.py:391 -msgid "Address line 1" -msgstr "" - -#: company/models.py:397 templates/js/translated/company.js:915 -#: templates/js/translated/company.js:977 -msgid "Line 2" -msgstr "" - -#: company/models.py:398 -msgid "Address line 2" -msgstr "" - -#: company/models.py:404 company/models.py:405 -#: templates/js/translated/company.js:983 -msgid "Postal code" -msgstr "" - -#: company/models.py:411 -msgid "City/Region" -msgstr "" - -#: company/models.py:412 -msgid "Postal code city/region" -msgstr "" - -#: company/models.py:418 -msgid "State/Province" -msgstr "" - -#: company/models.py:419 -msgid "State or province" -msgstr "" - -#: company/models.py:425 templates/js/translated/company.js:1001 -msgid "Country" -msgstr "" - -#: company/models.py:426 -msgid "Address country" -msgstr "" - -#: company/models.py:432 -msgid "Courier shipping notes" -msgstr "" - -#: company/models.py:433 -msgid "Notes for shipping courier" -msgstr "" - -#: company/models.py:439 -msgid "Internal shipping notes" -msgstr "" - -#: company/models.py:440 -msgid "Shipping notes for internal use" -msgstr "" - -#: company/models.py:447 -msgid "Link to address information (external)" -msgstr "" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 -#: templates/js/translated/bom.js:622 -msgid "Base Part" -msgstr "" - -#: company/models.py:489 company/models.py:781 -msgid "Select part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 -#: stock/templates/stock/item_base.html:207 -#: templates/js/translated/company.js:507 -#: templates/js/translated/company.js:1118 -#: templates/js/translated/company.js:1296 -#: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:499 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 -#: templates/js/translated/company.js:1117 -#: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 -msgid "MPN" -msgstr "" - -#: company/models.py:513 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:522 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" - -#: company/models.py:594 -msgid "Parameter name" -msgstr "" - -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 -msgid "Value" -msgstr "" - -#: company/models.py:601 -msgid "Parameter value" -msgstr "" - -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 -msgid "Units" -msgstr "" - -#: company/models.py:609 -msgid "Parameter units" -msgstr "" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 -msgid "Pack units must be compatible with the base part units" -msgstr "" - -#: company/models.py:726 -msgid "Pack units must be greater than zero" -msgstr "" - -#: company/models.py:740 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 -#: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 -#: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:350 -#: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 -#: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 -msgid "Supplier" -msgstr "" - -#: company/models.py:790 -msgid "Select supplier" -msgstr "" - -#: company/models.py:796 part/serializers.py:549 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:802 -msgid "Is this supplier part active?" -msgstr "" - -#: company/models.py:812 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:819 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:828 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 -msgid "Note" -msgstr "" - -#: company/models.py:844 part/models.py:2117 -msgid "base cost" -msgstr "" - -#: company/models.py:845 part/models.py:2118 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:853 -msgid "Part packaging" -msgstr "" - -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:311 -#: templates/js/translated/purchase_order.js:841 -#: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:860 -msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" - -#: company/models.py:879 part/models.py:2124 -msgid "multiple" -msgstr "" - -#: company/models.py:880 -msgid "Order multiple" -msgstr "" - -#: company/models.py:892 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:898 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:899 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 -#: part/templates/part/part_base.html:197 -#: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 -msgid "In Stock" -msgstr "" - -#: company/templates/company/company_base.html:16 -#: part/templates/part/part_base.html:146 -#: templates/js/translated/company.js:1287 -#: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 -msgid "Inactive" -msgstr "" - -#: company/templates/company/company_base.html:27 -#: templates/js/translated/purchase_order.js:242 -msgid "Create Purchase Order" -msgstr "" - -#: company/templates/company/company_base.html:33 -msgid "Company actions" -msgstr "" - -#: company/templates/company/company_base.html:38 -msgid "Edit company information" -msgstr "" - -#: company/templates/company/company_base.html:39 -#: templates/js/translated/company.js:445 -msgid "Edit Company" -msgstr "" - -#: company/templates/company/company_base.html:43 -msgid "Delete company" -msgstr "" - -#: company/templates/company/company_base.html:44 -#: company/templates/company/company_base.html:168 -msgid "Delete Company" -msgstr "" - -#: company/templates/company/company_base.html:53 -#: company/templates/company/manufacturer_part.html:51 -#: company/templates/company/supplier_part.html:83 -#: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 -msgid "Part image" -msgstr "" - -#: company/templates/company/company_base.html:61 -#: part/templates/part/part_thumb.html:12 -msgid "Upload new image" -msgstr "" - -#: company/templates/company/company_base.html:64 -#: part/templates/part/part_thumb.html:14 -msgid "Download image from URL" -msgstr "" - -#: company/templates/company/company_base.html:66 -#: part/templates/part/part_thumb.html:16 -msgid "Delete image" -msgstr "" - -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 -#: stock/templates/stock/item_base.html:405 -#: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 -msgid "Customer" -msgstr "" - -#: company/templates/company/company_base.html:117 -msgid "Uses default currency" -msgstr "" - -#: company/templates/company/company_base.html:131 -msgid "Phone" -msgstr "" - -#: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 -msgid "Remove Image" -msgstr "" - -#: company/templates/company/company_base.html:212 -msgid "Remove associated image from this company" -msgstr "" - -#: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 -#: templates/InvenTree/settings/user.html:88 -#: templates/InvenTree/settings/user_sso.html:43 -msgid "Remove" -msgstr "" - -#: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 -msgid "Upload Image" -msgstr "" - -#: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 -msgid "Download Image" -msgstr "" - -#: company/templates/company/detail.html:15 -#: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 -msgid "Supplier Parts" -msgstr "" - -#: company/templates/company/detail.html:19 -msgid "Create new supplier part" -msgstr "" - -#: company/templates/company/detail.html:20 -#: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 -msgid "New Supplier Part" -msgstr "" - -#: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:151 -msgid "Manufacturer Parts" -msgstr "" - -#: company/templates/company/detail.html:45 -msgid "Create new manufacturer part" -msgstr "" - -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 -msgid "New Manufacturer Part" -msgstr "" - -#: company/templates/company/detail.html:65 -msgid "Supplier Stock" -msgstr "" - -#: company/templates/company/detail.html:75 -#: company/templates/company/sidebar.html:12 -#: company/templates/company/supplier_part_sidebar.html:7 -#: order/templates/order/order_base.html:13 -#: order/templates/order/purchase_orders.html:8 -#: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 -#: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 -#: templates/InvenTree/settings/sidebar.html:57 -#: templates/js/translated/search.js:205 templates/navbar.html:50 -#: users/models.py:208 -msgid "Purchase Orders" -msgstr "" - -#: company/templates/company/detail.html:79 -#: order/templates/order/purchase_orders.html:17 -msgid "Create new purchase order" -msgstr "" - -#: company/templates/company/detail.html:80 -#: order/templates/order/purchase_orders.html:18 -msgid "New Purchase Order" -msgstr "" - -#: company/templates/company/detail.html:101 -#: company/templates/company/sidebar.html:21 -#: order/templates/order/sales_order_base.html:13 -#: order/templates/order/sales_orders.html:8 -#: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 -#: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 -#: templates/InvenTree/settings/sidebar.html:59 -#: templates/js/translated/search.js:219 templates/navbar.html:62 -#: users/models.py:209 -msgid "Sales Orders" -msgstr "" - -#: company/templates/company/detail.html:105 -#: order/templates/order/sales_orders.html:20 -msgid "Create new sales order" -msgstr "" - -#: company/templates/company/detail.html:106 -#: order/templates/order/sales_orders.html:21 -msgid "New Sales Order" -msgstr "" - -#: company/templates/company/detail.html:126 -msgid "Assigned Stock" -msgstr "" - -#: company/templates/company/detail.html:142 -#: company/templates/company/sidebar.html:29 -#: order/templates/order/return_order_base.html:13 -#: order/templates/order/return_orders.html:8 -#: order/templates/order/return_orders.html:15 -#: templates/InvenTree/settings/sidebar.html:61 -#: templates/js/translated/search.js:232 templates/navbar.html:65 -#: users/models.py:210 -msgid "Return Orders" -msgstr "" - -#: company/templates/company/detail.html:146 -#: order/templates/order/return_orders.html:20 -msgid "Create new return order" -msgstr "" - -#: company/templates/company/detail.html:147 -#: order/templates/order/return_orders.html:21 -msgid "New Return Order" -msgstr "" - -#: company/templates/company/detail.html:168 -msgid "Company Notes" -msgstr "" - -#: company/templates/company/detail.html:183 -msgid "Company Contacts" -msgstr "" - -#: company/templates/company/detail.html:187 -#: company/templates/company/detail.html:188 -msgid "Add Contact" -msgstr "" - -#: company/templates/company/detail.html:206 -msgid "Company addresses" -msgstr "" - -#: company/templates/company/detail.html:210 -#: company/templates/company/detail.html:211 -msgid "Add Address" -msgstr "" - -#: company/templates/company/manufacturer_part.html:15 company/views.py:37 -#: templates/InvenTree/search.html:180 templates/navbar.html:49 -msgid "Manufacturers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 -msgid "Order part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:1343 -msgid "Edit manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:1344 -msgid "Delete manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 -msgid "Internal Part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:95 -msgid "No manufacturer information available" -msgstr "" - -#: company/templates/company/manufacturer_part.html:119 -#: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 -#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 -#: templates/navbar.html:48 -msgid "Suppliers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:156 -#: company/templates/company/manufacturer_part_sidebar.html:5 -#: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 -msgid "Parameters" -msgstr "" - -#: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 -#: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part_parameters.html:24 -msgid "New Parameter" -msgstr "" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 -msgid "Add Parameter" -msgstr "" - -#: company/templates/company/sidebar.html:6 -msgid "Manufactured Parts" -msgstr "" - -#: company/templates/company/sidebar.html:10 -msgid "Supplied Parts" -msgstr "" - -#: company/templates/company/sidebar.html:16 -msgid "Supplied Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:25 -msgid "Assigned Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:33 -msgid "Contacts" -msgstr "" - -#: company/templates/company/supplier_part.html:50 -#: templates/js/translated/company.js:1526 -msgid "Supplier part actions" -msgstr "" - -#: company/templates/company/supplier_part.html:55 -#: company/templates/company/supplier_part.html:56 -#: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 -msgid "Order Part" -msgstr "" - -#: company/templates/company/supplier_part.html:60 -#: company/templates/company/supplier_part.html:61 -msgid "Update Availability" -msgstr "" - -#: company/templates/company/supplier_part.html:63 -#: company/templates/company/supplier_part.html:64 -#: templates/js/translated/company.js:294 -msgid "Edit Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:68 -#: company/templates/company/supplier_part.html:69 -#: templates/js/translated/company.js:269 -msgid "Duplicate Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:73 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:74 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:133 -msgid "No supplier information available" -msgstr "" - -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 -#: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 -msgid "SKU" -msgstr "" - -#: company/templates/company/supplier_part.html:206 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 -msgid "Create new stock item" -msgstr "" - -#: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 -msgid "New Stock Item" -msgstr "" - -#: company/templates/company/supplier_part.html:223 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/supplier_part.html:246 -msgid "Pricing Information" -msgstr "" - -#: company/templates/company/supplier_part.html:251 -#: templates/js/translated/company.js:398 -#: templates/js/translated/pricing.js:684 -msgid "Add Price Break" -msgstr "" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 -msgid "Supplier Part QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:316 -msgid "Link Barcode to Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:388 -msgid "Update Part Availability" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 -#: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 -#: users/models.py:206 -msgid "Stock Items" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/views.py:32 -msgid "New Supplier" -msgstr "" - -#: company/views.py:38 -msgid "New Manufacturer" -msgstr "" - -#: company/views.py:43 templates/InvenTree/search.html:210 -#: templates/navbar.html:60 -msgid "Customers" -msgstr "" - -#: company/views.py:44 -msgid "New Customer" -msgstr "" - -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" - -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" - -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" - -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" - -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" - -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" - -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" - -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" - -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" - -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" - -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" - -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" - -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" - -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" - -#: machine/machine_types/label_printer.py:215 -msgid "Copies" -msgstr "" - -#: machine/machine_types/label_printer.py:216 -msgid "Number of copies to print for each label" -msgstr "" - -#: machine/machine_types/label_printer.py:231 -msgid "Connected" -msgstr "" - -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 -msgid "Unknown" -msgstr "" - -#: machine/machine_types/label_printer.py:233 -msgid "Printing" -msgstr "" - -#: machine/machine_types/label_printer.py:234 -msgid "No media" -msgstr "" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 -msgid "Disconnected" -msgstr "" - -#: machine/machine_types/label_printer.py:243 -msgid "Label Printer" -msgstr "" - -#: machine/machine_types/label_printer.py:244 -msgid "Directly print labels for various items." -msgstr "" - -#: machine/machine_types/label_printer.py:250 -msgid "Printer Location" -msgstr "" - -#: machine/machine_types/label_printer.py:251 -msgid "Scope the printer to a specific location" -msgstr "" - -#: machine/models.py:25 -msgid "Name of machine" -msgstr "" - -#: machine/models.py:29 -msgid "Machine Type" -msgstr "" - -#: machine/models.py:29 -msgid "Type of machine" -msgstr "" - -#: machine/models.py:34 machine/models.py:146 -msgid "Driver" -msgstr "" - -#: machine/models.py:35 -msgid "Driver used for the machine" -msgstr "" - -#: machine/models.py:39 -msgid "Machines can be disabled" -msgstr "" - -#: machine/models.py:95 -msgid "Driver available" -msgstr "" - -#: machine/models.py:100 -msgid "No errors" -msgstr "" - -#: machine/models.py:105 -msgid "Initialized" -msgstr "" - -#: machine/models.py:117 -msgid "Machine status" -msgstr "" - -#: machine/models.py:145 -msgid "Machine" -msgstr "" - -#: machine/models.py:151 -msgid "Machine Config" -msgstr "" - -#: machine/models.py:156 -msgid "Config type" -msgstr "" - -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" -msgstr "" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 -msgid "Has Pricing" -msgstr "" - -#: order/api.py:230 -msgid "No matching purchase order found" -msgstr "" - -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 -msgid "Order" -msgstr "" - -#: order/api.py:429 order/api.py:784 -msgid "Order Complete" -msgstr "" - -#: order/api.py:452 -msgid "Order Pending" -msgstr "" - -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 -#: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 -#: templates/js/translated/purchase_order.js:168 -#: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 -msgid "Purchase Order" -msgstr "" - -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 -#: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 -msgid "Return Order" -msgstr "" - -#: order/models.py:90 -msgid "Total price for this order" -msgstr "" - -#: order/models.py:95 order/serializers.py:71 -msgid "Order Currency" -msgstr "" - -#: order/models.py:98 order/serializers.py:72 -msgid "Currency for this order (leave blank to use company default)" -msgstr "" - -#: order/models.py:246 -msgid "Contact does not match selected company" -msgstr "" - -#: order/models.py:289 -msgid "Order description (optional)" -msgstr "" - -#: order/models.py:298 -msgid "Select project code for this order" -msgstr "" - -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -msgid "Link to external page" -msgstr "" - -#: order/models.py:310 -msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" - -#: order/models.py:324 -msgid "Created By" -msgstr "" - -#: order/models.py:332 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:343 -msgid "Point of contact for this order" -msgstr "" - -#: order/models.py:353 -msgid "Company address for this order" -msgstr "" - -#: order/models.py:468 order/models.py:979 -msgid "Order reference" -msgstr "" - -#: order/models.py:477 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:492 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:504 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:513 -msgid "received by" -msgstr "" - -#: order/models.py:519 order/models.py:2173 -msgid "Issue Date" -msgstr "" - -#: order/models.py:520 order/models.py:2174 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:527 order/models.py:2181 -msgid "Date order was completed" -msgstr "" - -#: order/models.py:571 -msgid "Part supplier must match PO supplier" -msgstr "" - -#: order/models.py:806 -msgid "Quantity must be a positive number" -msgstr "" - -#: order/models.py:991 -msgid "Company to which the items are being sold" -msgstr "" - -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 -msgid "Customer Reference " -msgstr "" - -#: order/models.py:1015 order/models.py:2167 -msgid "Customer order reference code" -msgstr "" - -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 -msgid "Shipment Date" -msgstr "" - -#: order/models.py:1028 -msgid "shipped by" -msgstr "" - -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" - -#: order/models.py:1084 -msgid "Only an open order can be marked as complete" -msgstr "" - -#: order/models.py:1088 -msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" - -#: order/models.py:1093 -msgid "Order cannot be completed as there are incomplete line items" -msgstr "" - -#: order/models.py:1357 -msgid "Item quantity" -msgstr "" - -#: order/models.py:1374 -msgid "Line item reference" -msgstr "" - -#: order/models.py:1381 -msgid "Line item notes" -msgstr "" - -#: order/models.py:1393 -msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" - -#: order/models.py:1414 -msgid "Line item description (optional)" -msgstr "" - -#: order/models.py:1420 -msgid "Context" -msgstr "" - -#: order/models.py:1421 -msgid "Additional context for this line" -msgstr "" - -#: order/models.py:1431 -msgid "Unit price" -msgstr "" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 -msgid "Supplier part must match supplier" -msgstr "" - -#: order/models.py:1476 -msgid "deleted" -msgstr "" - -#: order/models.py:1504 -msgid "Supplier part" -msgstr "" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 -msgid "Received" -msgstr "" - -#: order/models.py:1512 -msgid "Number of items received" -msgstr "" - -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 -#: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 -msgid "Purchase Price" -msgstr "" - -#: order/models.py:1521 -msgid "Unit purchase price" -msgstr "" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 -msgid "Virtual part cannot be assigned to a sales order" -msgstr "" - -#: order/models.py:1642 -msgid "Only salable parts can be assigned to a sales order" -msgstr "" - -#: order/models.py:1668 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 -msgid "Sale Price" -msgstr "" - -#: order/models.py:1669 -msgid "Unit sale price" -msgstr "" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 -msgid "Shipped quantity" -msgstr "" - -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 -msgid "Date of shipment" -msgstr "" - -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 -msgid "Delivery Date" -msgstr "" - -#: order/models.py:1779 -msgid "Date of delivery of shipment" -msgstr "" - -#: order/models.py:1787 -msgid "Checked By" -msgstr "" - -#: order/models.py:1788 -msgid "User who checked this shipment" -msgstr "" - -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 -msgid "Shipment" -msgstr "" - -#: order/models.py:1796 -msgid "Shipment number" -msgstr "" - -#: order/models.py:1804 -msgid "Tracking Number" -msgstr "" - -#: order/models.py:1805 -msgid "Shipment tracking information" -msgstr "" - -#: order/models.py:1812 -msgid "Invoice Number" -msgstr "" - -#: order/models.py:1813 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1833 -msgid "Shipment has already been sent" -msgstr "" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 -msgid "Stock item has not been assigned" -msgstr "" - -#: order/models.py:1973 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:1976 -msgid "Cannot allocate stock to a line without a part" -msgstr "" - -#: order/models.py:1979 -msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" - -#: order/models.py:1998 order/serializers.py:1345 -msgid "Quantity must be 1 for serialized stock item" -msgstr "" - -#: order/models.py:2001 -msgid "Sales order does not match shipment" -msgstr "" - -#: order/models.py:2002 plugin/base/barcodes/api.py:524 -msgid "Shipment does not match sales order" -msgstr "" - -#: order/models.py:2010 -msgid "Line" -msgstr "" - -#: order/models.py:2019 -msgid "Sales order shipment reference" -msgstr "" - -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 -msgid "Item" -msgstr "" - -#: order/models.py:2033 -msgid "Select stock item to allocate" -msgstr "" - -#: order/models.py:2042 -msgid "Enter stock allocation quantity" -msgstr "" - -#: order/models.py:2136 -msgid "Return Order reference" -msgstr "" - -#: order/models.py:2148 -msgid "Company from which items are being returned" -msgstr "" - -#: order/models.py:2160 -msgid "Return order status" -msgstr "" - -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 -msgid "Only serialized items can be assigned to a Return Order" -msgstr "" - -#: order/models.py:2392 -msgid "Select item to return from customer" -msgstr "" - -#: order/models.py:2398 -msgid "Received Date" -msgstr "" - -#: order/models.py:2399 -msgid "The date this this return item was received" -msgstr "" - -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 -msgid "Outcome" -msgstr "" - -#: order/models.py:2411 -msgid "Outcome for this line item" -msgstr "" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "" - -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 -msgid "Order cannot be cancelled" -msgstr "" - -#: order/serializers.py:346 order/serializers.py:1366 -msgid "Allow order to be closed with incomplete line items" -msgstr "" - -#: order/serializers.py:356 order/serializers.py:1376 -msgid "Order has incomplete line items" -msgstr "" - -#: order/serializers.py:506 -msgid "Order is not open" -msgstr "" - -#: order/serializers.py:527 -msgid "Auto Pricing" -msgstr "" - -#: order/serializers.py:529 -msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" - -#: order/serializers.py:539 -msgid "Purchase price currency" -msgstr "" - -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 -msgid "Supplier part must be specified" -msgstr "" - -#: order/serializers.py:587 -msgid "Purchase order must be specified" -msgstr "" - -#: order/serializers.py:595 -msgid "Supplier must match purchase order" -msgstr "" - -#: order/serializers.py:596 -msgid "Purchase order must match supplier" -msgstr "" - -#: order/serializers.py:639 order/serializers.py:1446 -msgid "Line Item" -msgstr "" - -#: order/serializers.py:645 -msgid "Line item does not match purchase order" -msgstr "" - -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 -msgid "Select destination location for received items" -msgstr "" - -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 -msgid "Enter batch code for incoming stock items" -msgstr "" - -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 -msgid "Barcode" -msgstr "" - -#: order/serializers.py:707 -msgid "Scanned barcode" -msgstr "" - -#: order/serializers.py:723 -msgid "Barcode is already in use" -msgstr "" - -#: order/serializers.py:747 -msgid "An integer quantity must be provided for trackable parts" -msgstr "" - -#: order/serializers.py:795 order/serializers.py:1798 -msgid "Line items must be provided" -msgstr "" - -#: order/serializers.py:811 -msgid "Destination location must be specified" -msgstr "" - -#: order/serializers.py:822 -msgid "Supplied barcode values must be unique" -msgstr "" - -#: order/serializers.py:1187 -msgid "Sale price currency" -msgstr "" - -#: order/serializers.py:1248 -msgid "No shipment details provided" -msgstr "" - -#: order/serializers.py:1309 order/serializers.py:1455 -msgid "Line item is not associated with this order" -msgstr "" - -#: order/serializers.py:1328 -msgid "Quantity must be positive" -msgstr "" - -#: order/serializers.py:1465 -msgid "Enter serial numbers to allocate" -msgstr "" - -#: order/serializers.py:1487 order/serializers.py:1593 -msgid "Shipment has already been shipped" -msgstr "" - -#: order/serializers.py:1490 order/serializers.py:1596 -msgid "Shipment is not associated with this order" -msgstr "" - -#: order/serializers.py:1537 -msgid "No match found for the following serial numbers" -msgstr "" - -#: order/serializers.py:1544 -msgid "The following serial numbers are already allocated" -msgstr "" - -#: order/serializers.py:1752 -msgid "Return order line item" -msgstr "" - -#: order/serializers.py:1758 -msgid "Line item does not match return order" -msgstr "" - -#: order/serializers.py:1761 -msgid "Line item has already been received" -msgstr "" - -#: order/serializers.py:1790 -msgid "Items can only be received against orders which are in progress" -msgstr "" - -#: order/serializers.py:1873 -msgid "Line price currency" -msgstr "" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - -#: order/tasks.py:25 -msgid "Overdue Purchase Order" -msgstr "" - -#: order/tasks.py:30 -#, python-brace-format -msgid "Purchase order {po} is now overdue" -msgstr "" - -#: order/tasks.py:75 -msgid "Overdue Sales Order" -msgstr "" - -#: order/tasks.py:80 -#, python-brace-format -msgid "Sales order {so} is now overdue" -msgstr "" - -#: order/templates/order/order_base.html:51 -msgid "Print purchase order report" -msgstr "" - -#: order/templates/order/order_base.html:53 -#: order/templates/order/return_order_base.html:62 -#: order/templates/order/sales_order_base.html:62 -msgid "Export order to file" -msgstr "" - -#: order/templates/order/order_base.html:59 -#: order/templates/order/return_order_base.html:72 -#: order/templates/order/sales_order_base.html:71 -msgid "Order actions" -msgstr "" - -#: order/templates/order/order_base.html:64 -#: order/templates/order/return_order_base.html:76 -#: order/templates/order/sales_order_base.html:75 -msgid "Edit order" -msgstr "" - -#: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 -#: order/templates/order/return_order_base.html:78 -#: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" -msgstr "" - -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 -msgid "Issue Order" -msgstr "" - -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 -msgid "Mark order as complete" -msgstr "" - -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 -msgid "Complete Order" -msgstr "" - -#: order/templates/order/order_base.html:96 -msgid "Supplier part thumbnail" -msgstr "" - -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 -msgid "Order Description" -msgstr "" - -#: order/templates/order/order_base.html:146 -msgid "No suppplier information available" -msgstr "" - -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 -msgid "Completed Line Items" -msgstr "" - -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 -msgid "Incomplete" -msgstr "" - -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 -msgid "Issued" -msgstr "" - -#: order/templates/order/order_base.html:229 -msgid "Total cost" -msgstr "" - -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 -msgid "Total cost could not be calculated" -msgstr "" - -#: order/templates/order/order_base.html:335 -msgid "Purchase Order QR Code" -msgstr "" - -#: order/templates/order/order_base.html:347 -msgid "Link Barcode to Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:9 -#: part/templates/part/import_wizard/ajax_match_fields.html:9 -#: part/templates/part/import_wizard/match_fields.html:9 -#: templates/patterns/wizard/match_fields.html:8 -msgid "Missing selections for the following required columns" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:20 -#: part/templates/part/import_wizard/ajax_match_fields.html:20 -#: part/templates/part/import_wizard/match_fields.html:20 -#: templates/patterns/wizard/match_fields.html:19 -msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:29 -#: order/templates/order/order_wizard/match_parts.html:21 -#: part/templates/part/import_wizard/match_fields.html:29 -#: part/templates/part/import_wizard/match_references.html:21 -#: templates/patterns/wizard/match_fields.html:28 -msgid "Submit Selections" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:35 -#: part/templates/part/import_wizard/ajax_match_fields.html:28 -#: part/templates/part/import_wizard/match_fields.html:35 -#: templates/patterns/wizard/match_fields.html:34 -msgid "File Fields" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:42 -#: part/templates/part/import_wizard/ajax_match_fields.html:35 -#: part/templates/part/import_wizard/match_fields.html:42 -#: templates/patterns/wizard/match_fields.html:41 -msgid "Remove column" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:60 -#: part/templates/part/import_wizard/ajax_match_fields.html:53 -#: part/templates/part/import_wizard/match_fields.html:60 -#: templates/patterns/wizard/match_fields.html:59 -msgid "Duplicate selection" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:71 -#: order/templates/order/order_wizard/match_parts.html:52 -#: part/templates/part/import_wizard/ajax_match_fields.html:64 -#: part/templates/part/import_wizard/ajax_match_references.html:42 -#: part/templates/part/import_wizard/match_fields.html:71 -#: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 -#: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 -#: templates/patterns/wizard/match_fields.html:70 -msgid "Remove row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:12 -#: part/templates/part/import_wizard/ajax_match_references.html:12 -#: part/templates/part/import_wizard/match_references.html:12 -msgid "Errors exist in the submitted data" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:28 -#: part/templates/part/import_wizard/ajax_match_references.html:21 -#: part/templates/part/import_wizard/match_references.html:28 -msgid "Row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:29 -msgid "Select Supplier Part" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:8 -msgid "Return to Orders" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:13 -msgid "Upload File for Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:14 -msgid "Order is already processed. Files cannot be uploaded." -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:27 -#: part/templates/part/import_wizard/ajax_part_upload.html:10 -#: part/templates/part/import_wizard/part_upload.html:26 -#: templates/patterns/wizard/upload.html:13 -#, python-format -msgid "Step %(step)s of %(count)s" -msgstr "" - -#: order/templates/order/po_sidebar.html:7 -msgid "Received Stock" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:18 -msgid "Purchase Order Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:27 -#: order/templates/order/return_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 -#: templates/js/translated/sales_order.js:237 -msgid "Add Line Item" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:31 -#: order/templates/order/purchase_order_detail.html:32 -#: order/templates/order/return_order_detail.html:28 -#: order/templates/order/return_order_detail.html:29 -msgid "Receive Line Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/return_order_detail.html:45 -#: order/templates/order/sales_order_detail.html:41 -msgid "Extra Lines" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/return_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:47 -msgid "Add Extra Line" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:74 -msgid "Received Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:99 -#: order/templates/order/return_order_detail.html:85 -#: order/templates/order/sales_order_detail.html:139 -msgid "Order Notes" -msgstr "" - -#: order/templates/order/return_order_base.html:18 -#: order/templates/order/sales_order_base.html:18 -msgid "Customer logo thumbnail" -msgstr "" - -#: order/templates/order/return_order_base.html:60 -msgid "Print return order report" -msgstr "" - -#: order/templates/order/return_order_base.html:64 -#: order/templates/order/sales_order_base.html:64 -msgid "Print packing list" -msgstr "" - -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 -msgid "Customer Reference" -msgstr "" - -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 -msgid "Total Cost" -msgstr "" - -#: order/templates/order/return_order_base.html:273 -msgid "Return Order QR Code" -msgstr "" - -#: order/templates/order/return_order_base.html:285 -msgid "Link Barcode to Return Order" -msgstr "" - -#: order/templates/order/return_order_sidebar.html:5 -msgid "Order Details" -msgstr "" - -#: order/templates/order/sales_order_base.html:60 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 -msgid "Ship Items" -msgstr "" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:138 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:176 -#: order/templates/order/sales_order_detail.html:99 -#: order/templates/order/so_sidebar.html:11 -msgid "Completed Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:339 -msgid "Sales Order QR Code" -msgstr "" - -#: order/templates/order/sales_order_base.html:351 -msgid "Link Barcode to Sales Order" -msgstr "" - -#: order/templates/order/sales_order_detail.html:18 -msgid "Sales Order Items" -msgstr "" - -#: order/templates/order/sales_order_detail.html:67 -#: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 -msgid "Pending Shipments" -msgstr "" - -#: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 -msgid "Actions" -msgstr "" - -#: order/templates/order/sales_order_detail.html:80 -msgid "New Shipment" -msgstr "" - -#: order/views.py:120 -msgid "Match Supplier Parts" -msgstr "" - -#: order/views.py:406 -msgid "Sales order not found" -msgstr "" - -#: order/views.py:412 -msgid "Price not found" -msgstr "" - -#: order/views.py:415 -#, python-brace-format -msgid "Updated {part} unit-price to {price}" -msgstr "" - -#: order/views.py:421 -#, python-brace-format -msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "" - -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 -msgid "IPN" -msgstr "" - -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 -msgid "Revision" -msgstr "" - -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 -msgid "Keywords" -msgstr "" - -#: part/admin.py:60 -msgid "Part Image" -msgstr "" - -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 -msgid "Category ID" -msgstr "" - -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 -msgid "Category Name" -msgstr "" - -#: part/admin.py:71 part/admin.py:316 -msgid "Default Location ID" -msgstr "" - -#: part/admin.py:76 -msgid "Default Supplier ID" -msgstr "" - -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 -msgid "Variant Of" -msgstr "" - -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 -msgid "Minimum Stock" -msgstr "" - -#: part/admin.py:138 part/templates/part/part_sidebar.html:27 -msgid "Used In" -msgstr "" - -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 -msgid "Building" -msgstr "" - -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 -msgid "Minimum Cost" -msgstr "" - -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 -msgid "Maximum Cost" -msgstr "" - -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 -msgid "Parent ID" -msgstr "" - -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 -msgid "Parent Name" -msgstr "" - -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 -msgid "Category Path" -msgstr "" - -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 -#: part/templates/part/category_sidebar.html:9 -#: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 -#: templates/navbar.html:24 users/models.py:203 -msgid "Parts" -msgstr "" - -#: part/admin.py:378 -msgid "BOM Level" -msgstr "" - -#: part/admin.py:381 -msgid "BOM Item ID" -msgstr "" - -#: part/admin.py:391 -msgid "Parent IPN" -msgstr "" - -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" - -#: part/admin.py:418 part/serializers.py:1346 -#: templates/js/translated/pricing.js:358 -#: templates/js/translated/pricing.js:1024 -msgid "Minimum Price" -msgstr "" - -#: part/admin.py:423 part/serializers.py:1361 -#: templates/js/translated/pricing.js:353 -#: templates/js/translated/pricing.js:1032 -msgid "Maximum Price" -msgstr "" - -#: part/api.py:104 -msgid "Starred" -msgstr "" - -#: part/api.py:106 -msgid "Filter by starred categories" -msgstr "" - -#: part/api.py:123 stock/api.py:310 -msgid "Depth" -msgstr "" - -#: part/api.py:123 -msgid "Filter by category depth" -msgstr "" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:158 -msgid "Include sub-categories in filtered results" -msgstr "" - -#: part/api.py:179 templates/js/translated/part.js:311 -msgid "Parent" -msgstr "" - -#: part/api.py:181 -msgid "Filter by parent category" -msgstr "" - -#: part/api.py:214 -msgid "Exclude Tree" -msgstr "" - -#: part/api.py:216 -msgid "Exclude sub-categories under the specified category" -msgstr "" - -#: part/api.py:441 -msgid "Has Results" -msgstr "" - -#: part/api.py:608 -msgid "Incoming Purchase Order" -msgstr "" - -#: part/api.py:626 -msgid "Outgoing Sales Order" -msgstr "" - -#: part/api.py:642 -msgid "Stock produced by Build Order" -msgstr "" - -#: part/api.py:726 -msgid "Stock required for Build Order" -msgstr "" - -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 -#: templates/InvenTree/settings/settings_staff_js.html:300 -#: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 -msgid "Category" -msgstr "" - -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 -msgid "Uses" -msgstr "" - -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 -msgid "Default Location" -msgstr "" - -#: part/bom.py:179 part/serializers.py:905 -#: templates/email/low_stock_notification.html:16 -msgid "Total Stock" -msgstr "" - -#: part/forms.py:49 -msgid "Input quantity for price calculation" -msgstr "" - -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 -#: part/templates/part/part_app_base.html:10 -msgid "Part Category" -msgstr "" - -#: part/models.py:89 part/templates/part/category.html:133 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 -#: users/models.py:202 -msgid "Part Categories" -msgstr "" - -#: part/models.py:108 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 -msgid "Structural" -msgstr "" - -#: part/models.py:115 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:124 -msgid "Default keywords" -msgstr "" - -#: part/models.py:125 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 -msgid "Icon" -msgstr "" - -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:178 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 -msgid "Invalid choice for parent part" -msgstr "" - -#: part/models.py:613 part/models.py:620 -#, python-brace-format -msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" - -#: part/models.py:632 -#, python-brace-format -msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" - -#: part/models.py:695 -#, python-brace-format -msgid "IPN must match regex pattern {pattern}" -msgstr "" - -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 -msgid "Stock item with this serial number already exists" -msgstr "" - -#: part/models.py:917 -msgid "Duplicate IPN not allowed in part settings" -msgstr "" - -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 -msgid "Part with this Name, IPN and Revision already exists." -msgstr "" - -#: part/models.py:951 -msgid "Parts cannot be assigned to structural part categories!" -msgstr "" - -#: part/models.py:983 part/models.py:4102 -msgid "Part name" -msgstr "" - -#: part/models.py:988 -msgid "Is Template" -msgstr "" - -#: part/models.py:989 -msgid "Is this part a template part?" -msgstr "" - -#: part/models.py:999 -msgid "Is this part a variant of another part?" -msgstr "" - -#: part/models.py:1007 -msgid "Part description (optional)" -msgstr "" - -#: part/models.py:1015 -msgid "Part keywords to improve visibility in search results" -msgstr "" - -#: part/models.py:1025 -msgid "Part category" -msgstr "" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 -msgid "Where is this item normally stored?" -msgstr "" - -#: part/models.py:1121 part/templates/part/part_base.html:385 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1122 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1129 -msgid "Default Expiry" -msgstr "" - -#: part/models.py:1130 -msgid "Expiry time (in days) for stock items of this part" -msgstr "" - -#: part/models.py:1139 -msgid "Minimum allowed stock level" -msgstr "" - -#: part/models.py:1148 -msgid "Units of measure for this part" -msgstr "" - -#: part/models.py:1155 -msgid "Can this part be built from other parts?" -msgstr "" - -#: part/models.py:1161 -msgid "Can this part be used to build other parts?" -msgstr "" - -#: part/models.py:1167 -msgid "Does this part have tracking for unique items?" -msgstr "" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 -msgid "Can this part be purchased from external suppliers?" -msgstr "" - -#: part/models.py:1185 -msgid "Can this part be sold to customers?" -msgstr "" - -#: part/models.py:1189 -msgid "Is this part active?" -msgstr "" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 -msgid "Is this a virtual part, such as a software product or license?" -msgstr "" - -#: part/models.py:1207 -msgid "BOM checksum" -msgstr "" - -#: part/models.py:1208 -msgid "Stored BOM checksum" -msgstr "" - -#: part/models.py:1216 -msgid "BOM checked by" -msgstr "" - -#: part/models.py:1221 -msgid "BOM checked date" -msgstr "" - -#: part/models.py:1237 -msgid "Creation User" -msgstr "" - -#: part/models.py:1247 -msgid "Owner responsible for this part" -msgstr "" - -#: part/models.py:1252 part/templates/part/part_base.html:348 -#: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 -msgid "Last Stocktake" -msgstr "" - -#: part/models.py:2125 -msgid "Sell multiple" -msgstr "" - -#: part/models.py:3116 -msgid "Currency used to cache pricing calculations" -msgstr "" - -#: part/models.py:3132 -msgid "Minimum BOM Cost" -msgstr "" - -#: part/models.py:3133 -msgid "Minimum cost of component parts" -msgstr "" - -#: part/models.py:3139 -msgid "Maximum BOM Cost" -msgstr "" - -#: part/models.py:3140 -msgid "Maximum cost of component parts" -msgstr "" - -#: part/models.py:3146 -msgid "Minimum Purchase Cost" -msgstr "" - -#: part/models.py:3147 -msgid "Minimum historical purchase cost" -msgstr "" - -#: part/models.py:3153 -msgid "Maximum Purchase Cost" -msgstr "" - -#: part/models.py:3154 -msgid "Maximum historical purchase cost" -msgstr "" - -#: part/models.py:3160 -msgid "Minimum Internal Price" -msgstr "" - -#: part/models.py:3161 -msgid "Minimum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3167 -msgid "Maximum Internal Price" -msgstr "" - -#: part/models.py:3168 -msgid "Maximum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3174 -msgid "Minimum Supplier Price" -msgstr "" - -#: part/models.py:3175 -msgid "Minimum price of part from external suppliers" -msgstr "" - -#: part/models.py:3181 -msgid "Maximum Supplier Price" -msgstr "" - -#: part/models.py:3182 -msgid "Maximum price of part from external suppliers" -msgstr "" - -#: part/models.py:3188 -msgid "Minimum Variant Cost" -msgstr "" - -#: part/models.py:3189 -msgid "Calculated minimum cost of variant parts" -msgstr "" - -#: part/models.py:3195 -msgid "Maximum Variant Cost" -msgstr "" - -#: part/models.py:3196 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:3203 -msgid "Override minimum cost" -msgstr "" - -#: part/models.py:3210 -msgid "Override maximum cost" -msgstr "" - -#: part/models.py:3217 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:3224 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:3230 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:3231 -msgid "Minimum sale price based on price breaks" -msgstr "" - -#: part/models.py:3237 -msgid "Maximum Sale Price" -msgstr "" - -#: part/models.py:3238 -msgid "Maximum sale price based on price breaks" -msgstr "" - -#: part/models.py:3244 -msgid "Minimum Sale Cost" -msgstr "" - -#: part/models.py:3245 -msgid "Minimum historical sale price" -msgstr "" - -#: part/models.py:3251 -msgid "Maximum Sale Cost" -msgstr "" - -#: part/models.py:3252 -msgid "Maximum historical sale price" -msgstr "" - -#: part/models.py:3271 -msgid "Part for stocktake" -msgstr "" - -#: part/models.py:3276 -msgid "Item Count" -msgstr "" - -#: part/models.py:3277 -msgid "Number of individual stock entries at time of stocktake" -msgstr "" - -#: part/models.py:3285 -msgid "Total available stock at time of stocktake" -msgstr "" - -#: part/models.py:3289 part/models.py:3372 -#: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 -#: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 -#: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 -msgid "Date" -msgstr "" - -#: part/models.py:3290 -msgid "Date stocktake was performed" -msgstr "" - -#: part/models.py:3298 -msgid "Additional notes" -msgstr "" - -#: part/models.py:3308 -msgid "User who performed this stocktake" -msgstr "" - -#: part/models.py:3314 -msgid "Minimum Stock Cost" -msgstr "" - -#: part/models.py:3315 -msgid "Estimated minimum cost of stock on hand" -msgstr "" - -#: part/models.py:3321 -msgid "Maximum Stock Cost" -msgstr "" - -#: part/models.py:3322 -msgid "Estimated maximum cost of stock on hand" -msgstr "" - -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 -msgid "Report" -msgstr "" - -#: part/models.py:3379 -msgid "Stocktake report file (generated internally)" -msgstr "" - -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 -msgid "Part Count" -msgstr "" - -#: part/models.py:3385 -msgid "Number of parts covered by stocktake" -msgstr "" - -#: part/models.py:3395 -msgid "User who requested this stocktake report" -msgstr "" - -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 -msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3586 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3603 templates/js/translated/part.js:2898 -msgid "Test Name" -msgstr "" - -#: part/models.py:3604 -msgid "Enter a name for the test" -msgstr "" - -#: part/models.py:3610 -msgid "Test Key" -msgstr "" - -#: part/models.py:3611 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3618 -msgid "Test Description" -msgstr "" - -#: part/models.py:3619 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 -msgid "Required" -msgstr "" - -#: part/models.py:3629 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3634 templates/js/translated/part.js:2935 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3635 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3640 templates/js/translated/part.js:2942 -msgid "Requires Attachment" -msgstr "" - -#: part/models.py:3642 -msgid "Does this test require a file attachment when adding a test result?" -msgstr "" - -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3713 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3750 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3765 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3772 -msgid "Physical units for this parameter" -msgstr "" - -#: part/models.py:3780 -msgid "Parameter description" -msgstr "" - -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 -msgid "Checkbox" -msgstr "" - -#: part/models.py:3787 -msgid "Is this parameter a checkbox?" -msgstr "" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 -msgid "Invalid choice for parameter value" -msgstr "" - -#: part/models.py:3938 -msgid "Parent Part" -msgstr "" - -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 -#: templates/InvenTree/settings/settings_staff_js.html:295 -msgid "Parameter Template" -msgstr "" - -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "" - -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 -msgid "Default Value" -msgstr "" - -#: part/models.py:4062 -msgid "Default Parameter Value" -msgstr "" - -#: part/models.py:4100 -msgid "Part ID or part name" -msgstr "" - -#: part/models.py:4101 -msgid "Unique part ID value" -msgstr "" - -#: part/models.py:4103 -msgid "Part IPN value" -msgstr "" - -#: part/models.py:4104 -msgid "Level" -msgstr "" - -#: part/models.py:4104 -msgid "BOM level" -msgstr "" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 -msgid "Select parent part" -msgstr "" - -#: part/models.py:4242 -msgid "Sub part" -msgstr "" - -#: part/models.py:4243 -msgid "Select part to be used in BOM" -msgstr "" - -#: part/models.py:4254 -msgid "BOM quantity for this BOM item" -msgstr "" - -#: part/models.py:4260 -msgid "This BOM item is optional" -msgstr "" - -#: part/models.py:4266 -msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" - -#: part/models.py:4273 part/templates/part/upload_bom.html:55 -msgid "Overage" -msgstr "" - -#: part/models.py:4274 -msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "" - -#: part/models.py:4281 -msgid "BOM item reference" -msgstr "" - -#: part/models.py:4289 -msgid "BOM item notes" -msgstr "" - -#: part/models.py:4295 -msgid "Checksum" -msgstr "" - -#: part/models.py:4296 -msgid "BOM line checksum" -msgstr "" - -#: part/models.py:4301 templates/js/translated/table_filters.js:181 -msgid "Validated" -msgstr "" - -#: part/models.py:4302 -msgid "This BOM item has been validated" -msgstr "" - -#: part/models.py:4307 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 -msgid "Gets inherited" -msgstr "" - -#: part/models.py:4308 -msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" - -#: part/models.py:4314 -msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" - -#: part/models.py:4399 stock/models.py:685 -msgid "Quantity must be integer value for trackable parts" -msgstr "" - -#: part/models.py:4409 part/models.py:4411 -msgid "Sub part must be specified" -msgstr "" - -#: part/models.py:4551 -msgid "BOM Item Substitute" -msgstr "" - -#: part/models.py:4572 -msgid "Substitute part cannot be the same as the master part" -msgstr "" - -#: part/models.py:4585 -msgid "Parent BOM item" -msgstr "" - -#: part/models.py:4593 -msgid "Substitute part" -msgstr "" - -#: part/models.py:4609 -msgid "Part 1" -msgstr "" - -#: part/models.py:4617 -msgid "Part 2" -msgstr "" - -#: part/models.py:4618 -msgid "Select Related Part" -msgstr "" - -#: part/models.py:4637 -msgid "Part relationship cannot be created between a part and itself" -msgstr "" - -#: part/models.py:4642 -msgid "Duplicate relationship already exists" -msgstr "" - -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 -#: part/templates/part/category_sidebar.html:7 -msgid "Subcategories" -msgstr "" - -#: part/serializers.py:197 -msgid "Results" -msgstr "" - -#: part/serializers.py:198 -msgid "Number of results recorded against this template" -msgstr "" - -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 -msgid "Purchase currency of this stock item" -msgstr "" - -#: part/serializers.py:291 -msgid "Number of parts using this template" -msgstr "" - -#: part/serializers.py:421 -msgid "No parts selected" -msgstr "" - -#: part/serializers.py:431 -msgid "Select category" -msgstr "" - -#: part/serializers.py:466 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:467 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:472 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:473 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:479 part/templates/part/detail.html:293 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:480 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:486 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:487 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:493 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:494 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:512 -msgid "Initial Stock Quantity" -msgstr "" - -#: part/serializers.py:514 -msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" - -#: part/serializers.py:521 -msgid "Initial Stock Location" -msgstr "" - -#: part/serializers.py:522 -msgid "Specify initial stock location for this Part" -msgstr "" - -#: part/serializers.py:539 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:555 -msgid "Select manufacturer (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:565 -msgid "Manufacturer part number" -msgstr "" - -#: part/serializers.py:572 -msgid "Selected company is not a valid supplier" -msgstr "" - -#: part/serializers.py:581 -msgid "Selected company is not a valid manufacturer" -msgstr "" - -#: part/serializers.py:592 -msgid "Manufacturer part matching this MPN already exists" -msgstr "" - -#: part/serializers.py:599 -msgid "Supplier part matching this SKU already exists" -msgstr "" - -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" - -#: part/serializers.py:908 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:911 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:942 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:948 templates/js/translated/part.js:103 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:949 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:955 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:956 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:964 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:965 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:970 -msgid "Existing Image" -msgstr "" - -#: part/serializers.py:971 -msgid "Filename of an existing part image" -msgstr "" - -#: part/serializers.py:988 -msgid "Image file does not exist" -msgstr "" - -#: part/serializers.py:1194 -msgid "Limit stocktake report to a particular part, and any variant parts" -msgstr "" - -#: part/serializers.py:1204 -msgid "Limit stocktake report to a particular part category, and any child categories" -msgstr "" - -#: part/serializers.py:1214 -msgid "Limit stocktake report to a particular stock location, and any child locations" -msgstr "" - -#: part/serializers.py:1220 -msgid "Exclude External Stock" -msgstr "" - -#: part/serializers.py:1221 -msgid "Exclude stock items in external locations" -msgstr "" - -#: part/serializers.py:1226 -msgid "Generate Report" -msgstr "" - -#: part/serializers.py:1227 -msgid "Generate report file containing calculated stocktake data" -msgstr "" - -#: part/serializers.py:1232 -msgid "Update Parts" -msgstr "" - -#: part/serializers.py:1233 -msgid "Update specified parts with calculated stocktake data" -msgstr "" - -#: part/serializers.py:1241 -msgid "Stocktake functionality is not enabled" -msgstr "" - -#: part/serializers.py:1347 -msgid "Override calculated value for minimum price" -msgstr "" - -#: part/serializers.py:1354 -msgid "Minimum price currency" -msgstr "" - -#: part/serializers.py:1362 -msgid "Override calculated value for maximum price" -msgstr "" - -#: part/serializers.py:1369 -msgid "Maximum price currency" -msgstr "" - -#: part/serializers.py:1398 -msgid "Update" -msgstr "" - -#: part/serializers.py:1399 -msgid "Update pricing for this part" -msgstr "" - -#: part/serializers.py:1422 -#, python-brace-format -msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" - -#: part/serializers.py:1429 -msgid "Minimum price must not be greater than maximum price" -msgstr "" - -#: part/serializers.py:1432 -msgid "Maximum price must not be less than minimum price" -msgstr "" - -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 -msgid "Select part to copy BOM from" -msgstr "" - -#: part/serializers.py:1845 -msgid "Remove Existing Data" -msgstr "" - -#: part/serializers.py:1846 -msgid "Remove existing BOM items before copying" -msgstr "" - -#: part/serializers.py:1851 -msgid "Include Inherited" -msgstr "" - -#: part/serializers.py:1852 -msgid "Include BOM items which are inherited from templated parts" -msgstr "" - -#: part/serializers.py:1857 -msgid "Skip Invalid Rows" -msgstr "" - -#: part/serializers.py:1858 -msgid "Enable this option to skip invalid rows" -msgstr "" - -#: part/serializers.py:1863 -msgid "Copy Substitute Parts" -msgstr "" - -#: part/serializers.py:1864 -msgid "Copy substitute parts when duplicate BOM items" -msgstr "" - -#: part/serializers.py:1901 -msgid "Clear Existing BOM" -msgstr "" - -#: part/serializers.py:1902 -msgid "Delete existing BOM items before uploading" -msgstr "" - -#: part/serializers.py:1934 -msgid "No part column specified" -msgstr "" - -#: part/serializers.py:1978 -msgid "Multiple matching parts found" -msgstr "" - -#: part/serializers.py:1981 -msgid "No matching part found" -msgstr "" - -#: part/serializers.py:1984 -msgid "Part is not designated as a component" -msgstr "" - -#: part/serializers.py:1993 -msgid "Quantity not provided" -msgstr "" - -#: part/serializers.py:2001 -msgid "Invalid quantity" -msgstr "" - -#: part/serializers.py:2024 -msgid "At least one BOM item is required" -msgstr "" - -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 -msgid "Total Quantity" -msgstr "" - -#: part/stocktake.py:225 -msgid "Total Cost Min" -msgstr "" - -#: part/stocktake.py:226 -msgid "Total Cost Max" -msgstr "" - -#: part/stocktake.py:284 -msgid "Stocktake Report Available" -msgstr "" - -#: part/stocktake.py:285 -msgid "A new stocktake report is available for download" -msgstr "" - -#: part/tasks.py:37 -msgid "Low stock notification" -msgstr "" - -#: part/tasks.py:39 -#, python-brace-format -msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" - -#: part/templates/part/bom.html:6 -msgid "You do not have permission to edit the BOM." -msgstr "" - -#: part/templates/part/bom.html:15 -msgid "The BOM this part has been changed, and must be validated" -msgstr "" - -#: part/templates/part/bom.html:17 -#, python-format -msgid "This BOM was last checked by %(checker)s on %(check_date)s" -msgstr "" - -#: part/templates/part/bom.html:21 -msgid "This BOM has not been validated." -msgstr "" - -#: part/templates/part/category.html:32 -msgid "Perform stocktake for this part category" -msgstr "" - -#: part/templates/part/category.html:38 part/templates/part/category.html:42 -msgid "You are subscribed to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:46 -msgid "Subscribe to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:52 -msgid "Category Actions" -msgstr "" - -#: part/templates/part/category.html:57 -msgid "Edit category" -msgstr "" - -#: part/templates/part/category.html:58 -msgid "Edit Category" -msgstr "" - -#: part/templates/part/category.html:62 -msgid "Delete category" -msgstr "" - -#: part/templates/part/category.html:63 -msgid "Delete Category" -msgstr "" - -#: part/templates/part/category.html:99 -msgid "Top level part category" -msgstr "" - -#: part/templates/part/category.html:124 -msgid "Parts (Including subcategories)" -msgstr "" - -#: part/templates/part/category.html:162 -msgid "Create new part" -msgstr "" - -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 -msgid "New Part" -msgstr "" - -#: part/templates/part/category.html:189 -#: templates/InvenTree/settings/part_parameters.html:7 -#: templates/InvenTree/settings/sidebar.html:49 -msgid "Part Parameters" -msgstr "" - -#: part/templates/part/category.html:208 -msgid "Create new part category" -msgstr "" - -#: part/templates/part/category.html:209 -msgid "New Category" -msgstr "" - -#: part/templates/part/category_sidebar.html:13 -msgid "Import Parts" -msgstr "" - -#: part/templates/part/copy_part.html:10 -#, python-format -msgid "Make a copy of part '%(full_name)s'." -msgstr "" - -#: part/templates/part/copy_part.html:14 -#: part/templates/part/create_part.html:11 -msgid "Possible Matching Parts" -msgstr "" - -#: part/templates/part/copy_part.html:15 -#: part/templates/part/create_part.html:12 -msgid "The new part may be a duplicate of these existing parts" -msgstr "" - -#: part/templates/part/create_part.html:17 -#, python-format -msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "" - -#: part/templates/part/detail.html:20 -msgid "Part Stock" -msgstr "" - -#: part/templates/part/detail.html:44 -msgid "Refresh scheduling data" -msgstr "" - -#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:552 -msgid "Refresh" -msgstr "" - -#: part/templates/part/detail.html:66 -msgid "Add stocktake information" -msgstr "" - -#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 -#: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 -msgid "Stocktake" -msgstr "" - -#: part/templates/part/detail.html:83 -msgid "Part Test Templates" -msgstr "" - -#: part/templates/part/detail.html:88 -msgid "Add Test Template" -msgstr "" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 -msgid "Sales Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:172 -msgid "Part Notes" -msgstr "" - -#: part/templates/part/detail.html:187 -msgid "Part Variants" -msgstr "" - -#: part/templates/part/detail.html:191 -msgid "Create new variant" -msgstr "" - -#: part/templates/part/detail.html:192 -msgid "New Variant" -msgstr "" - -#: part/templates/part/detail.html:215 -msgid "Add new parameter" -msgstr "" - -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 -msgid "Related Parts" -msgstr "" - -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 -msgid "Add Related" -msgstr "" - -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 -#: report/templates/report/inventree_bill_of_materials_report.html:100 -msgid "Bill of Materials" -msgstr "" - -#: part/templates/part/detail.html:276 -msgid "Export actions" -msgstr "" - -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 -msgid "Export BOM" -msgstr "" - -#: part/templates/part/detail.html:282 -msgid "Print BOM Report" -msgstr "" - -#: part/templates/part/detail.html:288 -msgid "BOM actions" -msgstr "" - -#: part/templates/part/detail.html:292 -msgid "Upload BOM" -msgstr "" - -#: part/templates/part/detail.html:294 -msgid "Validate BOM" -msgstr "" - -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 -#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 -msgid "Add BOM Item" -msgstr "" - -#: part/templates/part/detail.html:313 -msgid "Assemblies" -msgstr "" - -#: part/templates/part/detail.html:329 -msgid "Part Builds" -msgstr "" - -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 -msgid "Build Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:368 -msgid "Part Suppliers" -msgstr "" - -#: part/templates/part/detail.html:388 -msgid "Part Manufacturers" -msgstr "" - -#: part/templates/part/detail.html:672 -msgid "Related Part" -msgstr "" - -#: part/templates/part/detail.html:680 -msgid "Add Related Part" -msgstr "" - -#: part/templates/part/detail.html:765 -msgid "Add Test Result Template" -msgstr "" - -#: part/templates/part/import_wizard/ajax_part_upload.html:29 -#: part/templates/part/import_wizard/part_upload.html:14 -msgid "Insufficient privileges." -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:8 -msgid "Return to Parts" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:13 -msgid "Import Parts from File" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:31 -msgid "Requirements for part import" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "The part import file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:89 -msgid "Download Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:92 -#: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 -msgid "Format" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:93 -#: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 -msgid "Select file format" -msgstr "" - -#: part/templates/part/part_app_base.html:12 -msgid "Part List" -msgstr "" - -#: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 -msgid "You are subscribed to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:33 -msgid "Subscribe to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 -msgid "Print Label" -msgstr "" - -#: part/templates/part/part_base.html:58 -msgid "Show pricing information" -msgstr "" - -#: part/templates/part/part_base.html:63 -#: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 -msgid "Stock actions" -msgstr "" - -#: part/templates/part/part_base.html:70 -msgid "Count part stock" -msgstr "" - -#: part/templates/part/part_base.html:76 -msgid "Transfer part stock" -msgstr "" - -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 -msgid "Part actions" -msgstr "" - -#: part/templates/part/part_base.html:94 -msgid "Duplicate part" -msgstr "" - -#: part/templates/part/part_base.html:97 -msgid "Edit part" -msgstr "" - -#: part/templates/part/part_base.html:100 -msgid "Delete part" -msgstr "" - -#: part/templates/part/part_base.html:119 -msgid "Part is a template part (variants can be made from this part)" -msgstr "" - -#: part/templates/part/part_base.html:123 -msgid "Part can be assembled from other parts" -msgstr "" - -#: part/templates/part/part_base.html:127 -msgid "Part can be used in assemblies" -msgstr "" - -#: part/templates/part/part_base.html:131 -msgid "Part stock is tracked by serial number" -msgstr "" - -#: part/templates/part/part_base.html:135 -msgid "Part can be purchased from external suppliers" -msgstr "" - -#: part/templates/part/part_base.html:139 -msgid "Part can be sold to customers" -msgstr "" - -#: part/templates/part/part_base.html:145 -msgid "Part is not active" -msgstr "" - -#: part/templates/part/part_base.html:153 -msgid "Part is virtual (not a physical part)" -msgstr "" - -#: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 -msgid "Show Part Details" -msgstr "" - -#: part/templates/part/part_base.html:218 -#: stock/templates/stock/item_base.html:388 -msgid "Allocated to Build Orders" -msgstr "" - -#: part/templates/part/part_base.html:227 -#: stock/templates/stock/item_base.html:381 -msgid "Allocated to Sales Orders" -msgstr "" - -#: part/templates/part/part_base.html:300 -msgid "Minimum stock level" -msgstr "" - -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 -#: templates/js/translated/pricing.js:391 -#: templates/js/translated/pricing.js:1054 -msgid "Price Range" -msgstr "" - -#: part/templates/part/part_base.html:361 -msgid "Latest Serial Number" -msgstr "" - -#: part/templates/part/part_base.html:365 -#: stock/templates/stock/item_base.html:322 -msgid "Search for serial number" -msgstr "" - -#: part/templates/part/part_base.html:453 -msgid "Part QR Code" -msgstr "" - -#: part/templates/part/part_base.html:470 -msgid "Link Barcode to Part" -msgstr "" - -#: part/templates/part/part_base.html:520 -msgid "Calculate" -msgstr "" - -#: part/templates/part/part_base.html:537 -msgid "Remove associated image from this part" -msgstr "" - -#: part/templates/part/part_base.html:588 -msgid "No matching images found" -msgstr "" - -#: part/templates/part/part_base.html:684 -msgid "Hide Part Details" -msgstr "" - -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 -#: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 -msgid "Supplier Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:26 -#: part/templates/part/part_pricing.html:52 -#: part/templates/part/part_pricing.html:95 -#: part/templates/part/part_pricing.html:110 -msgid "Unit Cost" -msgstr "" - -#: part/templates/part/part_pricing.html:40 -msgid "No supplier pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 -#: part/templates/part/prices.html:250 -msgid "BOM Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:66 -msgid "Unit Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:72 -msgid "Total Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:83 -msgid "No BOM pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:92 -msgid "Internal Price" -msgstr "" - -#: part/templates/part/part_pricing.html:123 -msgid "No pricing information is available for this part." -msgstr "" - -#: part/templates/part/part_scheduling.html:14 -msgid "Scheduled Quantity" -msgstr "" - -#: part/templates/part/part_sidebar.html:11 -msgid "Variants" -msgstr "" - -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:39 -msgid "Pricing" -msgstr "" - -#: part/templates/part/part_sidebar.html:44 -msgid "Scheduling" -msgstr "" - -#: part/templates/part/part_sidebar.html:54 -msgid "Test Templates" -msgstr "" - -#: part/templates/part/part_thumb.html:11 -msgid "Select from existing images" -msgstr "" - -#: part/templates/part/prices.html:11 -msgid "Pricing Overview" -msgstr "" - -#: part/templates/part/prices.html:14 -msgid "Refresh Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:17 -msgid "Override Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:18 -#: templates/InvenTree/settings/settings_staff_js.html:80 -#: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 -#: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 -msgid "Edit" -msgstr "" - -#: part/templates/part/prices.html:28 stock/admin.py:251 -#: stock/templates/stock/item_base.html:446 -#: templates/js/translated/company.js:1703 -#: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 -msgid "Last Updated" -msgstr "" - -#: part/templates/part/prices.html:37 part/templates/part/prices.html:127 -msgid "Price Category" -msgstr "" - -#: part/templates/part/prices.html:38 part/templates/part/prices.html:128 -msgid "Minimum" -msgstr "" - -#: part/templates/part/prices.html:39 part/templates/part/prices.html:129 -msgid "Maximum" -msgstr "" - -#: part/templates/part/prices.html:51 part/templates/part/prices.html:174 -msgid "Internal Pricing" -msgstr "" - -#: part/templates/part/prices.html:64 part/templates/part/prices.html:206 -msgid "Purchase History" -msgstr "" - -#: part/templates/part/prices.html:98 part/templates/part/prices.html:274 -msgid "Variant Pricing" -msgstr "" - -#: part/templates/part/prices.html:106 -msgid "Pricing Overrides" -msgstr "" - -#: part/templates/part/prices.html:113 -msgid "Overall Pricing" -msgstr "" - -#: part/templates/part/prices.html:149 part/templates/part/prices.html:326 -msgid "Sale History" -msgstr "" - -#: part/templates/part/prices.html:157 -msgid "Sale price data is not available for this part" -msgstr "" - -#: part/templates/part/prices.html:164 -msgid "Price range data is not available for this part." -msgstr "" - -#: part/templates/part/prices.html:175 part/templates/part/prices.html:207 -#: part/templates/part/prices.html:228 part/templates/part/prices.html:251 -#: part/templates/part/prices.html:275 part/templates/part/prices.html:298 -#: part/templates/part/prices.html:327 -msgid "Jump to overview" -msgstr "" - -#: part/templates/part/prices.html:180 -msgid "Add Internal Price Break" -msgstr "" - -#: part/templates/part/prices.html:297 -msgid "Sale Pricing" -msgstr "" - -#: part/templates/part/prices.html:303 -msgid "Add Sell Price Break" -msgstr "" - -#: part/templates/part/pricing_javascript.html:24 -msgid "Update Pricing" -msgstr "" - -#: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 -msgid "No Stock" -msgstr "" - -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 -msgid "Low Stock" -msgstr "" - -#: part/templates/part/upload_bom.html:8 -msgid "Return to BOM" -msgstr "" - -#: part/templates/part/upload_bom.html:13 -msgid "Upload Bill of Materials" -msgstr "" - -#: part/templates/part/upload_bom.html:19 -msgid "BOM upload requirements" -msgstr "" - -#: part/templates/part/upload_bom.html:23 -#: part/templates/part/upload_bom.html:90 -msgid "Upload BOM File" -msgstr "" - -#: part/templates/part/upload_bom.html:29 -msgid "Submit BOM Data" -msgstr "" - -#: part/templates/part/upload_bom.html:37 -msgid "Requirements for BOM upload" -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "The BOM file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "BOM Upload Template" -msgstr "" - -#: part/templates/part/upload_bom.html:40 -msgid "Each part must already exist in the database" -msgstr "" - -#: part/templates/part/variant_part.html:9 -msgid "Create new part variant" -msgstr "" - -#: part/templates/part/variant_part.html:10 -msgid "Create a new variant part from this template" -msgstr "" - -#: part/views.py:111 -msgid "Match References" -msgstr "" - -#: part/views.py:275 -#, python-brace-format -msgid "Can't import part {new_part.name} because there is no category assigned" -msgstr "" - -#: part/views.py:425 -msgid "Select Part Image" -msgstr "" - -#: part/views.py:448 -msgid "Updated part image" -msgstr "" - -#: part/views.py:451 -msgid "Part image not found" -msgstr "" - -#: part/views.py:545 -msgid "Part Pricing" -msgstr "" - -#: plugin/api.py:172 -msgid "Plugin cannot be deleted as it is currently active" -msgstr "" - -#: plugin/base/action/api.py:32 -msgid "No action specified" -msgstr "" - -#: plugin/base/action/api.py:41 -msgid "No matching action found" -msgstr "" - -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 -msgid "Barcode matches existing item" -msgstr "" - -#: plugin/base/barcodes/api.py:336 -msgid "No matching part data found" -msgstr "" - -#: plugin/base/barcodes/api.py:353 -msgid "No matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:357 -msgid "Multiple matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:381 -msgid "Matched supplier part" -msgstr "" - -#: plugin/base/barcodes/api.py:430 -msgid "Item has already been received" -msgstr "" - -#: plugin/base/barcodes/api.py:467 -msgid "No match for supplier barcode" -msgstr "" - -#: plugin/base/barcodes/api.py:510 -msgid "Multiple matching line items found" -msgstr "" - -#: plugin/base/barcodes/api.py:513 -msgid "No matching line item found" -msgstr "" - -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 -msgid "Barcode does not match an existing stock item" -msgstr "" - -#: plugin/base/barcodes/api.py:569 -msgid "Stock item does not match line item" -msgstr "" - -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 -msgid "Insufficient stock available" -msgstr "" - -#: plugin/base/barcodes/api.py:602 -msgid "Stock item allocated to sales order" -msgstr "" - -#: plugin/base/barcodes/api.py:606 -msgid "Not enough information" -msgstr "" - -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 -msgid "Found multiple matching supplier parts for barcode" -msgstr "" - -#: plugin/base/barcodes/mixins.py:222 -#, python-brace-format -msgid "Found multiple purchase orders matching '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:226 -#, python-brace-format -msgid "No matching purchase order for '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:231 -msgid "Purchase order does not match supplier" -msgstr "" - -#: plugin/base/barcodes/mixins.py:465 -msgid "Failed to find pending line item for supplier part" -msgstr "" - -#: plugin/base/barcodes/mixins.py:496 -msgid "Further information required to receive line item" -msgstr "" - -#: plugin/base/barcodes/mixins.py:504 -msgid "Received purchase order line item" -msgstr "" - -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 -msgid "Purchase Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:111 -msgid "Purchase order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:129 -msgid "PurchaseOrder to receive items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:135 -msgid "Purchase order has not been placed" -msgstr "" - -#: plugin/base/barcodes/serializers.py:143 -msgid "Location to receive items into" -msgstr "" - -#: plugin/base/barcodes/serializers.py:149 -msgid "Cannot select a structural location" -msgstr "" - -#: plugin/base/barcodes/serializers.py:163 -msgid "Sales Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:169 -msgid "Sales order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:177 -msgid "Sales order line item to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:184 -msgid "Sales order shipment to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:190 -msgid "Shipment has already been delivered" -msgstr "" - -#: plugin/base/barcodes/serializers.py:195 -msgid "Quantity to allocate" -msgstr "" - -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 -msgid "Label printing failed" -msgstr "" - -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:28 -msgid "Provides native support for barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/integration/core_notifications.py:35 -#: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:34 -msgid "InvenTree Notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:36 -msgid "Integrated outgoing notification methods" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:41 -#: plugin/builtin/integration/core_notifications.py:80 -msgid "Enable email notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:42 -#: plugin/builtin/integration/core_notifications.py:81 -msgid "Allow sending of emails for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:47 -msgid "Enable slack notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:49 -msgid "Allow sending of slack channel messages for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:55 -msgid "Slack incoming webhook url" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:56 -msgid "URL that is used to send messages to a slack channel" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:164 -msgid "Open link" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:22 -msgid "InvenTree Currency Exchange" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:23 -msgid "Default currency exchange integration" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:19 -msgid "InvenTree PDF label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:20 -msgid "Provides native support for printing PDF labels" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 -msgid "Debug mode" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 -msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:61 -msgid "InvenTree machine label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:62 -msgid "Provides support for printing using a machine" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:149 -msgid "last used" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:166 -msgid "Options" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:29 -msgid "Page size for the label sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:34 -msgid "Skip Labels" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:35 -msgid "Skip this number of labels when printing label sheets" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:41 -msgid "Border" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:42 -msgid "Print a border around each label" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 -msgid "Landscape" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:48 -msgid "Print the label sheet in landscape mode" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:60 -msgid "InvenTree Label Sheet Printer" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:61 -msgid "Arrays multiple labels onto a single sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:106 -msgid "Label is too large for page size" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:140 -msgid "No labels were generated" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:16 -msgid "Supplier Integration - DigiKey" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:17 -msgid "Provides support for scanning DigiKey barcodes" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:26 -msgid "The Supplier which acts as 'DigiKey'" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:18 -msgid "Supplier Integration - LCSC" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:19 -msgid "Provides support for scanning LCSC barcodes" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:27 -msgid "The Supplier which acts as 'LCSC'" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:16 -msgid "Supplier Integration - Mouser" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:17 -msgid "Provides support for scanning Mouser barcodes" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:25 -msgid "The Supplier which acts as 'Mouser'" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:18 -msgid "Supplier Integration - TME" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:19 -msgid "Provides support for scanning TME barcodes" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:27 -msgid "The Supplier which acts as 'TME'" -msgstr "" - -#: plugin/installer.py:194 plugin/installer.py:282 -msgid "Only staff users can administer plugins" -msgstr "" - -#: plugin/installer.py:197 -msgid "Plugin installation is disabled" -msgstr "" - -#: plugin/installer.py:248 -msgid "Installed plugin successfully" -msgstr "" - -#: plugin/installer.py:254 -#, python-brace-format -msgid "Installed plugin into {path}" -msgstr "" - -#: plugin/installer.py:273 -msgid "Plugin was not found in registry" -msgstr "" - -#: plugin/installer.py:276 -msgid "Plugin is not a packaged plugin" -msgstr "" - -#: plugin/installer.py:279 -msgid "Plugin package name not found" -msgstr "" - -#: plugin/installer.py:299 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:303 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" - -#: plugin/installer.py:316 -msgid "Uninstalled plugin successfully" -msgstr "" - -#: plugin/models.py:36 -msgid "Plugin Configuration" -msgstr "" - -#: plugin/models.py:37 -msgid "Plugin Configurations" -msgstr "" - -#: plugin/models.py:43 users/models.py:100 -msgid "Key" -msgstr "" - -#: plugin/models.py:44 -msgid "Key of plugin" -msgstr "" - -#: plugin/models.py:52 -msgid "PluginName of the plugin" -msgstr "" - -#: plugin/models.py:59 plugin/serializers.py:90 -msgid "Package Name" -msgstr "" - -#: plugin/models.py:61 -msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" - -#: plugin/models.py:66 -msgid "Is the plugin active" -msgstr "" - -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 -msgid "Installed" -msgstr "" - -#: plugin/models.py:166 -msgid "Sample plugin" -msgstr "" - -#: plugin/models.py:174 -msgid "Builtin Plugin" -msgstr "" - -#: plugin/models.py:182 -msgid "Package Plugin" -msgstr "" - -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 -#: templates/js/translated/plugin.js:51 -msgid "Plugin" -msgstr "" - -#: plugin/models.py:267 -msgid "Method" -msgstr "" - -#: plugin/plugin.py:270 -msgid "No author found" -msgstr "" - -#: plugin/registry.py:534 -#, python-brace-format -msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" - -#: plugin/registry.py:537 -#, python-brace-format -msgid "Plugin requires at least version {v}" -msgstr "" - -#: plugin/registry.py:539 -#, python-brace-format -msgid "Plugin requires at most version {v}" -msgstr "" - -#: plugin/samples/integration/sample.py:52 -msgid "Enable PO" -msgstr "" - -#: plugin/samples/integration/sample.py:53 -msgid "Enable PO functionality in InvenTree interface" -msgstr "" - -#: plugin/samples/integration/sample.py:58 -msgid "API Key" -msgstr "" - -#: plugin/samples/integration/sample.py:59 -msgid "Key required for accessing external API" -msgstr "" - -#: plugin/samples/integration/sample.py:63 -msgid "Numerical" -msgstr "" - -#: plugin/samples/integration/sample.py:64 -msgid "A numerical setting" -msgstr "" - -#: plugin/samples/integration/sample.py:69 -msgid "Choice Setting" -msgstr "" - -#: plugin/samples/integration/sample.py:70 -msgid "A setting with multiple choices" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:15 -msgid "Sample currency exchange plugin" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:18 -msgid "InvenTree Contributors" -msgstr "" - -#: plugin/serializers.py:81 -msgid "Source URL" -msgstr "" - -#: plugin/serializers.py:83 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" - -#: plugin/serializers.py:92 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" - -#: plugin/serializers.py:99 -#: templates/InvenTree/settings/plugin_settings.html:42 -#: templates/js/translated/plugin.js:86 -msgid "Version" -msgstr "" - -#: plugin/serializers.py:101 -msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" - -#: plugin/serializers.py:106 -msgid "Confirm plugin installation" -msgstr "" - -#: plugin/serializers.py:108 -msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" - -#: plugin/serializers.py:121 -msgid "Installation not confirmed" -msgstr "" - -#: plugin/serializers.py:123 -msgid "Either packagename of URL must be provided" -msgstr "" - -#: plugin/serializers.py:161 -msgid "Full reload" -msgstr "" - -#: plugin/serializers.py:162 -msgid "Perform a full reload of the plugin registry" -msgstr "" - -#: plugin/serializers.py:168 -msgid "Force reload" -msgstr "" - -#: plugin/serializers.py:170 -msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" - -#: plugin/serializers.py:177 -msgid "Collect plugins" -msgstr "" - -#: plugin/serializers.py:178 -msgid "Collect plugins and add them to the registry" -msgstr "" - -#: plugin/serializers.py:205 -msgid "Activate Plugin" -msgstr "" - -#: plugin/serializers.py:206 -msgid "Activate this plugin" -msgstr "" - -#: plugin/serializers.py:226 -msgid "Delete configuration" -msgstr "" - -#: plugin/serializers.py:227 -msgid "Delete the plugin configuration from the database" -msgstr "" - -#: report/api.py:88 -msgid "No valid objects provided to template" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "" - -#: report/helpers.py:43 -msgid "A4" -msgstr "" - -#: report/helpers.py:44 -msgid "A3" -msgstr "" - -#: report/helpers.py:45 -msgid "Legal" -msgstr "" - -#: report/helpers.py:46 -msgid "Letter" -msgstr "" - -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 -msgid "Template name" -msgstr "" - -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" - -#: report/models.py:302 -msgid "Page size for PDF reports" -msgstr "" - -#: report/models.py:308 -msgid "Render report in landscape orientation" -msgstr "" - -#: report/models.py:367 -msgid "Width [mm]" -msgstr "" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "" - -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" - -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" - -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" - -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" - -#: report/models.py:456 -msgid "Report Template" -msgstr "" - -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" - -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" - -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" - -#: report/models.py:479 -msgid "Label Template" -msgstr "" - -#: report/models.py:502 -msgid "Snippet" -msgstr "" - -#: report/models.py:503 -msgid "Report snippet file" -msgstr "" - -#: report/models.py:510 -msgid "Snippet file description" -msgstr "" - -#: report/models.py:528 -msgid "Asset" -msgstr "" - -#: report/models.py:529 -msgid "Report asset file" -msgstr "" - -#: report/models.py:536 -msgid "Asset file description" -msgstr "" - -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: report/templates/report/inventree_bill_of_materials_report.html:133 -msgid "Materials needed" -msgstr "" - -#: report/templates/report/inventree_build_order_report.html:146 -msgid "Required For" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:15 -msgid "Supplier was deleted" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 -#: templates/js/translated/pricing.js:596 -#: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 -msgid "Unit Price" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 -msgid "Extra Line Items" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 -msgid "Total" -msgstr "" - -#: report/templates/report/inventree_stock_location_report.html:97 -msgid "Stock location items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:21 -msgid "Stock Item Test Report" -msgstr "" - -#: report/templates/report/inventree_test_report.html:97 -msgid "Test Results" -msgstr "" - -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 -msgid "Test" -msgstr "" - -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 -msgid "Result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:129 -msgid "Pass" -msgstr "" - -#: report/templates/report/inventree_test_report.html:131 -msgid "Fail" -msgstr "" - -#: report/templates/report/inventree_test_report.html:138 -msgid "No result (required)" -msgstr "" - -#: report/templates/report/inventree_test_report.html:140 -msgid "No result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 -msgid "Installed Items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 -msgid "Serial" -msgstr "" - -#: report/templatetags/report.py:98 -msgid "Asset file does not exist" -msgstr "" - -#: report/templatetags/report.py:154 report/templatetags/report.py:233 -msgid "Image file not found" -msgstr "" - -#: report/templatetags/report.py:258 -msgid "part_image tag requires a Part instance" -msgstr "" - -#: report/templatetags/report.py:299 -msgid "company_image tag requires a Company instance" -msgstr "" - -#: stock/admin.py:51 stock/admin.py:171 -msgid "Location ID" -msgstr "" - -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 -msgid "Location Path" -msgstr "" - -#: stock/admin.py:148 -msgid "Stock Item ID" -msgstr "" - -#: stock/admin.py:167 -msgid "Status Code" -msgstr "" - -#: stock/admin.py:179 -msgid "Supplier Part ID" -msgstr "" - -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 -msgid "Supplier ID" -msgstr "" - -#: stock/admin.py:200 -msgid "Customer ID" -msgstr "" - -#: stock/admin.py:205 stock/models.py:825 -#: stock/templates/stock/item_base.html:354 -msgid "Installed In" -msgstr "" - -#: stock/admin.py:210 -msgid "Build ID" -msgstr "" - -#: stock/admin.py:220 -msgid "Sales Order ID" -msgstr "" - -#: stock/admin.py:225 -msgid "Purchase Order ID" -msgstr "" - -#: stock/admin.py:240 -msgid "Review Needed" -msgstr "" - -#: stock/admin.py:245 -msgid "Delete on Deplete" -msgstr "" - -#: stock/admin.py:260 stock/models.py:919 -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 -msgid "Expiry Date" -msgstr "" - -#: stock/api.py:310 -msgid "Filter by location depth" -msgstr "" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 -msgid "Include sub-locations in filtered results" -msgstr "" - -#: stock/api.py:367 stock/serializers.py:1186 -msgid "Parent Location" -msgstr "" - -#: stock/api.py:368 -msgid "Filter by parent location" -msgstr "" - -#: stock/api.py:615 templates/js/translated/table_filters.js:434 -msgid "External Location" -msgstr "" - -#: stock/api.py:803 -msgid "Part Tree" -msgstr "" - -#: stock/api.py:833 -msgid "Expiry date before" -msgstr "" - -#: stock/api.py:837 -msgid "Expiry date after" -msgstr "" - -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 -msgid "Stale" -msgstr "" - -#: stock/api.py:927 -msgid "Quantity is required" -msgstr "" - -#: stock/api.py:933 -msgid "Valid part must be supplied" -msgstr "" - -#: stock/api.py:964 -msgid "The given supplier part does not exist" -msgstr "" - -#: stock/api.py:974 -msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" - -#: stock/api.py:1005 -msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" - -#: stock/models.py:64 -msgid "Stock Location type" -msgstr "" - -#: stock/models.py:65 -msgid "Stock Location types" -msgstr "" - -#: stock/models.py:91 -msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" - -#: stock/models.py:131 stock/models.py:807 -#: stock/templates/stock/location.html:17 -#: stock/templates/stock/stock_app_base.html:8 -msgid "Stock Location" -msgstr "" - -#: stock/models.py:132 stock/templates/stock/location.html:183 -#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 -#: users/models.py:205 -msgid "Stock Locations" -msgstr "" - -#: stock/models.py:180 stock/models.py:968 -#: stock/templates/stock/item_base.html:247 -msgid "Owner" -msgstr "" - -#: stock/models.py:181 stock/models.py:969 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:189 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 -msgid "External" -msgstr "" - -#: stock/models.py:197 -msgid "This is an external stock location" -msgstr "" - -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 -msgid "Location type" -msgstr "" - -#: stock/models.py:207 -msgid "Stock location type of this location" -msgstr "" - -#: stock/models.py:279 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:664 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:691 stock/serializers.py:480 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:708 -#, python-brace-format -msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" - -#: stock/models.py:718 stock/models.py:731 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:721 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:743 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:748 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:761 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:777 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:789 -msgid "Base part" -msgstr "" - -#: stock/models.py:799 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:811 -msgid "Where is this stock item located?" -msgstr "" - -#: stock/models.py:819 stock/serializers.py:1580 -msgid "Packaging this stock item is stored in" -msgstr "" - -#: stock/models.py:830 -msgid "Is this item installed in another item?" -msgstr "" - -#: stock/models.py:849 -msgid "Serial number for this item" -msgstr "" - -#: stock/models.py:863 stock/serializers.py:1563 -msgid "Batch code for this stock item" -msgstr "" - -#: stock/models.py:868 -msgid "Stock Quantity" -msgstr "" - -#: stock/models.py:878 -msgid "Source Build" -msgstr "" - -#: stock/models.py:881 -msgid "Build for this stock item" -msgstr "" - -#: stock/models.py:888 stock/templates/stock/item_base.html:363 -msgid "Consumed By" -msgstr "" - -#: stock/models.py:891 -msgid "Build order which consumed this stock item" -msgstr "" - -#: stock/models.py:900 -msgid "Source Purchase Order" -msgstr "" - -#: stock/models.py:904 -msgid "Purchase order for this stock item" -msgstr "" - -#: stock/models.py:910 -msgid "Destination Sales Order" -msgstr "" - -#: stock/models.py:921 -msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" - -#: stock/models.py:939 -msgid "Delete on deplete" -msgstr "" - -#: stock/models.py:940 -msgid "Delete this Stock Item when stock is depleted" -msgstr "" - -#: stock/models.py:960 -msgid "Single unit purchase price at time of purchase" -msgstr "" - -#: stock/models.py:991 -msgid "Converted to part" -msgstr "" - -#: stock/models.py:1511 -msgid "Part is not set as trackable" -msgstr "" - -#: stock/models.py:1517 -msgid "Quantity must be integer" -msgstr "" - -#: stock/models.py:1525 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" - -#: stock/models.py:1531 -msgid "Serial numbers must be a list of integers" -msgstr "" - -#: stock/models.py:1536 -msgid "Quantity does not match serial numbers" -msgstr "" - -#: stock/models.py:1544 stock/serializers.py:726 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/models.py:1641 -msgid "Test template does not exist" -msgstr "" - -#: stock/models.py:1659 -msgid "Stock item has been assigned to a sales order" -msgstr "" - -#: stock/models.py:1663 -msgid "Stock item is installed in another item" -msgstr "" - -#: stock/models.py:1666 -msgid "Stock item contains other items" -msgstr "" - -#: stock/models.py:1669 -msgid "Stock item has been assigned to a customer" -msgstr "" - -#: stock/models.py:1672 -msgid "Stock item is currently in production" -msgstr "" - -#: stock/models.py:1675 -msgid "Serialized stock cannot be merged" -msgstr "" - -#: stock/models.py:1682 stock/serializers.py:1469 -msgid "Duplicate stock items" -msgstr "" - -#: stock/models.py:1686 -msgid "Stock items must refer to the same part" -msgstr "" - -#: stock/models.py:1694 -msgid "Stock items must refer to the same supplier part" -msgstr "" - -#: stock/models.py:1699 -msgid "Stock status codes must match" -msgstr "" - -#: stock/models.py:1960 -msgid "StockItem cannot be moved as it is not in stock" -msgstr "" - -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 -msgid "Entry notes" -msgstr "" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2454 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 -msgid "Test result" -msgstr "" - -#: stock/models.py:2551 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2559 -msgid "Test result attachment" -msgstr "" - -#: stock/models.py:2563 -msgid "Test notes" -msgstr "" - -#: stock/models.py:2571 templates/js/translated/stock.js:1633 -msgid "Test station" -msgstr "" - -#: stock/models.py:2572 -msgid "The identifier of the test station where the test was performed" -msgstr "" - -#: stock/models.py:2578 -msgid "Started" -msgstr "" - -#: stock/models.py:2579 -msgid "The timestamp of the test start" -msgstr "" - -#: stock/models.py:2585 -msgid "Finished" -msgstr "" - -#: stock/models.py:2586 -msgid "The timestamp of the test finish" -msgstr "" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 -msgid "Serial number is too large" -msgstr "" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 -msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" - -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 -msgid "Purchase price of this stock item, per unit or pack" -msgstr "" - -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 -msgid "Enter number of stock items to serialize" -msgstr "" - -#: stock/serializers.py:674 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" - -#: stock/serializers.py:681 -msgid "Enter serial numbers for new items" -msgstr "" - -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 -msgid "Destination stock location" -msgstr "" - -#: stock/serializers.py:699 -msgid "Optional note field" -msgstr "" - -#: stock/serializers.py:709 -msgid "Serial numbers cannot be assigned to this part" -msgstr "" - -#: stock/serializers.py:764 -msgid "Select stock item to install" -msgstr "" - -#: stock/serializers.py:771 -msgid "Quantity to Install" -msgstr "" - -#: stock/serializers.py:772 -msgid "Enter the quantity of items to install" -msgstr "" - -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 -msgid "Add transaction note (optional)" -msgstr "" - -#: stock/serializers.py:785 -msgid "Quantity to install must be at least 1" -msgstr "" - -#: stock/serializers.py:793 -msgid "Stock item is unavailable" -msgstr "" - -#: stock/serializers.py:804 -msgid "Selected part is not in the Bill of Materials" -msgstr "" - -#: stock/serializers.py:817 -msgid "Quantity to install must not exceed available quantity" -msgstr "" - -#: stock/serializers.py:852 -msgid "Destination location for uninstalled item" -msgstr "" - -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 -msgid "Select part to convert stock item into" -msgstr "" - -#: stock/serializers.py:930 -msgid "Selected part is not a valid option for conversion" -msgstr "" - -#: stock/serializers.py:947 -msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" - -#: stock/serializers.py:978 -msgid "Destination location for returned item" -msgstr "" - -#: stock/serializers.py:1015 -msgid "Select stock items to change status" -msgstr "" - -#: stock/serializers.py:1021 -msgid "No stock items selected" -msgstr "" - -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 -#: stock/templates/stock/location_sidebar.html:5 -msgid "Sublocations" -msgstr "" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 -msgid "Part must be salable" -msgstr "" - -#: stock/serializers.py:1302 -msgid "Item is allocated to a sales order" -msgstr "" - -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "" - -#: stock/templates/stock/item.html:17 -msgid "Stock Tracking Information" -msgstr "" - -#: stock/templates/stock/item.html:63 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:72 -msgid "This stock item does not have any child items" -msgstr "" - -#: stock/templates/stock/item.html:81 -#: stock/templates/stock/stock_sidebar.html:12 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 -msgid "Test Report" -msgstr "" - -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 -msgid "Delete Test Data" -msgstr "" - -#: stock/templates/stock/item.html:93 -msgid "Add Test Data" -msgstr "" - -#: stock/templates/stock/item.html:125 -msgid "Stock Item Notes" -msgstr "" - -#: stock/templates/stock/item.html:140 -msgid "Installed Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 -msgid "Install Stock Item" -msgstr "" - -#: stock/templates/stock/item.html:264 -msgid "Delete all test results for this stock item" -msgstr "" - -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 -msgid "Add Test Result" -msgstr "" - -#: stock/templates/stock/item_base.html:33 -msgid "Locate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:51 -msgid "Scan to Location" -msgstr "" - -#: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 -msgid "Printing actions" -msgstr "" - -#: stock/templates/stock/item_base.html:75 -msgid "Stock adjustment actions" -msgstr "" - -#: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 -msgid "Count stock" -msgstr "" - -#: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 -msgid "Add stock" -msgstr "" - -#: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 -msgid "Remove stock" -msgstr "" - -#: stock/templates/stock/item_base.html:85 -msgid "Serialize stock" -msgstr "" - -#: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 -msgid "Transfer stock" -msgstr "" - -#: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 -msgid "Assign to customer" -msgstr "" - -#: stock/templates/stock/item_base.html:94 -msgid "Return to stock" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install" -msgstr "" - -#: stock/templates/stock/item_base.html:115 -msgid "Convert to variant" -msgstr "" - -#: stock/templates/stock/item_base.html:118 -msgid "Duplicate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:120 -msgid "Edit stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:123 -msgid "Delete stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 -msgid "Build" -msgstr "" - -#: stock/templates/stock/item_base.html:211 -msgid "No manufacturer set" -msgstr "" - -#: stock/templates/stock/item_base.html:251 -msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 -msgid "Read only" -msgstr "" - -#: stock/templates/stock/item_base.html:265 -msgid "This stock item is unavailable" -msgstr "" - -#: stock/templates/stock/item_base.html:271 -msgid "This stock item is in production and cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:272 -msgid "Edit the stock item from the build view." -msgstr "" - -#: stock/templates/stock/item_base.html:287 -msgid "This stock item is allocated to Sales Order" -msgstr "" - -#: stock/templates/stock/item_base.html:295 -msgid "This stock item is allocated to Build Order" -msgstr "" - -#: stock/templates/stock/item_base.html:311 -msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "previous page" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "Navigate to previous serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "next page" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "Navigate to next serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 -msgid "No location set" -msgstr "" - -#: stock/templates/stock/item_base.html:413 -msgid "Tests" -msgstr "" - -#: stock/templates/stock/item_base.html:419 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:437 -#, python-format -msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:439 -#, python-format -msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:455 -msgid "No stocktake performed" -msgstr "" - -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 -msgid "stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:527 -msgid "Edit Stock Status" -msgstr "" - -#: stock/templates/stock/item_base.html:536 -msgid "Stock Item QR Code" -msgstr "" - -#: stock/templates/stock/item_base.html:547 -msgid "Link Barcode to Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:611 -msgid "Select one of the part variants listed below." -msgstr "" - -#: stock/templates/stock/item_base.html:614 -msgid "Warning" -msgstr "" - -#: stock/templates/stock/item_base.html:615 -msgid "This action cannot be easily undone" -msgstr "" - -#: stock/templates/stock/item_base.html:623 -msgid "Convert Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:656 -msgid "Return to Stock" -msgstr "" - -#: stock/templates/stock/item_serialize.html:5 -msgid "Create serialized items from this stock item." -msgstr "" - -#: stock/templates/stock/item_serialize.html:7 -msgid "Select quantity to serialize, and unique serial numbers." -msgstr "" - -#: stock/templates/stock/location.html:35 -msgid "Perform stocktake for this stock location" -msgstr "" - -#: stock/templates/stock/location.html:42 -msgid "Locate stock location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan stock items into this location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan In Stock Items" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan In Container" -msgstr "" - -#: stock/templates/stock/location.html:72 -msgid "Print Location Report" -msgstr "" - -#: stock/templates/stock/location.html:101 -msgid "Location actions" -msgstr "" - -#: stock/templates/stock/location.html:103 -msgid "Edit location" -msgstr "" - -#: stock/templates/stock/location.html:105 -msgid "Delete location" -msgstr "" - -#: stock/templates/stock/location.html:135 -msgid "Top level stock location" -msgstr "" - -#: stock/templates/stock/location.html:141 -msgid "Location Owner" -msgstr "" - -#: stock/templates/stock/location.html:145 -msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "" - -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 -msgid "Create new stock location" -msgstr "" - -#: stock/templates/stock/location.html:224 -msgid "New Location" -msgstr "" - -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 -msgid "stock location" -msgstr "" - -#: stock/templates/stock/location.html:320 -msgid "Scanned stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:393 -msgid "Stock Location QR Code" -msgstr "" - -#: stock/templates/stock/location.html:404 -msgid "Link Barcode to Stock Location" -msgstr "" - -#: stock/templates/stock/stock_app_base.html:16 -msgid "Loading..." -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:5 -msgid "Stock Tracking" -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Allocations" -msgstr "" - -#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 -msgid "Permission Denied" -msgstr "" - -#: templates/403.html:15 -msgid "You do not have permission to view this page." -msgstr "" - -#: templates/403_csrf.html:11 -msgid "Authentication Failure" -msgstr "" - -#: templates/403_csrf.html:14 -msgid "You have been logged out from InvenTree." -msgstr "" - -#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 -#: templates/navbar.html:150 -msgid "Login" -msgstr "" - -#: templates/404.html:6 templates/404.html:12 -msgid "Page Not Found" -msgstr "" - -#: templates/404.html:15 -msgid "The requested page does not exist" -msgstr "" - -#: templates/500.html:6 templates/500.html:12 -msgid "Internal Server Error" -msgstr "" - -#: templates/500.html:15 -#, python-format -msgid "The %(inventree_title)s server raised an internal error" -msgstr "" - -#: templates/500.html:16 -msgid "Refer to the error log in the admin interface for further details" -msgstr "" - -#: templates/503.html:11 templates/503.html:33 -msgid "Site is in Maintenance" -msgstr "" - -#: templates/503.html:39 -msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" - -#: templates/InvenTree/index.html:7 -msgid "Index" -msgstr "" - -#: templates/InvenTree/index.html:39 -msgid "Subscribed Parts" -msgstr "" - -#: templates/InvenTree/index.html:52 -msgid "Subscribed Categories" -msgstr "" - -#: templates/InvenTree/index.html:62 -msgid "Latest Parts" -msgstr "" - -#: templates/InvenTree/index.html:77 -msgid "BOM Waiting Validation" -msgstr "" - -#: templates/InvenTree/index.html:106 -msgid "Recently Updated" -msgstr "" - -#: templates/InvenTree/index.html:134 -msgid "Depleted Stock" -msgstr "" - -#: templates/InvenTree/index.html:148 -msgid "Required for Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:156 -msgid "Expired Stock" -msgstr "" - -#: templates/InvenTree/index.html:172 -msgid "Stale Stock" -msgstr "" - -#: templates/InvenTree/index.html:199 -msgid "Build Orders In Progress" -msgstr "" - -#: templates/InvenTree/index.html:210 -msgid "Overdue Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:230 -msgid "Outstanding Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:241 -msgid "Overdue Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:262 -msgid "Outstanding Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:273 -msgid "Overdue Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:299 -msgid "InvenTree News" -msgstr "" - -#: templates/InvenTree/index.html:301 -msgid "Current News" -msgstr "" - -#: templates/InvenTree/notifications/history.html:9 -msgid "Notification History" -msgstr "" - -#: templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:75 -msgid "Delete Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:9 -msgid "Pending Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:13 -#: templates/InvenTree/notifications/inbox.html:14 -msgid "Mark all as read" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:10 -#: templates/InvenTree/notifications/sidebar.html:5 -#: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:38 -msgid "No unread notifications found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:58 -msgid "No notification history found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:65 -msgid "Delete all read notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:89 -#: templates/js/translated/notification.js:85 -msgid "Delete Notification" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:8 -msgid "Inbox" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:10 -msgid "History" -msgstr "" - -#: templates/InvenTree/search.html:8 -msgid "Search Results" -msgstr "" - -#: templates/InvenTree/settings/barcode.html:8 -msgid "Barcode Settings" -msgstr "" - -#: templates/InvenTree/settings/build.html:8 -msgid "Build Order Settings" -msgstr "" - -#: templates/InvenTree/settings/category.html:7 -msgid "Category Settings" -msgstr "" - -#: templates/InvenTree/settings/global.html:8 -msgid "Server Settings" -msgstr "" - -#: templates/InvenTree/settings/label.html:8 -#: templates/InvenTree/settings/user_labels.html:9 -msgid "Label Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:8 -msgid "Login Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:15 -msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "" - -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 -#: templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: templates/InvenTree/settings/login.html:36 -msgid "Single Sign On" -msgstr "" - -#: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:5 -msgid "URLs" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:8 -#, python-format -msgid "The Base-URL for this plugin is %(base)s." -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:14 -msgid "URL" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:23 -msgid "Open in new tab" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:9 -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:18 -msgid "Slug" -msgstr "" - -#: templates/InvenTree/settings/part.html:7 -msgid "Part Settings" -msgstr "" - -#: templates/InvenTree/settings/part.html:44 -msgid "Part Import" -msgstr "" - -#: templates/InvenTree/settings/part.html:48 -msgid "Import Part" -msgstr "" - -#: templates/InvenTree/settings/part_parameters.html:20 -msgid "Part Parameter Templates" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:7 -msgid "Stocktake Settings" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:25 -msgid "Stocktake Reports" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:8 -#: templates/InvenTree/settings/sidebar.html:35 -msgid "Physical Units" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:12 -msgid "Add Unit" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:9 -#: templates/InvenTree/settings/sidebar.html:64 -msgid "Plugin Settings" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:15 -msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "" - -#: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:66 -msgid "Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 -#: templates/js/translated/plugin.js:151 -msgid "Install Plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 -#: templates/js/translated/plugin.js:224 -msgid "Reload Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:58 -msgid "External plugins are not enabled for this InvenTree installation" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:73 -msgid "Plugin Error Stack" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:82 -msgid "Stage" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:84 -#: templates/js/translated/notification.js:76 -msgid "Message" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:16 -msgid "Plugin information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:47 -msgid "no version information supplied" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:61 -msgid "License" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:70 -msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:76 -msgid "Package information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:82 -msgid "Installation method" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:85 -msgid "This plugin was installed as a package" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:87 -msgid "This plugin was found in a local server path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:93 -msgid "Installation path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:100 -#: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 -msgid "Builtin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:101 -msgid "This is a builtin plugin which cannot be disabled" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:107 -#: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 -msgid "Sample" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:108 -msgid "This is a sample plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:113 -msgid "Commit Author" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:117 -#: templates/about.html:36 -msgid "Commit Date" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:121 -#: templates/about.html:29 -msgid "Commit Hash" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:125 -msgid "Commit Message" -msgstr "" - -#: templates/InvenTree/settings/po.html:7 -msgid "Purchase Order Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:7 -msgid "Pricing Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Exchange Rates" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:39 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:51 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:8 -msgid "Project Code Settings" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:21 -#: templates/InvenTree/settings/sidebar.html:33 -msgid "Project Codes" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:25 -#: templates/InvenTree/settings/settings_staff_js.html:216 -msgid "New Project Code" -msgstr "" - -#: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reporting.html:9 -msgid "Report Settings" -msgstr "" - -#: templates/InvenTree/settings/returns.html:7 -msgid "Return Order Settings" -msgstr "" - -#: templates/InvenTree/settings/setting.html:31 -msgid "No value set" -msgstr "" - -#: templates/InvenTree/settings/setting.html:46 -msgid "Edit setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:58 -msgid "Edit Plugin Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:60 -msgid "Edit Notification Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:63 -msgid "Edit Global Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:65 -msgid "Edit User Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:49 -msgid "Rate" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 -msgid "Delete" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:95 -msgid "Edit Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:110 -msgid "Delete Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:124 -msgid "New Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:140 -msgid "No project codes found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 -msgid "group" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:175 -#: templates/InvenTree/settings/settings_staff_js.html:189 -msgid "Edit Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:176 -#: templates/InvenTree/settings/settings_staff_js.html:203 -msgid "Delete Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:285 -msgid "No category parameter templates found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 -msgid "Edit Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 -msgid "Delete Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:326 -msgid "Edit Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:352 -msgid "Delete Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:387 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:416 -msgid "Create Part Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:439 -msgid "No stock location types found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:464 -msgid "Location count" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 -msgid "Edit Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:470 -msgid "Delete Location type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:493 -msgid "Delete Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 -msgid "New Location Type" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:6 -#: templates/InvenTree/settings/user_settings.html:9 -msgid "User Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:9 -msgid "Account" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:11 -msgid "Display" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:13 -msgid "Home Page" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 -#: templates/navbar.html:107 templates/search.html:8 -#: templates/search_form.html:6 templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:19 -#: templates/InvenTree/settings/sidebar.html:43 -msgid "Reporting" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:24 -msgid "Global Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 -msgid "Server" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:41 -msgid "Labels" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:45 -msgid "Categories" -msgstr "" - -#: templates/InvenTree/settings/so.html:7 -msgid "Sales Order Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:7 -msgid "Stock Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:34 -msgid "Stock Location Types" -msgstr "" - -#: templates/InvenTree/settings/user.html:13 -msgid "Account Settings" -msgstr "" - -#: templates/InvenTree/settings/user.html:19 -#: templates/account/password_reset_from_key.html:4 -#: templates/account/password_reset_from_key.html:7 -msgid "Change Password" -msgstr "" - -#: templates/InvenTree/settings/user.html:55 -msgid "The following email addresses are associated with your account:" -msgstr "" - -#: templates/InvenTree/settings/user.html:76 -msgid "Verified" -msgstr "" - -#: templates/InvenTree/settings/user.html:78 -msgid "Unverified" -msgstr "" - -#: templates/InvenTree/settings/user.html:80 -#: templates/js/translated/company.js:957 -msgid "Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:86 -msgid "Make Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:87 -msgid "Re-send Verification" -msgstr "" - -#: templates/InvenTree/settings/user.html:96 -msgid "Warning:" -msgstr "" - -#: templates/InvenTree/settings/user.html:97 -msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "" - -#: templates/InvenTree/settings/user.html:105 -msgid "Add Email Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:110 -msgid "Add Email" -msgstr "" - -#: templates/InvenTree/settings/user.html:120 -msgid "Multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:125 -msgid "You have these factors available:" -msgstr "" - -#: templates/InvenTree/settings/user.html:135 -msgid "TOTP" -msgstr "" - -#: templates/InvenTree/settings/user.html:141 -msgid "Static" -msgstr "" - -#: templates/InvenTree/settings/user.html:150 -msgid "Multifactor authentication is not configured for your account" -msgstr "" - -#: templates/InvenTree/settings/user.html:157 -msgid "Change factors" -msgstr "" - -#: templates/InvenTree/settings/user.html:158 -msgid "Setup multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:160 -msgid "Remove multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:171 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:177 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:178 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:187 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:188 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:192 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:193 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:194 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:207 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:209 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:223 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:29 -msgid "Theme Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:39 -msgid "Select theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:50 -msgid "Set Theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:58 -msgid "Language Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:67 -msgid "Select language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:83 -#, python-format -msgid "%(lang_translated)s%% translated" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:85 -msgid "No translations available" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:92 -msgid "Set Language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "Some languages are not complete" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:97 -msgid "Show only sufficient" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "and hidden." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "Show them too" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:106 -msgid "Help the translation efforts!" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:107 -msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:108 -msgid "InvenTree Translation Project" -msgstr "" - -#: templates/InvenTree/settings/user_homepage.html:9 -msgid "Home Page Settings" -msgstr "" - -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:9 -msgid "Single Sign On Accounts" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:16 -msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:52 -msgid "There are no social network accounts connected to this account." -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:58 -msgid "Add SSO Account" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:67 -msgid "Single Sign On is not enabled for this server" -msgstr "" - -#: templates/about.html:9 -msgid "InvenTree Version" -msgstr "" - -#: templates/about.html:14 -msgid "Development Version" -msgstr "" - -#: templates/about.html:17 -msgid "Up to Date" -msgstr "" - -#: templates/about.html:19 -msgid "Update Available" -msgstr "" - -#: templates/about.html:43 -msgid "Commit Branch" -msgstr "" - -#: templates/about.html:49 -msgid "InvenTree Documentation" -msgstr "" - -#: templates/about.html:54 -msgid "API Version" -msgstr "" - -#: templates/about.html:59 -msgid "Python Version" -msgstr "" - -#: templates/about.html:64 -msgid "Django Version" -msgstr "" - -#: templates/about.html:69 -msgid "View Code on GitHub" -msgstr "" - -#: templates/about.html:74 -msgid "Credits" -msgstr "" - -#: templates/about.html:79 -msgid "Mobile App" -msgstr "" - -#: templates/about.html:84 -msgid "Submit Bug Report" -msgstr "" - -#: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 -msgid "copy to clipboard" -msgstr "" - -#: templates/about.html:91 -msgid "copy version information" -msgstr "" - -#: templates/account/base.html:66 templates/navbar.html:17 -msgid "InvenTree logo" -msgstr "" - -#: templates/account/email_confirm.html:6 -#: templates/account/email_confirm.html:9 -msgid "Confirm Email Address" -msgstr "" - -#: templates/account/email_confirm.html:15 -#, python-format -msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "" - -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 -msgid "Confirm" -msgstr "" - -#: templates/account/email_confirm.html:29 -#, python-format -msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "" - -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 -msgid "Sign In" -msgstr "" - -#: templates/account/login.html:23 -msgid "Not a member?" -msgstr "" - -#: templates/account/login.html:25 templates/account/signup.html:11 -#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 -#: templates/socialaccount/signup.html:23 -msgid "Sign Up" -msgstr "" - -#: templates/account/login.html:47 -msgid "Forgot Password?" -msgstr "" - -#: templates/account/login.html:55 -msgid "or log in with" -msgstr "" - -#: templates/account/logout.html:5 templates/account/logout.html:8 -#: templates/account/logout.html:20 -msgid "Sign Out" -msgstr "" - -#: templates/account/logout.html:10 -msgid "Are you sure you want to sign out?" -msgstr "" - -#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 -msgid "Return to Site" -msgstr "" - -#: templates/account/password_reset.html:5 -#: templates/account/password_reset.html:12 -msgid "Password Reset" -msgstr "" - -#: templates/account/password_reset.html:18 -msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "" - -#: templates/account/password_reset.html:23 -msgid "Reset My Password" -msgstr "" - -#: templates/account/password_reset.html:27 templates/account/signup.html:37 -msgid "This function is currently disabled. Please contact an administrator." -msgstr "" - -#: templates/account/password_reset_from_key.html:7 -msgid "Bad Token" -msgstr "" - -#: templates/account/password_reset_from_key.html:11 -#, python-format -msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "" - -#: templates/account/password_reset_from_key.html:18 -msgid "Change password" -msgstr "" - -#: templates/account/password_reset_from_key.html:22 -msgid "Your password is now changed." -msgstr "" - -#: templates/account/signup.html:13 -#, python-format -msgid "Already have an account? Then please sign in." -msgstr "" - -#: templates/account/signup.html:28 -msgid "Use a SSO-provider for signup" -msgstr "" - -#: templates/account/signup_closed.html:5 -#: templates/account/signup_closed.html:8 -msgid "Sign Up Closed" -msgstr "" - -#: templates/account/signup_closed.html:10 -msgid "Sign up is currently closed." -msgstr "" - -#: templates/account/signup_closed.html:15 -#: templates/socialaccount/authentication_error.html:19 -#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 -msgid "Return to login page" -msgstr "" - -#: templates/admin_button.html:8 -msgid "View in administration panel" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:5 -msgid "Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:13 -msgid "Authenticate" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:6 -msgid "Two-Factor Authentication Backup Tokens" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:17 -msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:20 -msgid "No backup tokens are available. Press the button below to generate some." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:28 -msgid "Generate Tokens" -msgstr "" - -#: templates/allauth_2fa/remove.html:6 -msgid "Disable Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/remove.html:9 -msgid "Are you sure?" -msgstr "" - -#: templates/allauth_2fa/remove.html:17 -msgid "Disable 2FA" -msgstr "" - -#: templates/allauth_2fa/setup.html:6 -msgid "Setup Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/setup.html:10 -msgid "Step 1" -msgstr "" - -#: templates/allauth_2fa/setup.html:14 -msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 -msgid "Step 2" -msgstr "" - -#: templates/allauth_2fa/setup.html:28 -msgid "Input a token generated by the app:" -msgstr "" - -#: templates/allauth_2fa/setup.html:38 -msgid "Verify" -msgstr "" - -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 -msgid "Add Link" -msgstr "" - -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 -msgid "Add Attachment" -msgstr "" - -#: templates/barcode_data.html:5 -msgid "Barcode Identifier" -msgstr "" - -#: templates/base.html:103 -msgid "Server Restart Required" -msgstr "" - -#: templates/base.html:106 -msgid "A configuration option has been changed which requires a server restart" -msgstr "" - -#: templates/base.html:106 templates/base.html:116 -msgid "Contact your system administrator for further information" -msgstr "" - -#: templates/base.html:113 -msgid "Pending Database Migrations" -msgstr "" - -#: templates/base.html:116 -msgid "There are pending database migrations which require attention" -msgstr "" - -#: templates/email/build_order_completed.html:9 -#: templates/email/canceled_order_assigned.html:9 -#: templates/email/new_order_assigned.html:9 -#: templates/email/overdue_build_order.html:9 -#: templates/email/overdue_purchase_order.html:9 -#: templates/email/overdue_sales_order.html:9 -#: templates/email/purchase_order_received.html:9 -#: templates/email/return_order_received.html:9 -msgid "Click on the following link to view this order" -msgstr "" - -#: templates/email/build_order_required_stock.html:7 -msgid "Stock is required for the following build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:8 -#, python-format -msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "" - -#: templates/email/build_order_required_stock.html:10 -msgid "Click on the following link to view this build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:14 -msgid "The following parts are low on required stock" -msgstr "" - -#: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 -msgid "Required Quantity" -msgstr "" - -#: templates/email/build_order_required_stock.html:38 -#: templates/email/low_stock_notification.html:30 -msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "" - -#: templates/email/low_stock_notification.html:9 -msgid "Click on the following link to view this part" -msgstr "" - -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 -msgid "Minimum Quantity" -msgstr "" - -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 -msgid "No Response" -msgstr "" - -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 -msgid "No response from the InvenTree server" -msgstr "" - -#: templates/js/translated/api.js:232 -msgid "Error 400: Bad request" -msgstr "" - -#: templates/js/translated/api.js:233 -msgid "API request returned error code 400" -msgstr "" - -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 -msgid "Error 401: Not Authenticated" -msgstr "" - -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 -msgid "Authentication credentials not supplied" -msgstr "" - -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 -msgid "Error 403: Permission Denied" -msgstr "" - -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 -msgid "You do not have the required permissions to access this function" -msgstr "" - -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 -msgid "Error 404: Resource Not Found" -msgstr "" - -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 -msgid "The requested resource could not be located on the server" -msgstr "" - -#: templates/js/translated/api.js:252 -msgid "Error 405: Method Not Allowed" -msgstr "" - -#: templates/js/translated/api.js:253 -msgid "HTTP method not allowed at URL" -msgstr "" - -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 -msgid "Error 408: Timeout" -msgstr "" - -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 -msgid "Connection timeout while requesting data from server" -msgstr "" - -#: templates/js/translated/api.js:261 -msgid "Error 503: Service Unavailable" -msgstr "" - -#: templates/js/translated/api.js:262 -msgid "The server is currently unavailable" -msgstr "" - -#: templates/js/translated/api.js:265 -msgid "Unhandled Error Code" -msgstr "" - -#: templates/js/translated/api.js:266 -msgid "Error code" -msgstr "" - -#: templates/js/translated/attachment.js:114 -msgid "All selected attachments will be deleted" -msgstr "" - -#: templates/js/translated/attachment.js:129 -msgid "Delete Attachments" -msgstr "" - -#: templates/js/translated/attachment.js:205 -msgid "Delete attachments" -msgstr "" - -#: templates/js/translated/attachment.js:260 -msgid "Attachment actions" -msgstr "" - -#: templates/js/translated/attachment.js:294 -msgid "No attachments found" -msgstr "" - -#: templates/js/translated/attachment.js:334 -msgid "Edit Attachment" -msgstr "" - -#: templates/js/translated/attachment.js:365 -msgid "Upload Date" -msgstr "" - -#: templates/js/translated/attachment.js:385 -msgid "Edit attachment" -msgstr "" - -#: templates/js/translated/attachment.js:393 -msgid "Delete attachment" -msgstr "" - -#: templates/js/translated/barcode.js:43 -msgid "Scan barcode data here using barcode scanner" -msgstr "" - -#: templates/js/translated/barcode.js:45 -msgid "Enter barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:59 -msgid "Scan barcode using connected webcam" -msgstr "" - -#: templates/js/translated/barcode.js:138 -msgid "Enter optional notes for stock transfer" -msgstr "" - -#: templates/js/translated/barcode.js:139 -msgid "Enter notes" -msgstr "" - -#: templates/js/translated/barcode.js:188 -msgid "Server error" -msgstr "" - -#: templates/js/translated/barcode.js:217 -msgid "Unknown response from server" -msgstr "" - -#: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 -msgid "Invalid server response" -msgstr "" - -#: templates/js/translated/barcode.js:403 -msgid "Scan barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 -msgid "Scan Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:489 -msgid "No URL in response" -msgstr "" - -#: templates/js/translated/barcode.js:529 -msgid "This will remove the link to the associated barcode" -msgstr "" - -#: templates/js/translated/barcode.js:535 -msgid "Unlink" -msgstr "" - -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 -msgid "Remove stock item" -msgstr "" - -#: templates/js/translated/barcode.js:641 -msgid "Scan Stock Items Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:643 -msgid "Scan stock item barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 -msgid "Check In" -msgstr "" - -#: templates/js/translated/barcode.js:678 -msgid "No barcode provided" -msgstr "" - -#: templates/js/translated/barcode.js:718 -msgid "Stock Item already scanned" -msgstr "" - -#: templates/js/translated/barcode.js:722 -msgid "Stock Item already in this location" -msgstr "" - -#: templates/js/translated/barcode.js:729 -msgid "Added stock item" -msgstr "" - -#: templates/js/translated/barcode.js:738 -msgid "Barcode does not match valid stock item" -msgstr "" - -#: templates/js/translated/barcode.js:757 -msgid "Scan Stock Container Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:759 -msgid "Scan stock container barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:793 -msgid "Barcode does not match valid stock location" -msgstr "" - -#: templates/js/translated/barcode.js:837 -msgid "Check Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 -msgid "Barcode does not match a valid location" -msgstr "" - -#: templates/js/translated/bom.js:78 -msgid "Create BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:132 -msgid "Display row data" -msgstr "" - -#: templates/js/translated/bom.js:188 -msgid "Row Data" -msgstr "" - -#: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 -#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 -#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 -msgid "Close" -msgstr "" - -#: templates/js/translated/bom.js:306 -msgid "Download BOM Template" -msgstr "" - -#: templates/js/translated/bom.js:351 -msgid "Multi Level BOM" -msgstr "" - -#: templates/js/translated/bom.js:352 -msgid "Include BOM data for subassemblies" -msgstr "" - -#: templates/js/translated/bom.js:357 -msgid "Levels" -msgstr "" - -#: templates/js/translated/bom.js:358 -msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" - -#: templates/js/translated/bom.js:365 -msgid "Include Alternative Parts" -msgstr "" - -#: templates/js/translated/bom.js:366 -msgid "Include alternative parts in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:371 -msgid "Include Parameter Data" -msgstr "" - -#: templates/js/translated/bom.js:372 -msgid "Include part parameter data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:377 -msgid "Include Stock Data" -msgstr "" - -#: templates/js/translated/bom.js:378 -msgid "Include part stock data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:383 -msgid "Include Manufacturer Data" -msgstr "" - -#: templates/js/translated/bom.js:384 -msgid "Include part manufacturer data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:389 -msgid "Include Supplier Data" -msgstr "" - -#: templates/js/translated/bom.js:390 -msgid "Include part supplier data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:395 -msgid "Include Pricing Data" -msgstr "" - -#: templates/js/translated/bom.js:396 -msgid "Include part pricing data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:591 -msgid "Remove substitute part" -msgstr "" - -#: templates/js/translated/bom.js:645 -msgid "Select and add a new substitute part using the input below" -msgstr "" - -#: templates/js/translated/bom.js:656 -msgid "Are you sure you wish to remove this substitute part link?" -msgstr "" - -#: templates/js/translated/bom.js:662 -msgid "Remove Substitute Part" -msgstr "" - -#: templates/js/translated/bom.js:701 -msgid "Add Substitute" -msgstr "" - -#: templates/js/translated/bom.js:702 -msgid "Edit BOM Item Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:764 -msgid "All selected BOM items will be deleted" -msgstr "" - -#: templates/js/translated/bom.js:780 -msgid "Delete selected BOM items?" -msgstr "" - -#: templates/js/translated/bom.js:826 -msgid "Delete items" -msgstr "" - -#: templates/js/translated/bom.js:936 -msgid "Load BOM for subassembly" -msgstr "" - -#: templates/js/translated/bom.js:946 -msgid "Substitutes Available" -msgstr "" - -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 -msgid "Variant stock allowed" -msgstr "" - -#: templates/js/translated/bom.js:1014 -msgid "Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:1139 -msgid "BOM pricing is complete" -msgstr "" - -#: templates/js/translated/bom.js:1144 -msgid "BOM pricing is incomplete" -msgstr "" - -#: templates/js/translated/bom.js:1151 -msgid "No pricing available" -msgstr "" - -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 -msgid "External stock" -msgstr "" - -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 -msgid "No Stock Available" -msgstr "" - -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 -msgid "Includes variant and substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 -msgid "Includes variant stock" -msgstr "" - -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 -msgid "Includes substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 -msgid "Consumable item" -msgstr "" - -#: templates/js/translated/bom.js:1285 -msgid "Validate BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1287 -msgid "This line has been validated" -msgstr "" - -#: templates/js/translated/bom.js:1289 -msgid "Edit substitute parts" -msgstr "" - -#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 -msgid "Edit BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1293 -msgid "Delete BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1313 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1397 -msgid "No BOM items found" -msgstr "" - -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 -msgid "Required Part" -msgstr "" - -#: templates/js/translated/bom.js:1683 -msgid "Inherited from parent BOM" -msgstr "" - -#: templates/js/translated/build.js:143 -msgid "Edit Build Order" -msgstr "" - -#: templates/js/translated/build.js:191 -msgid "Create Build Order" -msgstr "" - -#: templates/js/translated/build.js:223 -msgid "Cancel Build Order" -msgstr "" - -#: templates/js/translated/build.js:232 -msgid "Are you sure you wish to cancel this build?" -msgstr "" - -#: templates/js/translated/build.js:238 -msgid "Stock items have been allocated to this build order" -msgstr "" - -#: templates/js/translated/build.js:245 -msgid "There are incomplete outputs remaining for this build order" -msgstr "" - -#: templates/js/translated/build.js:297 -msgid "Build order is ready to be completed" -msgstr "" - -#: templates/js/translated/build.js:305 -msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "" - -#: templates/js/translated/build.js:310 -msgid "Build Order is incomplete" -msgstr "" - -#: templates/js/translated/build.js:328 -msgid "Complete Build Order" -msgstr "" - -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 -msgid "Next available serial number" -msgstr "" - -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 -msgid "Latest serial number" -msgstr "" - -#: templates/js/translated/build.js:380 -msgid "The Bill of Materials contains trackable parts" -msgstr "" - -#: templates/js/translated/build.js:381 -msgid "Build outputs must be generated individually" -msgstr "" - -#: templates/js/translated/build.js:389 -msgid "Trackable parts can have serial numbers specified" -msgstr "" - -#: templates/js/translated/build.js:390 -msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "" - -#: templates/js/translated/build.js:397 -msgid "Create Build Output" -msgstr "" - -#: templates/js/translated/build.js:428 -msgid "Allocate stock items to this build output" -msgstr "" - -#: templates/js/translated/build.js:436 -msgid "Deallocate stock from build output" -msgstr "" - -#: templates/js/translated/build.js:445 -msgid "Complete build output" -msgstr "" - -#: templates/js/translated/build.js:453 -msgid "Scrap build output" -msgstr "" - -#: templates/js/translated/build.js:460 -msgid "Delete build output" -msgstr "" - -#: templates/js/translated/build.js:480 -msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "" - -#: templates/js/translated/build.js:498 -msgid "Deallocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 -msgid "Select Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 -msgid "At least one build output must be selected" -msgstr "" - -#: templates/js/translated/build.js:599 -msgid "Selected build outputs will be marked as complete" -msgstr "" - -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 -msgid "Output" -msgstr "" - -#: templates/js/translated/build.js:630 -msgid "Complete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:727 -msgid "Selected build outputs will be marked as scrapped" -msgstr "" - -#: templates/js/translated/build.js:729 -msgid "Scrapped output are marked as rejected" -msgstr "" - -#: templates/js/translated/build.js:730 -msgid "Allocated stock items will no longer be available" -msgstr "" - -#: templates/js/translated/build.js:731 -msgid "The completion status of the build order will not be adjusted" -msgstr "" - -#: templates/js/translated/build.js:761 -msgid "Scrap Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:851 -msgid "Selected build outputs will be deleted" -msgstr "" - -#: templates/js/translated/build.js:853 -msgid "Build output data will be permanently deleted" -msgstr "" - -#: templates/js/translated/build.js:854 -msgid "Allocated stock items will be returned to stock" -msgstr "" - -#: templates/js/translated/build.js:872 -msgid "Delete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" -msgstr "" - -#: templates/js/translated/build.js:1178 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1200 -msgid "Complete outputs" -msgstr "" - -#: templates/js/translated/build.js:1218 -msgid "Scrap outputs" -msgstr "" - -#: templates/js/translated/build.js:1236 -msgid "Delete outputs" -msgstr "" - -#: templates/js/translated/build.js:1289 -msgid "build output" -msgstr "" - -#: templates/js/translated/build.js:1290 -msgid "build outputs" -msgstr "" - -#: templates/js/translated/build.js:1294 -msgid "Build output actions" -msgstr "" - -#: templates/js/translated/build.js:1470 -msgid "No active build outputs found" -msgstr "" - -#: templates/js/translated/build.js:1563 -msgid "Allocated Lines" -msgstr "" - -#: templates/js/translated/build.js:1577 -msgid "Required Tests" -msgstr "" - -#: templates/js/translated/build.js:1749 -#: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 -msgid "Select Parts" -msgstr "" - -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 -msgid "You must select at least one part to allocate" -msgstr "" - -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 -msgid "Specify stock allocation quantity" -msgstr "" - -#: templates/js/translated/build.js:1890 -msgid "All Parts Allocated" -msgstr "" - -#: templates/js/translated/build.js:1891 -msgid "All selected parts have been fully allocated" -msgstr "" - -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 -msgid "Select source location (leave blank to take from all locations)" -msgstr "" - -#: templates/js/translated/build.js:1933 -msgid "Allocate Stock Items to Build Order" -msgstr "" - -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 -msgid "No matching stock locations" -msgstr "" - -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 -msgid "No matching stock items" -msgstr "" - -#: templates/js/translated/build.js:2114 -msgid "Automatic Stock Allocation" -msgstr "" - -#: templates/js/translated/build.js:2115 -msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "" - -#: templates/js/translated/build.js:2117 -msgid "If a location is specified, stock will only be allocated from that location" -msgstr "" - -#: templates/js/translated/build.js:2118 -msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "" - -#: templates/js/translated/build.js:2119 -msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "" - -#: templates/js/translated/build.js:2149 -msgid "Allocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:2254 -msgid "No builds matching query" -msgstr "" - -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 -msgid "Select" -msgstr "" - -#: templates/js/translated/build.js:2303 -msgid "Build order is overdue" -msgstr "" - -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 -msgid "No user information" -msgstr "" - -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 -msgid "Edit stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 -msgid "Delete stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2577 -msgid "Edit Allocation" -msgstr "" - -#: templates/js/translated/build.js:2589 -msgid "Remove Allocation" -msgstr "" - -#: templates/js/translated/build.js:2628 -msgid "build line" -msgstr "" - -#: templates/js/translated/build.js:2629 -msgid "build lines" -msgstr "" - -#: templates/js/translated/build.js:2647 -msgid "No build lines found" -msgstr "" - -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 -msgid "Trackable part" -msgstr "" - -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 -msgid "Unit Quantity" -msgstr "" - -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 -msgid "Sufficient stock available" -msgstr "" - -#: templates/js/translated/build.js:2837 -msgid "Consumable Item" -msgstr "" - -#: templates/js/translated/build.js:2844 -msgid "Tracked item" -msgstr "" - -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 -msgid "Build stock" -msgstr "" - -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 -msgid "Order stock" -msgstr "" - -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 -msgid "Allocate stock" -msgstr "" - -#: templates/js/translated/build.js:2866 -msgid "Remove stock allocation" -msgstr "" - -#: templates/js/translated/company.js:98 -msgid "Add Manufacturer" -msgstr "" - -#: templates/js/translated/company.js:111 -#: templates/js/translated/company.js:213 -msgid "Add Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:132 -msgid "Edit Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:201 -#: templates/js/translated/purchase_order.js:93 -msgid "Add Supplier" -msgstr "" - -#: templates/js/translated/company.js:243 -#: templates/js/translated/purchase_order.js:318 -msgid "Add Supplier Part" -msgstr "" - -#: templates/js/translated/company.js:344 -msgid "All selected supplier parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:360 -msgid "Delete Supplier Parts" -msgstr "" - -#: templates/js/translated/company.js:466 -msgid "Add new Company" -msgstr "" - -#: templates/js/translated/company.js:546 -msgid "Parts Supplied" -msgstr "" - -#: templates/js/translated/company.js:555 -msgid "Parts Manufactured" -msgstr "" - -#: templates/js/translated/company.js:570 -msgid "No company information found" -msgstr "" - -#: templates/js/translated/company.js:619 -msgid "Create New Contact" -msgstr "" - -#: templates/js/translated/company.js:635 -#: templates/js/translated/company.js:758 -msgid "Edit Contact" -msgstr "" - -#: templates/js/translated/company.js:672 -msgid "All selected contacts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:678 -#: templates/js/translated/company.js:742 -msgid "Role" -msgstr "" - -#: templates/js/translated/company.js:686 -msgid "Delete Contacts" -msgstr "" - -#: templates/js/translated/company.js:717 -msgid "No contacts found" -msgstr "" - -#: templates/js/translated/company.js:730 -msgid "Phone Number" -msgstr "" - -#: templates/js/translated/company.js:736 -msgid "Email Address" -msgstr "" - -#: templates/js/translated/company.js:762 -msgid "Delete Contact" -msgstr "" - -#: templates/js/translated/company.js:859 -msgid "Create New Address" -msgstr "" - -#: templates/js/translated/company.js:874 -#: templates/js/translated/company.js:1035 -msgid "Edit Address" -msgstr "" - -#: templates/js/translated/company.js:909 -msgid "All selected addresses will be deleted" -msgstr "" - -#: templates/js/translated/company.js:923 -msgid "Delete Addresses" -msgstr "" - -#: templates/js/translated/company.js:950 -msgid "No addresses found" -msgstr "" - -#: templates/js/translated/company.js:989 -msgid "Postal city" -msgstr "" - -#: templates/js/translated/company.js:995 -msgid "State/province" -msgstr "" - -#: templates/js/translated/company.js:1007 -msgid "Courier notes" -msgstr "" - -#: templates/js/translated/company.js:1013 -msgid "Internal notes" -msgstr "" - -#: templates/js/translated/company.js:1039 -msgid "Delete Address" -msgstr "" - -#: templates/js/translated/company.js:1112 -msgid "All selected manufacturer parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1127 -msgid "Delete Manufacturer Parts" -msgstr "" - -#: templates/js/translated/company.js:1161 -msgid "All selected parameters will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1175 -msgid "Delete Parameters" -msgstr "" - -#: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 -msgid "Order parts" -msgstr "" - -#: templates/js/translated/company.js:1208 -msgid "Delete manufacturer parts" -msgstr "" - -#: templates/js/translated/company.js:1240 -msgid "Manufacturer part actions" -msgstr "" - -#: templates/js/translated/company.js:1259 -msgid "No manufacturer parts found" -msgstr "" - -#: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 -msgid "Template part" -msgstr "" - -#: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 -msgid "Assembled part" -msgstr "" - -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 -msgid "No parameters found" -msgstr "" - -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 -msgid "Edit parameter" -msgstr "" - -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 -msgid "Delete parameter" -msgstr "" - -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 -msgid "Edit Parameter" -msgstr "" - -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 -msgid "Delete Parameter" -msgstr "" - -#: templates/js/translated/company.js:1496 -msgid "Delete supplier parts" -msgstr "" - -#: templates/js/translated/company.js:1546 -msgid "No supplier parts found" -msgstr "" - -#: templates/js/translated/company.js:1664 -msgid "Base Units" -msgstr "" - -#: templates/js/translated/company.js:1694 -msgid "Availability" -msgstr "" - -#: templates/js/translated/company.js:1725 -msgid "Edit supplier part" -msgstr "" - -#: templates/js/translated/company.js:1726 -msgid "Delete supplier part" -msgstr "" - -#: templates/js/translated/company.js:1779 -#: templates/js/translated/pricing.js:694 -msgid "Delete Price Break" -msgstr "" - -#: templates/js/translated/company.js:1789 -#: templates/js/translated/pricing.js:712 -msgid "Edit Price Break" -msgstr "" - -#: templates/js/translated/company.js:1804 -msgid "No price break information found" -msgstr "" - -#: templates/js/translated/company.js:1833 -msgid "Last updated" -msgstr "" - -#: templates/js/translated/company.js:1840 -msgid "Edit price break" -msgstr "" - -#: templates/js/translated/company.js:1841 -msgid "Delete price break" -msgstr "" - -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 -msgid "true" -msgstr "" - -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 -msgid "false" -msgstr "" - -#: templates/js/translated/filters.js:217 -msgid "Select filter" -msgstr "" - -#: templates/js/translated/filters.js:440 -msgid "Print Labels" -msgstr "" - -#: templates/js/translated/filters.js:444 -msgid "Print Reports" -msgstr "" - -#: templates/js/translated/filters.js:456 -msgid "Download table data" -msgstr "" - -#: templates/js/translated/filters.js:463 -msgid "Reload table data" -msgstr "" - -#: templates/js/translated/filters.js:472 -msgid "Add new filter" -msgstr "" - -#: templates/js/translated/filters.js:480 -msgid "Clear all filters" -msgstr "" - -#: templates/js/translated/filters.js:580 -msgid "Create filter" -msgstr "" - -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 -msgid "Action Prohibited" -msgstr "" - -#: templates/js/translated/forms.js:381 -msgid "Create operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:396 -msgid "Update operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:410 -msgid "Delete operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:424 -msgid "View operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:801 -msgid "Keep this form open" -msgstr "" - -#: templates/js/translated/forms.js:904 -msgid "Enter a valid number" -msgstr "" - -#: templates/js/translated/forms.js:1478 templates/modals.html:19 -#: templates/modals.html:43 -msgid "Form errors exist" -msgstr "" - -#: templates/js/translated/forms.js:2008 -msgid "No results found" -msgstr "" - -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 -msgid "Searching" -msgstr "" - -#: templates/js/translated/forms.js:2532 -msgid "Clear input" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "File Column" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "Field Name" -msgstr "" - -#: templates/js/translated/forms.js:3146 -msgid "Select Columns" -msgstr "" - -#: templates/js/translated/helpers.js:80 -msgid "YES" -msgstr "" - -#: templates/js/translated/helpers.js:83 -msgid "NO" -msgstr "" - -#: templates/js/translated/helpers.js:96 -msgid "True" -msgstr "" - -#: templates/js/translated/helpers.js:97 -msgid "False" -msgstr "" - -#: templates/js/translated/index.js:104 -msgid "No parts required for builds" -msgstr "" - -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 -msgid "Select Items" -msgstr "" - -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 -msgid "No items selected for printing" -msgstr "" - -#: templates/js/translated/label.js:143 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 -msgid "Cancel" -msgstr "" - -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 -#: templates/modals.html:28 templates/modals.html:51 -msgid "Submit" -msgstr "" - -#: templates/js/translated/modals.js:157 -msgid "Form Title" -msgstr "" - -#: templates/js/translated/modals.js:446 -msgid "Waiting for server..." -msgstr "" - -#: templates/js/translated/modals.js:597 -msgid "Show Error Information" -msgstr "" - -#: templates/js/translated/modals.js:687 -msgid "Accept" -msgstr "" - -#: templates/js/translated/modals.js:745 -msgid "Loading Data" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Invalid response from server" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Form data missing from server response" -msgstr "" - -#: templates/js/translated/modals.js:1028 -msgid "Error posting form data" -msgstr "" - -#: templates/js/translated/modals.js:1125 -msgid "JSON response missing form data" -msgstr "" - -#: templates/js/translated/modals.js:1140 -msgid "Error 400: Bad Request" -msgstr "" - -#: templates/js/translated/modals.js:1141 -msgid "Server returned error code 400" -msgstr "" - -#: templates/js/translated/modals.js:1164 -msgid "Error requesting form data" -msgstr "" - -#: templates/js/translated/news.js:33 -msgid "No news found" -msgstr "" - -#: templates/js/translated/news.js:38 -#: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 -msgid "ID" -msgstr "" - -#: templates/js/translated/notification.js:52 -msgid "Age" -msgstr "" - -#: templates/js/translated/notification.js:65 -msgid "Notification" -msgstr "" - -#: templates/js/translated/notification.js:224 -msgid "Mark as unread" -msgstr "" - -#: templates/js/translated/notification.js:228 -msgid "Mark as read" -msgstr "" - -#: templates/js/translated/notification.js:254 -msgid "No unread notifications" -msgstr "" - -#: templates/js/translated/notification.js:296 templates/notifications.html:12 -msgid "Notifications will load here" -msgstr "" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 -msgid "Add Extra Line Item" -msgstr "" - -#: templates/js/translated/order.js:151 -msgid "Export Order" -msgstr "" - -#: templates/js/translated/order.js:266 -msgid "Duplicate Line" -msgstr "" - -#: templates/js/translated/order.js:280 -msgid "Edit Line" -msgstr "" - -#: templates/js/translated/order.js:293 -msgid "Delete Line" -msgstr "" - -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:394 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:395 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/part.js:91 -msgid "Part Attributes" -msgstr "" - -#: templates/js/translated/part.js:95 -msgid "Part Creation Options" -msgstr "" - -#: templates/js/translated/part.js:99 -msgid "Part Duplication Options" -msgstr "" - -#: templates/js/translated/part.js:122 -msgid "Add Part Category" -msgstr "" - -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 -msgid "Icon (optional) - Explore all available icons on" -msgstr "" - -#: templates/js/translated/part.js:355 -msgid "Create Part Category" -msgstr "" - -#: templates/js/translated/part.js:358 -msgid "Create new category after this one" -msgstr "" - -#: templates/js/translated/part.js:359 -msgid "Part category created" -msgstr "" - -#: templates/js/translated/part.js:373 -msgid "Edit Part Category" -msgstr "" - -#: templates/js/translated/part.js:386 -msgid "Are you sure you want to delete this part category?" -msgstr "" - -#: templates/js/translated/part.js:391 -msgid "Move to parent category" -msgstr "" - -#: templates/js/translated/part.js:400 -msgid "Delete Part Category" -msgstr "" - -#: templates/js/translated/part.js:404 -msgid "Action for parts in this category" -msgstr "" - -#: templates/js/translated/part.js:409 -msgid "Action for child categories" -msgstr "" - -#: templates/js/translated/part.js:433 -msgid "Create Part" -msgstr "" - -#: templates/js/translated/part.js:435 -msgid "Create another part after this one" -msgstr "" - -#: templates/js/translated/part.js:436 -msgid "Part created successfully" -msgstr "" - -#: templates/js/translated/part.js:464 -msgid "Edit Part" -msgstr "" - -#: templates/js/translated/part.js:466 -msgid "Part edited" -msgstr "" - -#: templates/js/translated/part.js:477 -msgid "Create Part Variant" -msgstr "" - -#: templates/js/translated/part.js:534 -msgid "Active Part" -msgstr "" - -#: templates/js/translated/part.js:535 -msgid "Part cannot be deleted as it is currently active" -msgstr "" - -#: templates/js/translated/part.js:549 -msgid "Deleting this part cannot be reversed" -msgstr "" - -#: templates/js/translated/part.js:551 -msgid "Any stock items for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:552 -msgid "This part will be removed from any Bills of Material" -msgstr "" - -#: templates/js/translated/part.js:553 -msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:560 -msgid "Delete Part" -msgstr "" - -#: templates/js/translated/part.js:596 -msgid "You are subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:598 -msgid "You have subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:603 -msgid "Subscribe to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:605 -msgid "You have unsubscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:622 -msgid "Validating the BOM will mark each line item as valid" -msgstr "" - -#: templates/js/translated/part.js:632 -msgid "Validate Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:635 -msgid "Validated Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:660 -msgid "Copy Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 -msgid "Low stock" -msgstr "" - -#: templates/js/translated/part.js:691 -msgid "No stock available" -msgstr "" - -#: templates/js/translated/part.js:751 -msgid "Demand" -msgstr "" - -#: templates/js/translated/part.js:774 -msgid "Unit" -msgstr "" - -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 -msgid "Virtual part" -msgstr "" - -#: templates/js/translated/part.js:809 -msgid "Subscribed part" -msgstr "" - -#: templates/js/translated/part.js:813 -msgid "Salable part" -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Schedule generation of a new stocktake report." -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Once complete, the stocktake report will be available for download." -msgstr "" - -#: templates/js/translated/part.js:904 -msgid "Generate Stocktake Report" -msgstr "" - -#: templates/js/translated/part.js:908 -msgid "Stocktake report scheduled" -msgstr "" - -#: templates/js/translated/part.js:1057 -msgid "No stocktake information available" -msgstr "" - -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 -msgid "Edit Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 -msgid "Delete Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1288 -msgid "No variants found" -msgstr "" - -#: templates/js/translated/part.js:1606 -msgid "No part parameter templates found" -msgstr "" - -#: templates/js/translated/part.js:1669 -msgid "Edit Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1681 -msgid "Any parameters which reference this template will also be deleted" -msgstr "" - -#: templates/js/translated/part.js:1689 -msgid "Delete Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/part.js:1976 -msgid "Delete part relationship" -msgstr "" - -#: templates/js/translated/part.js:1998 -msgid "Delete Part Relationship" -msgstr "" - -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 -msgid "No parts found" -msgstr "" - -#: templates/js/translated/part.js:2207 -msgid "Set the part category for the selected parts" -msgstr "" - -#: templates/js/translated/part.js:2212 -msgid "Set Part Category" -msgstr "" - -#: templates/js/translated/part.js:2241 -msgid "Set category" -msgstr "" - -#: templates/js/translated/part.js:2293 -msgid "part" -msgstr "" - -#: templates/js/translated/part.js:2294 -msgid "parts" -msgstr "" - -#: templates/js/translated/part.js:2390 -msgid "No category" -msgstr "" - -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 -msgid "Display as list" -msgstr "" - -#: templates/js/translated/part.js:2566 -msgid "Display as grid" -msgstr "" - -#: templates/js/translated/part.js:2664 -msgid "No subcategories found" -msgstr "" - -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 -msgid "Display as tree" -msgstr "" - -#: templates/js/translated/part.js:2780 -msgid "Load Subcategories" -msgstr "" - -#: templates/js/translated/part.js:2795 -msgid "Subscribed category" -msgstr "" - -#: templates/js/translated/part.js:2883 -msgid "No test templates matching query" -msgstr "" - -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 -msgid "results" -msgstr "" - -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" - -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "" - -#: templates/js/translated/part.js:2960 -msgid "This test is defined for a parent part" -msgstr "" - -#: templates/js/translated/part.js:2976 -msgid "Edit Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:2990 -msgid "Delete Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 -msgid "No date specified" -msgstr "" - -#: templates/js/translated/part.js:3072 -msgid "Specified date is in the past" -msgstr "" - -#: templates/js/translated/part.js:3078 -msgid "Speculative" -msgstr "" - -#: templates/js/translated/part.js:3128 -msgid "No scheduling information available for this part" -msgstr "" - -#: templates/js/translated/part.js:3134 -msgid "Error fetching scheduling information for this part" -msgstr "" - -#: templates/js/translated/part.js:3230 -msgid "Scheduled Stock Quantities" -msgstr "" - -#: templates/js/translated/part.js:3246 -msgid "Maximum Quantity" -msgstr "" - -#: templates/js/translated/part.js:3291 -msgid "Minimum Stock Level" -msgstr "" - -#: templates/js/translated/plugin.js:46 -msgid "No plugins found" -msgstr "" - -#: templates/js/translated/plugin.js:58 -msgid "This plugin is no longer installed" -msgstr "" - -#: templates/js/translated/plugin.js:60 -msgid "This plugin is active" -msgstr "" - -#: templates/js/translated/plugin.js:62 -msgid "This plugin is installed but not active" -msgstr "" - -#: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 -msgid "Disable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 -msgid "Enable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:158 -msgid "The Plugin was installed" -msgstr "" - -#: templates/js/translated/plugin.js:177 -msgid "Are you sure you want to enable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:181 -msgid "Are you sure you want to disable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Enable" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Disable" -msgstr "" - -#: templates/js/translated/plugin.js:203 -msgid "Plugin updated" -msgstr "" - -#: templates/js/translated/pricing.js:159 -msgid "Error fetching currency data" -msgstr "" - -#: templates/js/translated/pricing.js:321 -msgid "No BOM data available" -msgstr "" - -#: templates/js/translated/pricing.js:463 -msgid "No supplier pricing data available" -msgstr "" - -#: templates/js/translated/pricing.js:572 -msgid "No price break data available" -msgstr "" - -#: templates/js/translated/pricing.js:755 -msgid "No purchase history data available" -msgstr "" - -#: templates/js/translated/pricing.js:791 -msgid "Purchase Price History" -msgstr "" - -#: templates/js/translated/pricing.js:894 -msgid "No sales history data available" -msgstr "" - -#: templates/js/translated/pricing.js:916 -msgid "Sale Price History" -msgstr "" - -#: templates/js/translated/pricing.js:1005 -msgid "No variant data available" -msgstr "" - -#: templates/js/translated/pricing.js:1045 -msgid "Variant Part" -msgstr "" - -#: templates/js/translated/purchase_order.js:169 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/purchase_order.js:176 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:177 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:184 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/purchase_order.js:185 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:206 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:223 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/purchase_order.js:431 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:448 -#: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/purchase_order.js:454 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/purchase_order.js:459 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/purchase_order.js:460 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:483 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:488 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/purchase_order.js:494 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/purchase_order.js:515 -#: templates/js/translated/return_order.js:164 -msgid "After placing this order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:520 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:612 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:637 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/purchase_order.js:646 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/purchase_order.js:664 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:705 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:755 -msgid "Merge" -msgstr "" - -#: templates/js/translated/purchase_order.js:859 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/purchase_order.js:878 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:1104 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/purchase_order.js:1115 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/purchase_order.js:1237 -msgid "Add barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1238 -msgid "Remove barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1241 -msgid "Specify location" -msgstr "" - -#: templates/js/translated/purchase_order.js:1249 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 -msgid "Serials" -msgstr "" - -#: templates/js/translated/purchase_order.js:1368 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1370 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1396 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1464 -msgid "Scan Item Barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1465 -msgid "Scan barcode on incoming item (must not match any existing stock items)" -msgstr "" - -#: templates/js/translated/purchase_order.js:1479 -msgid "Invalid barcode data" -msgstr "" - -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/purchase_order.js:1913 -msgid "All selected Line items will be deleted" -msgstr "" - -#: templates/js/translated/purchase_order.js:1931 -msgid "Delete selected Line items?" -msgstr "" - -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/report.js:49 -msgid "Print Report" -msgstr "" - -#: templates/js/translated/report.js:68 -msgid "Report print successful" -msgstr "" - -#: templates/js/translated/report.js:73 -msgid "Report printing failed" -msgstr "" - -#: templates/js/translated/return_order.js:60 -#: templates/js/translated/sales_order.js:86 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/return_order.js:134 -msgid "Create Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:149 -msgid "Edit Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:169 -msgid "Issue Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:186 -msgid "Are you sure you wish to cancel this Return Order?" -msgstr "" - -#: templates/js/translated/return_order.js:193 -msgid "Cancel Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:218 -msgid "Complete Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:265 -msgid "No return orders found" -msgstr "" - -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 -msgid "Invalid Customer" -msgstr "" - -#: templates/js/translated/return_order.js:560 -msgid "Receive Return Order Items" -msgstr "" - -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/return_order.js:796 -msgid "Mark item as received" -msgstr "" - -#: templates/js/translated/sales_order.js:161 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:176 -msgid "Edit Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:291 -msgid "No stock items have been allocated to this shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:296 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:336 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:360 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:416 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:420 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:430 -msgid "Complete Shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:452 -msgid "Skip" -msgstr "" - -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:513 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 -msgid "Issue this Sales Order?" -msgstr "" - -#: templates/js/translated/sales_order.js:577 -msgid "Issue Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:596 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:601 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:655 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:764 -msgid "No sales orders found" -msgstr "" - -#: templates/js/translated/sales_order.js:944 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:947 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:952 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:969 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:984 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1017 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:1042 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:1084 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/sales_order.js:1088 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/sales_order.js:1255 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1306 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1307 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:1513 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/sales_order.js:1605 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1619 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/sales_order.js:1620 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/sales_order.js:2044 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2048 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/sales_order.js:2071 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:2074 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/sales_order.js:2145 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2253 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/search.js:270 -msgid "No results" -msgstr "" - -#: templates/js/translated/search.js:292 templates/search.html:25 -msgid "Enter search query" -msgstr "" - -#: templates/js/translated/search.js:342 -msgid "result" -msgstr "" - -#: templates/js/translated/search.js:352 -msgid "Minimize results" -msgstr "" - -#: templates/js/translated/search.js:355 -msgid "Remove results" -msgstr "" - -#: templates/js/translated/stock.js:106 -msgid "Serialize Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:137 -msgid "Confirm Stock Serialization" -msgstr "" - -#: templates/js/translated/stock.js:173 -msgid "Add Location type" -msgstr "" - -#: templates/js/translated/stock.js:209 -msgid "Edit Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:224 -msgid "New Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:226 -msgid "Create another location after this one" -msgstr "" - -#: templates/js/translated/stock.js:227 -msgid "Stock location created" -msgstr "" - -#: templates/js/translated/stock.js:241 -msgid "Are you sure you want to delete this stock location?" -msgstr "" - -#: templates/js/translated/stock.js:248 -msgid "Move to parent stock location" -msgstr "" - -#: templates/js/translated/stock.js:257 -msgid "Delete Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:261 -msgid "Action for stock items in this stock location" -msgstr "" - -#: templates/js/translated/stock.js:266 -msgid "Action for sub-locations" -msgstr "" - -#: templates/js/translated/stock.js:320 -msgid "This part cannot be serialized" -msgstr "" - -#: templates/js/translated/stock.js:356 -msgid "Add given quantity as packs instead of individual items" -msgstr "" - -#: templates/js/translated/stock.js:368 -msgid "Enter initial quantity for this stock item" -msgstr "" - -#: templates/js/translated/stock.js:374 -msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" - -#: templates/js/translated/stock.js:445 -msgid "Stock item duplicated" -msgstr "" - -#: templates/js/translated/stock.js:465 -msgid "Duplicate Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:481 -msgid "Are you sure you want to delete this stock item?" -msgstr "" - -#: templates/js/translated/stock.js:486 -msgid "Delete Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:507 -msgid "Edit Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:549 -msgid "Create another item after this one" -msgstr "" - -#: templates/js/translated/stock.js:561 -msgid "Created new stock item" -msgstr "" - -#: templates/js/translated/stock.js:574 -msgid "Created multiple stock items" -msgstr "" - -#: templates/js/translated/stock.js:599 -msgid "Find Serial Number" -msgstr "" - -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 -msgid "Enter serial number" -msgstr "" - -#: templates/js/translated/stock.js:620 -msgid "Enter a serial number" -msgstr "" - -#: templates/js/translated/stock.js:640 -msgid "No matching serial number" -msgstr "" - -#: templates/js/translated/stock.js:649 -msgid "More than one matching result found" -msgstr "" - -#: templates/js/translated/stock.js:757 -msgid "Confirm stock assignment" -msgstr "" - -#: templates/js/translated/stock.js:758 -msgid "Assign Stock to Customer" -msgstr "" - -#: templates/js/translated/stock.js:835 -msgid "Warning: Merge operation cannot be reversed" -msgstr "" - -#: templates/js/translated/stock.js:836 -msgid "Some information will be lost when merging stock items" -msgstr "" - -#: templates/js/translated/stock.js:838 -msgid "Stock transaction history will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:839 -msgid "Supplier part information will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:933 -msgid "Confirm stock item merge" -msgstr "" - -#: templates/js/translated/stock.js:934 -msgid "Merge Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1031 -msgid "Transfer Stock" -msgstr "" - -#: templates/js/translated/stock.js:1032 -msgid "Move" -msgstr "" - -#: templates/js/translated/stock.js:1038 -msgid "Count Stock" -msgstr "" - -#: templates/js/translated/stock.js:1039 -msgid "Count" -msgstr "" - -#: templates/js/translated/stock.js:1043 -msgid "Remove Stock" -msgstr "" - -#: templates/js/translated/stock.js:1044 -msgid "Take" -msgstr "" - -#: templates/js/translated/stock.js:1048 -msgid "Add Stock" -msgstr "" - -#: templates/js/translated/stock.js:1049 users/models.py:396 -msgid "Add" -msgstr "" - -#: templates/js/translated/stock.js:1053 -msgid "Delete Stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Specify stock quantity" -msgstr "" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1257 -msgid "Select at least one available stock item" -msgstr "" - -#: templates/js/translated/stock.js:1303 -msgid "Confirm stock adjustment" -msgstr "" - -#: templates/js/translated/stock.js:1448 -msgid "PASS" -msgstr "" - -#: templates/js/translated/stock.js:1450 -msgid "FAIL" -msgstr "" - -#: templates/js/translated/stock.js:1455 -msgid "NO RESULT" -msgstr "" - -#: templates/js/translated/stock.js:1535 -msgid "Pass test" -msgstr "" - -#: templates/js/translated/stock.js:1538 -msgid "Add test result" -msgstr "" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 -msgid "No test results found" -msgstr "" - -#: templates/js/translated/stock.js:1625 -msgid "Test Date" -msgstr "" - -#: templates/js/translated/stock.js:1638 -msgid "Test started" -msgstr "" - -#: templates/js/translated/stock.js:1647 -msgid "Test finished" -msgstr "" - -#: templates/js/translated/stock.js:1801 -msgid "Edit Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1821 -msgid "Delete Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1853 -msgid "In production" -msgstr "" - -#: templates/js/translated/stock.js:1857 -msgid "Installed in Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:1865 -msgid "Assigned to Sales Order" -msgstr "" - -#: templates/js/translated/stock.js:1871 -msgid "No stock location set" -msgstr "" - -#: templates/js/translated/stock.js:1927 -msgid "Change stock status" -msgstr "" - -#: templates/js/translated/stock.js:1936 -msgid "Merge stock" -msgstr "" - -#: templates/js/translated/stock.js:1985 -msgid "Delete stock" -msgstr "" - -#: templates/js/translated/stock.js:2038 -msgid "stock items" -msgstr "" - -#: templates/js/translated/stock.js:2043 -msgid "Scan to location" -msgstr "" - -#: templates/js/translated/stock.js:2054 -msgid "Stock Actions" -msgstr "" - -#: templates/js/translated/stock.js:2098 -msgid "Load installed items" -msgstr "" - -#: templates/js/translated/stock.js:2176 -msgid "Stock item is in production" -msgstr "" - -#: templates/js/translated/stock.js:2181 -msgid "Stock item assigned to sales order" -msgstr "" - -#: templates/js/translated/stock.js:2184 -msgid "Stock item assigned to customer" -msgstr "" - -#: templates/js/translated/stock.js:2187 -msgid "Serialized stock item has been allocated" -msgstr "" - -#: templates/js/translated/stock.js:2189 -msgid "Stock item has been fully allocated" -msgstr "" - -#: templates/js/translated/stock.js:2191 -msgid "Stock item has been partially allocated" -msgstr "" - -#: templates/js/translated/stock.js:2194 -msgid "Stock item has been installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:2196 -msgid "Stock item has been consumed by a build order" -msgstr "" - -#: templates/js/translated/stock.js:2200 -msgid "Stock item has expired" -msgstr "" - -#: templates/js/translated/stock.js:2202 -msgid "Stock item will expire soon" -msgstr "" - -#: templates/js/translated/stock.js:2207 -msgid "Stock item has been rejected" -msgstr "" - -#: templates/js/translated/stock.js:2209 -msgid "Stock item is lost" -msgstr "" - -#: templates/js/translated/stock.js:2211 -msgid "Stock item is destroyed" -msgstr "" - -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 -msgid "Depleted" -msgstr "" - -#: templates/js/translated/stock.js:2380 -msgid "Supplier part not specified" -msgstr "" - -#: templates/js/translated/stock.js:2427 -msgid "Stock Value" -msgstr "" - -#: templates/js/translated/stock.js:2555 -msgid "No stock items matching query" -msgstr "" - -#: templates/js/translated/stock.js:2658 -msgid "stock locations" -msgstr "" - -#: templates/js/translated/stock.js:2813 -msgid "Load Sublocations" -msgstr "" - -#: templates/js/translated/stock.js:2930 -msgid "Details" -msgstr "" - -#: templates/js/translated/stock.js:2934 -msgid "No changes" -msgstr "" - -#: templates/js/translated/stock.js:2946 -msgid "Part information unavailable" -msgstr "" - -#: templates/js/translated/stock.js:2968 -msgid "Location no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:2985 -msgid "Build order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3000 -msgid "Purchase order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3017 -msgid "Sales Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3034 -msgid "Return Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3053 -msgid "Customer no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3071 -msgid "Stock item no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3089 -msgid "Added" -msgstr "" - -#: templates/js/translated/stock.js:3097 -msgid "Removed" -msgstr "" - -#: templates/js/translated/stock.js:3169 -msgid "No installed items" -msgstr "" - -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 -msgid "Uninstall Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3280 -msgid "Select stock item to uninstall" -msgstr "" - -#: templates/js/translated/stock.js:3301 -msgid "Install another stock item into this item" -msgstr "" - -#: templates/js/translated/stock.js:3302 -msgid "Stock items can only be installed if they meet the following criteria" -msgstr "" - -#: templates/js/translated/stock.js:3304 -msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3305 -msgid "The Stock Item is currently available in stock" -msgstr "" - -#: templates/js/translated/stock.js:3306 -msgid "The Stock Item is not already installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:3307 -msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "" - -#: templates/js/translated/stock.js:3320 -msgid "Select part to install" -msgstr "" - -#: templates/js/translated/stock.js:3383 -msgid "Select one or more stock items" -msgstr "" - -#: templates/js/translated/stock.js:3396 -msgid "Selected stock items" -msgstr "" - -#: templates/js/translated/stock.js:3400 -msgid "Change Stock Status" -msgstr "" - -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 -msgid "Has project code" -msgstr "" - -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 -msgid "Order status" -msgstr "" - -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:165 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:169 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:173 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:189 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Has location type" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:333 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:338 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:342 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:343 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:348 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:353 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:358 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:363 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:368 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:372 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:373 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:378 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:383 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:407 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:416 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:421 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:422 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:426 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:430 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:443 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:449 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:463 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:467 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:715 -msgid "Include parts in subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:720 -msgid "Show active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 -msgid "Available stock" -msgstr "" - -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 -msgid "Has Units" -msgstr "" - -#: templates/js/translated/table_filters.js:742 -msgid "Part has defined units" -msgstr "" - -#: templates/js/translated/table_filters.js:746 -msgid "Has IPN" -msgstr "" - -#: templates/js/translated/table_filters.js:747 -msgid "Part has internal part number" -msgstr "" - -#: templates/js/translated/table_filters.js:751 -msgid "In stock" -msgstr "" - -#: templates/js/translated/table_filters.js:759 -msgid "Purchasable" -msgstr "" - -#: templates/js/translated/table_filters.js:771 -msgid "Has stocktake entries" -msgstr "" - -#: templates/js/translated/table_filters.js:841 -msgid "Has Choices" -msgstr "" - -#: templates/js/translated/tables.js:92 -msgid "Display calendar view" -msgstr "" - -#: templates/js/translated/tables.js:102 -msgid "Display list view" -msgstr "" - -#: templates/js/translated/tables.js:112 -msgid "Display tree view" -msgstr "" - -#: templates/js/translated/tables.js:130 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/tables.js:136 -msgid "Collapse all rows" -msgstr "" - -#: templates/js/translated/tables.js:186 -msgid "Export Table Data" -msgstr "" - -#: templates/js/translated/tables.js:190 -msgid "Select File Format" -msgstr "" - -#: templates/js/translated/tables.js:529 -msgid "Loading data" -msgstr "" - -#: templates/js/translated/tables.js:532 -msgid "rows per page" -msgstr "" - -#: templates/js/translated/tables.js:537 -msgid "Showing all rows" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "Showing" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "to" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "of" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "rows" -msgstr "" - -#: templates/js/translated/tables.js:546 -msgid "No matching results" -msgstr "" - -#: templates/js/translated/tables.js:549 -msgid "Hide/Show pagination" -msgstr "" - -#: templates/js/translated/tables.js:555 -msgid "Toggle" -msgstr "" - -#: templates/js/translated/tables.js:561 -msgid "All" -msgstr "" - -#: templates/navbar.html:45 -msgid "Buy" -msgstr "" - -#: templates/navbar.html:57 -msgid "Sell" -msgstr "" - -#: templates/navbar.html:121 -msgid "Show Notifications" -msgstr "" - -#: templates/navbar.html:124 -msgid "New Notifications" -msgstr "" - -#: templates/navbar.html:144 users/models.py:201 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:148 -msgid "Logout" -msgstr "" - -#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 -msgid "Save" -msgstr "" - -#: templates/notifications.html:9 -msgid "Show all notifications and history" -msgstr "" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - -#: templates/qr_code.html:11 -msgid "QR data not provided" -msgstr "" - -#: templates/registration/logged_out.html:7 -msgid "You were logged out successfully." -msgstr "" - -#: templates/registration/logged_out.html:9 -msgid "Log in again" -msgstr "" - -#: templates/search.html:9 -msgid "Show full search results" -msgstr "" - -#: templates/search.html:12 -msgid "Clear search" -msgstr "" - -#: templates/search.html:15 -msgid "Close search menu" -msgstr "" - -#: templates/socialaccount/authentication_error.html:5 -msgid "Social Network Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:8 -msgid "Account Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:11 -msgid "An error occurred while attempting to login via your social network account." -msgstr "" - -#: templates/socialaccount/authentication_error.html:13 -msgid "Contact your system administrator for further information." -msgstr "" - -#: templates/socialaccount/login.html:13 -#, python-format -msgid "Connect %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:15 -#, python-format -msgid "You are about to connect a new third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:17 -#, python-format -msgid "Sign In Via %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:19 -#, python-format -msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:24 -msgid "Continue" -msgstr "" - -#: templates/socialaccount/login.html:29 -msgid "Invalid SSO Provider" -msgstr "" - -#: templates/socialaccount/login.html:31 -msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "" - -#: templates/socialaccount/signup.html:11 -#, python-format -msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" - -#: templates/socialaccount/signup.html:13 -msgid "As a final step, please complete the following form" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:26 -msgid "Provider has not been configured" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:35 -msgid "No SSO providers have been configured" -msgstr "" - -#: templates/stats.html:13 -msgid "Instance Name" -msgstr "" - -#: templates/stats.html:18 -msgid "Database" -msgstr "" - -#: templates/stats.html:26 -msgid "Server is running in debug mode" -msgstr "" - -#: templates/stats.html:33 -msgid "Docker Mode" -msgstr "" - -#: templates/stats.html:34 -msgid "Server is deployed using docker" -msgstr "" - -#: templates/stats.html:39 -msgid "Plugin Support" -msgstr "" - -#: templates/stats.html:43 -msgid "Plugin support enabled" -msgstr "" - -#: templates/stats.html:45 -msgid "Plugin support disabled" -msgstr "" - -#: templates/stats.html:52 -msgid "Server status" -msgstr "" - -#: templates/stats.html:55 -msgid "Healthy" -msgstr "" - -#: templates/stats.html:57 -msgid "Issues detected" -msgstr "" - -#: templates/stats.html:64 -msgid "Background Worker" -msgstr "" - -#: templates/stats.html:67 -msgid "Background worker not running" -msgstr "" - -#: templates/stats.html:75 -msgid "Email Settings" -msgstr "" - -#: templates/stats.html:78 -msgid "Email settings not configured" -msgstr "" - -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - -#: templates/yesnolabel.html:4 -msgid "Yes" -msgstr "" - -#: templates/yesnolabel.html:6 -msgid "No" -msgstr "" - -#: users/admin.py:104 -msgid "Users" -msgstr "" - -#: users/admin.py:105 -msgid "Select which users are assigned to this group" -msgstr "" - -#: users/admin.py:249 -msgid "The following users are members of multiple groups" -msgstr "" - -#: users/admin.py:283 -msgid "Personal info" -msgstr "" - -#: users/admin.py:285 -msgid "Permissions" -msgstr "" - -#: users/admin.py:288 -msgid "Important dates" -msgstr "" - -#: users/authentication.py:29 users/models.py:138 -msgid "Token has been revoked" -msgstr "" - -#: users/authentication.py:32 -msgid "Token has expired" -msgstr "" - -#: users/models.py:81 -msgid "API Token" -msgstr "" - -#: users/models.py:82 -msgid "API Tokens" -msgstr "" - -#: users/models.py:118 -msgid "Token Name" -msgstr "" - -#: users/models.py:119 -msgid "Custom token name" -msgstr "" - -#: users/models.py:125 -msgid "Token expiry date" -msgstr "" - -#: users/models.py:133 -msgid "Last Seen" -msgstr "" - -#: users/models.py:134 -msgid "Last time the token was used" -msgstr "" - -#: users/models.py:138 -msgid "Revoked" -msgstr "" - -#: users/models.py:379 -msgid "Permission set" -msgstr "" - -#: users/models.py:388 -msgid "Group" -msgstr "" - -#: users/models.py:392 -msgid "View" -msgstr "" - -#: users/models.py:392 -msgid "Permission to view items" -msgstr "" - -#: users/models.py:396 -msgid "Permission to add items" -msgstr "" - -#: users/models.py:400 -msgid "Change" -msgstr "" - -#: users/models.py:402 -msgid "Permissions to edit items" -msgstr "" - -#: users/models.py:408 -msgid "Permission to delete items" -msgstr "" - diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index c3f135752c9f..9cb1f7870826 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -48,38 +48,34 @@ msgstr "Зададено е недопустимо количество" msgid "Invalid quantity supplied ({exc})" msgstr "Зададено е недопустимо количество ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Подробности за грешката могат да се намерят в администраторския панел" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Въведи дата" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Бележки" @@ -92,270 +88,250 @@ msgstr "Значението '{name}' не отговаря на шаблона" msgid "Provided value does not match required pattern: " msgstr "Въведеното значение не отговаря на задължителния шаблон: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Въведете парола" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Въведи нова парола" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Потвърди паролата" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Потвърди нова парола" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Стара парола" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Е-поща отново" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Потвърждение на електронната поща" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Трябва ла въведете една и съща електронна поща." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Въведената основна електронна поща е невалидна." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Въведеният домейн на електронната поща не е утвърден." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Регистрацията е деактивирана." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Липсва сериен номер" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Повтарящ се сериен номер" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Невалиден диапазон от групи: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Не са открити серийни номера" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Премахнете HTML маркерите от тази стойност" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Хинди" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Унгарски" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Италиански" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Японски" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Корейски" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Нидерландски" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Норвежки" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Полски" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Португалски" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Португалски (Бразилия)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Руски" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Словенски" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Шведски" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Тайландски" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Турски" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Виетнамски" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Китайски (опростен)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" @@ -364,310 +340,349 @@ msgstr "Китайски (традиционен)" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Потребител" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "родител" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Изгубен" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Върнат" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Изпълнява се" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Изпратено" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "Да" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Наличността е преброена" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Част" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Потребител" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Изпратено" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Изгубен" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Върнат" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Изпълнява се" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Цялостна наличност" @@ -6641,1148 +6112,1024 @@ msgstr "Цялостна наличност" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Наличност" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Няма наличност" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Място в склада" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Места в склада" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "Да" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Наличността е преброена" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index 7e1e045d223a..e846bd6b8d68 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -48,38 +48,34 @@ msgstr "Vyplněno neplatné množství" msgid "Invalid quantity supplied ({exc})" msgstr "Vyplněno neplatné množství ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Poznámky" @@ -92,270 +88,250 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Zadejte heslo" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Zadejte nové heslo" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Potvrďte heslo" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Potvrďte nové heslo" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Původní heslo" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (znovu)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Potvrzení emailové adresy" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Pokaždé musíte zadat stejný email." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Zadaná primární e-mailová adresa je neplatná." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Zadaná e-mailová doména není povolena." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registrace vypnuta." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Neplatný rozsah skupiny: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Neplatná sekvence skupiny: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Počet jedinečných sériových čísel ({len(serials)}) musí odpovídat množství ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulharština" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Čeština" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dánština" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Němčina" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Řečtina" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Angličtina" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Španělština" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Španělština (Mexiko)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Perština" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finština" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francouzština" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebrejština" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Hindština" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Maďarština" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italština" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japonština" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Korejština" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Lotyština" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Nizozemština" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norština" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polština" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugalština" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugalština (Brazilská)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumunština" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Ruština" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovenština" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovinština" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Srbština" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Švédština" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thajština" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turečtina" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrajinština" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamština" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Čínština (zjednodušená)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" @@ -364,310 +340,349 @@ msgstr "Čínština (tradiční)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Přihlásit se do aplikace" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Chyba při ověření pluginu" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadata musí být objekt python dict" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Metadata pluginu" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadat JSON pro použití externími pluginy" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Nesprávně naformátovaný vzor" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Neznámý formát klíče" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Chybí požadovaný klíč" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referenční pole nemůže být prázdné" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referenční číslo musí odpovídat požadovanému vzoru" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referenční číslo je příliš velké" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Chybějící soubor" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Chybějící externí odkaz" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Příloha" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Vyberte soubor k přiložení" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Odkaz" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Odkaz na externí URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Komentář" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Komentář k souboru" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Uživatel" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "datum přidání" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Název souboru nesmí být prázdný" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Neplatný adresář přílohy" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Název souboru obsahuje nepovolený znak '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Chybějící přípona souboru" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Příloha s tímto názvem již existuje" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Chyba při přejmenování souboru" + +#: InvenTree/models.py:846 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:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Název" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "nadřazený" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Poznámky (volitelné)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Data čárového kódu" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Data čárového kódu třetí strany" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Hash čárového kódu" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Uživatelské jméno" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Křestní jméno" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Křestní jméno uživatele" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Příjmení" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Příjmení uživatele" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Emailová adresa uživatele" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Personál" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Má tento uživatel oprávnění personálu" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Super-uživatel" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Je tento uživatel superuživatel" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktivní" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Je tento uživatelský účet aktivní" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Nemáte oprávnění měnit tuto uživatelskou roli." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Pouze superuživatelé mohou vytvářet nové uživatele" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Název souboru" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datový soubor" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Vyberte datový soubor k nahrání" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nepodporovaný typ souboru" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Soubor je příliš velký" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "V souboru nebyly nalezeny žádné sloupce" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "V souboru nebyly nalezeny žádné řádky s daty" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Nebyly zadány žádné řádky s daty" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Nebyly zadány žádné sloupce s daty" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Chybí povinný sloupec: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicitní sloupec: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Kontrola procesů na pozadí se nezdařila" @@ -679,1083 +694,1025 @@ msgstr "Email backend není nakonfigurován" msgid "InvenTree system health checks failed" msgstr "Kontroly zdraví systému InvenTree selhaly" -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" -msgstr "Neznámá databáze" +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Nevyřízeno" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" -msgstr "Neplatná fyzikální jednotka" +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Umístěno" -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" -msgstr "Neplatný kód měny" +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Hotovo" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" -msgstr "Přidaná hodnota nesmí být záporná" +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Zrušeno" -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" -msgstr "Nesmí přesáhnout 100%" +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Ztraceno" -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" -msgstr "Neplatná hodnota překročení" +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Vráceno" -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" -msgstr "Upravit informace o uživateli" +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Zpracovává se" -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" -msgstr "Nastavit heslo" +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Odesláno" -#: InvenTree/views.py:434 -msgid "Password fields must match" -msgstr "Hesla se musí shodovat" +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "OK" -#: InvenTree/views.py:442 -msgid "Wrong password provided" -msgstr "Zadáno špatné heslo" +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Vyžaduje pozornost" -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" -msgstr "Informace o systému" +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Poškozeno" -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" -msgstr "O InvenTree" +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Zničeno" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Odmítnuto" -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Nadřazená sestava" +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "V karanténě" -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Původní položka sledování zásob" -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Vystavil" +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Položka zásob vytvořena" -#: build/api.py:125 -msgid "Assigned To" -msgstr "" +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Položka zásob upravena" -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "Sestavení musí být zrušeno před odstraněním" +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Přiřazeno výrobní číslo" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "Spotřební materiál" +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Stav zásob sečten" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "Volitelné" +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Zásoba přidána ručně" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Sestava" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Zásoba odebrána ručně" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "Sledováno" +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Umístění změněno" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Stav zásob byl aktualizován" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" -msgstr "Přiděleno" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Nainstalováno do sestavy" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" -msgstr "Dostupné" +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Odstraněno ze sestavy" -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" -msgstr "Vytvořit objednávku" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Instalovaná položka komponenty" -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "Vytvořené objednávky" +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Odstraněná komponenta" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Rozdělit od nadřazené položky" -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Rozdělit podřazený předmět" -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Sloučené položky zásob" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Převedeno na variantu" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Výstup objednávky byl vytvořen" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Výstup objednávky sestavení dokončen" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Výstup objednávky sestavení byl odmítnut" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Spotřebováno podle objednávky" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Odesláno v souladu se zákaznickou objednávkou" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Přijato proti objednávce" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Vráceno proti vratce" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Odesláno zákazníkovi" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Vráceno od zákazníka" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Výroba" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Vrátit zpět" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Oprava" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Náhrada" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Vrácení peněz" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Odmítnout" + +#: InvenTree/templatetags/inventree_extras.py:183 +msgid "Unknown database" +msgstr "Neznámá databáze" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +msgid "Invalid physical unit" +msgstr "Neplatná fyzikální jednotka" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "Neplatný kód měny" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "Přidaná hodnota nesmí být záporná" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" +msgstr "Nesmí přesáhnout 100%" + +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "Neplatná hodnota překročení" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "Upravit informace o uživateli" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "Nastavit heslo" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "Hesla se musí shodovat" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "Zadáno špatné heslo" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "Informace o systému" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "O InvenTree" + +#: build/api.py:238 +msgid "Build must be cancelled before it can be deleted" +msgstr "Sestavení musí být zrušeno před odstraněním" + +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 +msgid "Consumable" +msgstr "Spotřební materiál" + +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 +msgid "Optional" +msgstr "Volitelné" + +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" +msgstr "Sledováno" + +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 +msgid "Allocated" +msgstr "Přiděleno" + +#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 +msgid "Available" +msgstr "Dostupné" + +#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 +msgid "Build Order" +msgstr "Vytvořit objednávku" -#: build/models.py:163 +#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:207 +msgid "Build Orders" +msgstr "Vytvořené objednávky" + +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Neplatná volba nadřazeného sestavení" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "Musí být specifikován odpovědný uživatel nebo skupina" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Díly obědnávky sestavení nemohou být změněny" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Referenční číslo objednávky" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Reference" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Nadřazená sestava" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Příkaz sestavení pro který je toto sestavení přiděleno" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Díl" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Prodejní příkaz, kterému je tato verze přidělena" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Umístění lokace" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vyberte lokaci, ze které chcete provést inventuru pro sestavu. (nechte prázdné, chcete-li provést inventuru z libovolné lokace)" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "dokončil" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Uživatel, který vydal tento příkaz k sestavení" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Uživatel nebo skupina odpovědná za tento příkaz k sestavení" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Odkaz na externí URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Priorita tohoto příkazu k sestavení" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Kód projektu pro objednávku sestavení" -#: build/models.py:651 build/models.py:778 -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:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Příkaz k sestavení {build} byl dokončen" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Příkaz k sestavení byl dokončen" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Výstup sestavení neodpovídá příkazu sestavení" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 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:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "Vytvořit položku řádku objednávky" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Množství" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Vyžadované množství pro objednávku" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Vybraná položka zásob neodpovídá řádku BOM" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Název dílu" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Výstupní část se neshoduje s částí příkazu sestavení" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" -msgstr "Zadejte sériová čísla pro sestavení výstupů" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Lokace" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "Skladové umístění pro výstup sestavy" +msgstr "" -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:331 +#: build/serializers.py:302 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:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "U sledovatelných dílů musí být uvedena sériová čísla" +msgstr "" -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" -msgstr "Následující sériová čísla již existují nebo jsou neplatná" +msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "Musí být uveden seznam výstupů sestavy" +msgstr "" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Lokace" -#: build/serializers.py:457 +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Umístění zásob pro seškrábnuté výstupy" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" -msgstr "Zahodit alokace" +msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" +msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" -msgstr "Důvod vyřazení výstupu(ů) sestavy" +msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "Umístění dokončených výstupů sestavy" +msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Stav" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" -msgstr "Přijmout neúplné přidělení" +msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" +msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "Spotřebovat přidělené zásoby" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "" -#: build/serializers.py:655 -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:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" -msgstr "Odstranit neúplné výstupy" +msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" +msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" -msgstr "Není povoleno" +msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" -msgstr "Přijmout jako spotřebované touto objednávkou sestavy" +msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" -msgstr "Uvolnit před dokončením této objednávky sestavy" +msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" -msgstr "Nadměrně přidělené zásoby" +msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k objednávce na sestavu" +msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" -msgstr "Některé skladové položky byly nadměrně přiděleny" +msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "Přijmout nepřidělené" +msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k této objednávce sestavy" +msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" -msgstr "Požadované zásoby nebyly plně přiděleny" +msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" -msgstr "Přijmout neúplné" +msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "Požadované množství sestavy nebylo dokončeno" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:777 -msgid "Build order must be in production state" +#: build/serializers.py:695 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" -msgstr "Objednávka sestavy má neúplné výstupy" +msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" -msgstr "Linka sestavy" +msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" -msgstr "Výstup sestavy" +msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" -msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" +msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" -msgstr "Řádková položka sestavy" +msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" -msgstr "bom_item.part musí ukazovat na stejný díl jako objednávka sestavy" +msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" -msgstr "Položka musí být skladem" +msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "Dostupné množství ({q}) překročeno" +msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 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" +msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 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ů" +msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" -msgstr "Položky přidělení musí být poskytnuty" +msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 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)" +msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" -msgstr "Vyloučit skladové položky z tohoto vybraného umístění" +msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" -msgstr "Zaměnitelné zásoby" +msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "Skladové položky na více místech lze používat zaměnitelně" +msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" -msgstr "Náhradní zásoby" +msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" -msgstr "Povolit přidělování náhradních dílů" +msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" -msgstr "Přiřazení volitelných BOM položek k objednávce sestavy" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Nepodařilo se spustit úlohu automatického přidělování" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" msgstr "" -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Číslo dílu výrobce" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 +msgid "BOM Item" msgstr "" -#: build/serializers.py:1184 -msgid "Build Reference" +#: build/serializers.py:1106 templates/js/translated/index.js:130 +msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1185 -msgid "BOM Reference" +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" msgstr "" -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Balení" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID dílu" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN dílu" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Popis dílu" - -#: build/serializers.py:1195 -msgid "BOM Part ID" +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" msgstr "" -#: build/serializers.py:1196 -msgid "BOM Part Name" +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1893 +msgid "Available Stock" msgstr "" -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" +#: build/tasks.py:172 +msgid "Stock required for build order" msgstr "" -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" +#: build/tasks.py:189 +msgid "Overdue Build Order" msgstr "" -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" +#: build/tasks.py:194 +#, python-brace-format +msgid "Build order {bo} is now overdue" msgstr "" -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Sledovatelné" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "BOM Položka" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "Přidělené zásoby" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "Na objednávku" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "Ve výrobě" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "Dostupné zásoby" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Nevyřízeno" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Výroba" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Zrušeno" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Hotovo" - -#: build/tasks.py:184 -msgid "Stock required for build order" -msgstr "Zásoby potřebné pro objednávku sestavy" - -#: build/tasks.py:201 -msgid "Overdue Build Order" -msgstr "Opožděná objednávka sestavy" - -#: build/tasks.py:206 -#, python-brace-format -msgid "Build order {bo} is now overdue" -msgstr "Objednávka sestavy {bo} je nyní opožděná" - #: build/templates/build/build_base.html:18 msgid "Part thumbnail" -msgstr "Miniatura dílu" +msgstr "" #: build/templates/build/build_base.html:38 #: company/templates/company/supplier_part.html:35 @@ -1764,10 +1721,10 @@ msgstr "Miniatura dílu" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" -msgstr "Akce čárového kódu" +msgstr "" #: build/templates/build/build_base.html:42 #: company/templates/company/supplier_part.html:39 @@ -1776,7 +1733,7 @@ msgstr "Akce čárového kódu" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Zobrazit QR kód" @@ -1787,9 +1744,9 @@ msgstr "Zobrazit QR kód" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Odstranit čárový kód" @@ -1800,7 +1757,7 @@ msgstr "Odstranit čárový kód" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Přiřadit čárový kód" @@ -1809,195 +1766,181 @@ msgstr "Přiřadit čárový kód" #: order/templates/order/return_order_base.html:55 #: order/templates/order/sales_order_base.html:55 msgid "Print actions" -msgstr "Akce tisku" +msgstr "" #: build/templates/build/build_base.html:60 msgid "Print build order report" -msgstr "Tisk reportu o objednávce sestavy" +msgstr "" #: build/templates/build/build_base.html:67 msgid "Build actions" -msgstr "Akce sestavy" +msgstr "" #: build/templates/build/build_base.html:71 msgid "Edit Build" -msgstr "Upravit sestavu" +msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Duplikovat sestavu" +msgid "Cancel Build" +msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Zrušit sestavu" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" -msgstr "Smazat sestavu" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" msgstr "" -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" -msgstr "Dokončit sestavu" +msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" -msgstr "Popis sestavy" +msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "Pro tuto objednávku sestavy nebyly vytvořeny žádné výstupy sestavy" +msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" -msgstr "Objednávka sestavy je připravena k označení jako dokončená" +msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "Objednávku sestavy nelze dokončit, protože zbývají nevyřízené výstupy" +msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" -msgstr "Požadované množství sestavy ještě nebylo dokončeno" +msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" -msgstr "Zásoby nebyly plně přiřazeny k této objednávce na sestavu" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +msgstr "" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Cílené datum" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" -msgstr "Tato sestava byla splatná v %(target)s" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +msgstr "" + +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" -msgstr "Po splatnosti" +msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "Dokončené výstupy" +msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" -msgstr "Prodejní objednávka" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "Priorita" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" +msgstr "Priorita" + +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" -msgstr "Odstranit objednávku sestavy" +msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" -msgstr "QR kód objednávky sestavy" +msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" -msgstr "Propojit čárový kód s objednávkou sestavy" +msgstr "" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "Detaily sestavy" +msgstr "" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "Zdroj zásob" +msgstr "" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "Zásoby lze odebírat z jakéhokoli dostupného umístění." +msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" -msgstr "Místo určení" +msgstr "" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "Místo určení není specifikováno" +msgstr "" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "Přidělené díly" +msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "Šarže" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Vytvořeno" @@ -2006,85 +1949,81 @@ msgid "No target date set" msgstr "Nenastaveno cílené datum" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Dokončeno" #: build/templates/build/detail.html:153 msgid "Build not complete" -msgstr "Sestava není dokončena" +msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" -msgstr "Podřízené objednávky sestavy" +msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" -msgstr "Uvolnění zásob" +msgstr "" #: build/templates/build/detail.html:182 msgid "Deallocate Stock" -msgstr "Uvolnění zásob" +msgstr "" #: build/templates/build/detail.html:184 msgid "Automatically allocate stock to build" -msgstr "Automaticky přiřadit zásoby k sestavě" +msgstr "" #: build/templates/build/detail.html:185 msgid "Auto Allocate" -msgstr "Automaticky přiřadit" +msgstr "" #: build/templates/build/detail.html:187 msgid "Manually allocate stock to build" -msgstr "Manuálně přiřadit zásoby k sestavě" +msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "Přidělit zásoby" +msgstr "" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "Objednat požadované díly" +msgstr "" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 msgid "Order Parts" -msgstr "Objednat díly" +msgstr "" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "Dostupné skladové zásoby byly vyfiltrovány na základě zadaného místa zdroje pro tuto objednávku sestavy" +msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" -msgstr "Neúplné výstupy sestavy" +msgstr "" #: build/templates/build/detail.html:219 msgid "Create new build output" -msgstr "Vytvořit nový výstup sestavy" +msgstr "" #: build/templates/build/detail.html:220 msgid "New Build Output" -msgstr "Nový výstup sestavy" +msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" -msgstr "Spotřebované zásoby" +msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" -msgstr "Dokončené výstupy sestavy" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" msgstr "" -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,103 +2033,56 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" -msgstr "Přílohy" +msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" -msgstr "Poznámky k sestavě" +msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" -msgstr "Přidělení dokončeno" +msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" -msgstr "Všechny řádky byly plně přiděleny" +msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" -msgstr "Objednávka nové sestavy" +msgstr "" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "Podrobnosti o objednávce sestavy" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Řádkové položky" +msgstr "" #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" -msgstr "Neúplné výstupy" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "Je odkaz" - -#: common/api.py:701 -msgid "Is File" -msgstr "Je soubor" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "Uživatel nemá oprávnění k odstranění této přílohy" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Neplatný kód měny" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Duplicitní kód měny" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Nejsou uvedeny žádné platné kódy měn" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Žádný plugin" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" -msgstr "Nepodporovaný formát souboru: {fmt}" +msgstr "" #: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "Chyba při čtení souboru (neplatné kódování)" +msgstr "" #: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "Chyba při čtení souboru (neplatný formát)" +msgstr "" #: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "Chyba při čtení souboru (nesprávný rozměr)" +msgstr "" #: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "Chyba při čtení souboru (data mohou být poškozena)" +msgstr "" #: common/forms.py:12 msgid "File" @@ -2198,1793 +2090,1653 @@ msgstr "Soubor" #: common/forms.py:12 msgid "Select file to upload" -msgstr "Vybrat soubor k nahrání" +msgstr "" #: common/forms.py:25 msgid "{name.title()} File" -msgstr "{name.title()} Soubor" +msgstr "" #: common/forms.py:26 #, python-brace-format msgid "Select {name} file to upload" -msgstr "Vyberte {name} soubor k nahrání" +msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" -msgstr "Aktualizováno" +msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" -msgstr "Časové razítko poslední aktualizace" +msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" -msgstr "Adresa URL webu je uzamčena konfigurací" +msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" -msgstr "Jedinečný kód projektu" +msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" -msgstr "Popis projektu" +msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" -msgstr "Uživatel nebo skupina odpovědná za tento projekt" +msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" -msgstr "Klíč nastavení (musí být unikátní - rozlišuje malá a velká písmena)" +msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" -msgstr "Hodnota nastavení" +msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" -msgstr "Zvolená hodnota není platnou možností" +msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" -msgstr "Hodnota musí být logická hodnota" +msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" -msgstr "Hodnota musí být celé číslo" +msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" -msgstr "Klíčový text musí být jedinečný" +msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" -msgstr "Žádná skupina" +msgstr "" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" -#: common/models.py:1231 +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" -msgstr "Je vyžadován restart" +msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" -msgstr "Bylo změněno nastavení, které vyžaduje restart serveru" +msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" -msgstr "Nevyřízené migrace" +msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" -msgstr "Počet nevyřízených migrací databáze" +msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" -msgstr "Název instance serveru" +msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" -msgstr "Textový popisovač pro instanci serveru" +msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" -msgstr "Použít název instance" +msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" -msgstr "Použít název instance v liště" +msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" -msgstr "Omezit zobrazování `o aplikaci`" +msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" -msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" +msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Jméno společnosti" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" -msgstr "Interní název společnosti" +msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" -msgstr "Základní URL" +msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" -msgstr "Základní URL pro instanci serveru" +msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Výchozí měna" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" -msgstr "Vyberte základní měnu pro cenové kalkulace" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Podporované měny" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Seznam podporovaných kódů měn" +msgstr "" -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" -msgstr "Interval aktualizace měny" +msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" -msgstr "Jak často aktualizovat směnné kurzy (pro vypnutí nastavte na nulu)" +msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" -msgstr "dny" +msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" -msgstr "Plugin aktualizace měny" +msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" -msgstr "Plugin pro aktualizaci měn k použití" +msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/models.py:1307 +#: common/models.py:1328 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" +msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" -msgstr "Limit velikosti stahování" +msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" -msgstr "Maximální povolená velikost stahování vzdáleného obrázku" +msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" -msgstr "User-agent použitý ke stažení z adresy URL" +msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 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í)" +msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" -msgstr "Přísná validace URL" +msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" -msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" +msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" -msgstr "Vyžadovat potvrzení" +msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." -msgstr "Vyžadovat výslovné potvrzení uživatele pro určitou akci." +msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" -msgstr "Hloubka stromu" +msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "Výchozí hloubka stromu pro zobrazení stromu. Hlubší úrovně lze načítat líně podle potřeby." +msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" -msgstr "Interval kontroly aktualizací" +msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" -msgstr "Jak často kontrolovat aktualizace (nastavte na nulu pro vypnutí)" +msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" -msgstr "Automatické Zálohování" +msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" -msgstr "Povolit automatické zálohování databáze a mediálních souborů" +msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" -msgstr "Interval automatického zálohování" +msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" -msgstr "Zadejte počet dní mezi automatickými zálohovými událostmi" +msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" -msgstr "Interval mazání úloh" +msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 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í" +msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" -msgstr "Interval odstranění protokolu chyb" +msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" -msgstr "Záznamy chyb budou odstraněny po zadaném počtu dní" +msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" -msgstr "Interval pro odstranění oznámení" +msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 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í" +msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "Podpora čárových kódů" +msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" -msgstr "Povolit podporu pro skenování čárových kódů ve webovém rozhraní" +msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" -msgstr "Zpoždění vstupu čárového kódu" +msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" -msgstr "Doba zpoždění zpracování vstupu čárového kódu" +msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" -msgstr "Podpora webové kamery pro čárové kódy" - -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Povolit skenování čárových kódů přes webovou kameru v prohlížeči" - -#: common/models.py:1413 -msgid "Barcode Show Data" msgstr "" -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" +#: common/models.py:1429 +msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" -msgstr "Revize dílu" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "Povolit pole revize pro díl" - -#: common/models.py:1431 -msgid "Assembly Revision Only" msgstr "" -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" +#: common/models.py:1435 +msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "Povolit odstranění ze sestavy" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "Povolit odstranění dílů, které jsou použity v sestavě" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" -msgstr "IPN Regex" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" -msgstr "Regulární vzorec výrazu pro odpovídající IPN dílu" +msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" -msgstr "Povolit duplicitní IPN" +msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" -msgstr "Povolit více dílům sdílet stejný IPN" +msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" -msgstr "Povolit editaci IPN" +msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" -msgstr "Povolit změnu IPN při úpravách dílu" +msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" -msgstr "Kopírovat data BOM dílu" +msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 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" +msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" -msgstr "Kopírovat data parametrů dílu" +msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 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" +msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" -msgstr "Kopírovat zkušební data dílu" +msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 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" +msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" -msgstr "Kopírovat šablony parametrů kategorie" +msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" -msgstr "Kopírování šablon parametrů kategorie při vytváření dílu" +msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" -msgstr "Šablona" +msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" -msgstr "Díly jsou ve výchozím nastavení šablony" +msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" -msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" +msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" -msgstr "Komponent" +msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 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" +msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Prodejné" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Sledovatelné" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Zobrazit Import v zobrazeních" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" -msgstr "Zobrazit průvodce importem v některých zobrazeních dílu" +msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Povolit vytvoření počátečního skladu při přidání nové části" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Povolit vytvoření počátečních dat dodavatele při přidávání nového dílu" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" -msgstr "Vynutit jednotky parametru" +msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 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" +msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimální počet desetinných míst k zobrazení u cenových údajů" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximální počet desetinných míst k zobrazení u cenových údajů" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Zahrnout cenová zvýhodnění dodavatelů do celkových cenových kalkulací" +msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/models.py:1608 +#: common/models.py:1594 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" +msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" -msgstr "Použít ceny skladových položek" +msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 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" +msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" -msgstr "Stáří cen skladových položek" +msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 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í" +msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" -msgstr "Použít cenu varianty" +msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" -msgstr "Zahrnutí cen variant do celkových cenových kalkulací" +msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" -msgstr "Pouze aktivní varianty" +msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" -msgstr "Pro výpočet ceny varianty použijte pouze aktivní díly varianty" +msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" -msgstr "Interval přestavby cen" +msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" -msgstr "Počet dní před automatickou aktualizací cen dílů" +msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" -msgstr "Interní ceny" +msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" -msgstr "Povolit interní ceny pro díly" +msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" -msgstr "Přepis interní ceny" +msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 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í" +msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" -msgstr "Povolit tisk štítků" +msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" -msgstr "Povolit tisk štítků z webového rozhraní" +msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" -msgstr "DPI rozlišení štítků" +msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 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ů" +msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" -msgstr "Povolit reporty" +msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" -msgstr "Povolit generování reportů" +msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" -msgstr "Režim ladění chyb" +msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" -msgstr "Generovat reporty v režimu ladění (HTML výstup)" +msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" -msgstr "Zaznamenávat chyby reportů" +msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" -msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" +msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Velikost stránky" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Povolit testovací reporty" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Povolit generování zkušebních reportů" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Připojit testovací reporty" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Při tisku testovacího reportu, připojte kopii reportu k přidružené skladové položce" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" -msgstr "Globálně unikátní sériová čísla" +msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Sériová čísla pro skladové položky musí být globálně unikátní" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Automaticky vyplnit sériová čísla" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Automaticky vyplnit sériová čísla ve formulářích" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/models.py:1734 +#: common/models.py:1720 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" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" -msgstr "Šablona kódu dávky" +msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 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" +msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" -msgstr "Expirace zásob" +msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" -msgstr "Povolit funkci expirace zásob" +msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" -msgstr "Prodat prošlé zásoby" +msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" -msgstr "Povolit prodej prošlých zásob" +msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" -msgstr "Čas stáří zásob" +msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 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" +msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" -msgstr "Sestavit prošlé zásoby" +msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" -msgstr "Povolit sestavování s prošlými zásobami" +msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" -msgstr "Kontrola vlastnictví zásob" +msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" -msgstr "Umožnit kontrolu vlastnictví nad skladovými místy a položkami" +msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" -msgstr "Výchozí ikona umístění zásob" +msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" -msgstr "Výchozí ikona umístění zásob (prázdné znamená bez ikony)" +msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" -msgstr "Zobrazit nainstalované skladové položky" - -#: common/models.py:1787 -msgid "Display installed stock items in stock tables" -msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" - -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "Zkontrolovat BOM při instalaci položek" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "Nainstalované skladové položky musí existovat v BOM pro nadřazený díl" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "Povolit převod mimo sklad" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "Umožnit přesun skladových položek, které nejsou na skladě, mezi skladovými místy" - -#: common/models.py:1808 -msgid "Build Order Reference Pattern" -msgstr "Referenční vzor objednávky sestavy" - -#: common/models.py:1810 -msgid "Required pattern for generating Build Order reference field" -msgstr "Požadovaný vzor pro generování referenčního pole Objednávka sestavy" - -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "Vyžadovat odpovědného vlastníka" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "Ke každé objednávce musí být přiřazen odpovědný vlastník" - -#: common/models.py:1822 -msgid "Require Active Part" msgstr "" -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" +#: common/models.py:1772 +msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1828 -msgid "Require Locked Part" +#: common/models.py:1777 +msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" +#: common/models.py:1779 +msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1834 -msgid "Require Valid BOM" +#: common/models.py:1785 +msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" +#: common/models.py:1787 +msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1842 -msgid "Require Closed Child Orders" +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 +msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 +msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" -msgstr "Blokovat, dokud testy neprojdou" +msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 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" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" -msgstr "Povolit vracení objednávek" +msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" -msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní" +msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" -msgstr "Referenční vzor návratové objednávky" +msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" -msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka" +msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" -msgstr "Úprava dokončených návratových objednávek" +msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" -msgstr "Umožnit úpravu návratových objednávek po jejich dokončení" +msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" -msgstr "Referenční vzor prodejní objednávky" +msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" -msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky" +msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" -msgstr "Výchozí přeprava prodejní objednávky" +msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" -msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami" +msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" -msgstr "Úprava dokončených prodejních objednávek" +msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení" - -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "Označit odeslané objednávky jako dokončené" - -#: common/models.py:1916 -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“" +msgstr "" -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" -msgstr "Referenční vzor nákupní objednávky" +msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" -msgstr "Požadovaný vzor pro generování referenčního pole nákupní objednávky" +msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" -msgstr "Úprava dokončených nákupních objednávek" +msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 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í" +msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" -msgstr "Automatické dokončování nákupních objednávek" +msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 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" +msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" -msgstr "Povolit pole zapomenutého hesla" - -#: common/models.py:1954 -msgid "Enable password forgot function on the login pages" -msgstr "Povolení funkce zapomenutého hesla na přihlašovacích stránkách" - -#: common/models.py:1959 -msgid "Enable registration" -msgstr "Povolit registrace" - -#: common/models.py:1960 -msgid "Enable self-registration for users on the login pages" -msgstr "Povolit samoregistraci uživatelů na přihlašovacích stránkách" - -#: common/models.py:1965 -msgid "Enable SSO" -msgstr "Povolit SSO" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "Povolit SSO na přihlašovacích stránkách" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "Povolit SSO registraci" - -#: common/models.py:1973 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "Povolit samoregistraci uživatelů prostřednictvím SSO na přihlašovacích stránkách" - -#: common/models.py:1979 -msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +#: common/models.py:1895 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1987 -msgid "SSO group key" +#: common/models.py:1900 +msgid "Enable registration" msgstr "" -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" +#: common/models.py:1901 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1995 -msgid "SSO group map" +#: common/models.py:1906 +msgid "Enable SSO" msgstr "" -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +#: common/models.py:1907 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:2003 -msgid "Remove groups outside of SSO" +#: common/models.py:1912 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +#: common/models.py:1914 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" -msgstr "Vyžadován e-mail" +msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" -msgstr "Požadovat, aby uživatel při registraci zadal e-mail" +msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" -msgstr "Automaticky vyplnit SSO uživatele" +msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" -msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" +msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" -msgstr "Mail dvakrát" +msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" -msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" +msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" -msgstr "Heslo dvakrát" +msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" -msgstr "Při registraci dvakrát požádat uživatele o heslo" +msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" -msgstr "Povolené domény" +msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 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í @)" +msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" -msgstr "Skupina při registraci" +msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" -msgstr "Vynutit MFA" +msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." -msgstr "Uživatelé musí používat vícefaktorové zabezpečení." +msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" -msgstr "Zkontrolovat pluginy při spuštění" +msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 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" +msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" -msgstr "Zkontrolovat aktualizace pluginů" +msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" -msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" +msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" -msgstr "Povolit integraci URL" +msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" -msgstr "Povolit plug-inům přidávat trasy URL" +msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" -msgstr "Povolit integraci navigace" +msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" -msgstr "Povolit integrování pluginů do navigace" +msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" -msgstr "Povolit integraci aplikací" +msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" -msgstr "Povolit pluginům přidávát aplikace" +msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" -msgstr "Povolit integraci plánu" +msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" -msgstr "Povolit pluginům spouštění naplánovaných úloh" +msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" -msgstr "Povolit integraci událostí" +msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" -msgstr "Povolit pluginům reagovat na interní události" +msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" -msgstr "Povolit kódy projektů" +msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" -msgstr "Povolit kódy projektů pro sledování projektů" +msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" -msgstr "Funkce inventury" +msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "Povolit funkci inventury pro evidenci stavu zásob a výpočet hodnoty zásob" +msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" -msgstr "Vyloučit externí umístění" +msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "Vyloučit skladové položky na externích místech z výpočtů inventury" +msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" -msgstr "Perioda automatické inventury" +msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "Počet dní mezi automatickým záznamem inventury (pro vypnutí nastavte nulu)" +msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" -msgstr "Interval mazání reportů" +msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" -msgstr "Reporty o inventuře se po určitém počtu dní vymažou" +msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" -msgstr "Zobrazit celá jména uživatelů" +msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" -msgstr "Zobrazit plná jména uživatelů namísto uživatelských jmen" +msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" -msgstr "Povolit data zkušební stanice" +msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" -msgstr "Povolit sběr dat ze zkušební stanice pro výsledky testů" +msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" -msgstr "Klíč nastavení (musí být unikátní - rozlišuje malá a velká písmena" +msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" -msgstr "Skrýt neaktivní díly" +msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "Skrýt neaktivní díly ve výsledcích zobrazených na domovské stránce" +msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" -msgstr "Zobrazit odebírané díly" +msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" -msgstr "Zobrazit odebírané díly na domovské stránce" +msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" -msgstr "Zobrazit odebírané kategorie" +msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" -msgstr "Zobrazit kategorie odebíraných dílů na hlavní stránce" +msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" -msgstr "Zobrazit nejnovější díly" +msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" -msgstr "Zobrazit nejnovější díly na domovské stránce" +msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" -msgstr "Zobrazit neplatné kusovníky (BOMy)" +msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" -msgstr "Zobrazit kusovníky (BOMy), které čekají na ověření, na domovské stránce" +msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" -msgstr "Zobrazit nedávné změny zásob" +msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" -msgstr "Zobrazit nedávno změněné skladové položky na domovské stránce" +msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" -msgstr "Zobrazit nízký stav zásob" +msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" -msgstr "Zobrazit na domovské stránce položky s nízkou skladovou zásobou" +msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" -msgstr "Zobrazit vyčerpané zásoby" +msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" -msgstr "Zobrazit vyčerpané položky na domovské stránce" +msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" -msgstr "Zobrazit potřebné zásoby" +msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" -msgstr "Zobrazit skladové položky potřebné pro sestavy na domovské stránce" +msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" -msgstr "Zobrazit expirované zásoby" +msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" -msgstr "Zobrazit expirované skladové položky na domovské stránce" +msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" -msgstr "Zobrazit neaktuální zásoby" +msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" -msgstr "Zobrazit neaktuální skladové položky na domovské stránce" +msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" -msgstr "Zobrazit nevyřízené sestavy" +msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" -msgstr "Zobrazit nevyřízené sestavy na domovské stránce" +msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" -msgstr "Zobrazit sestavy po splatnosti" +msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" -msgstr "Zobrazit sestavy po splatnosti na domovské stránce" +msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" -msgstr "Zobrazit nevyřízené PO" +msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" -msgstr "Zobrazit nevyřízené PO na domovské stránce" +msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" -msgstr "Zobrazit PO po splatnosti" +msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" -msgstr "Zobrazit PO po splatnosti na domovské stránce" +msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" -msgstr "Zobrazit nevyřízené SO" +msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" -msgstr "Zobrazit nevyřízené SO na domovské stránce" +msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" -msgstr "Zobrazit SO po splatnosti" +msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" -msgstr "Zobrazit SO po splatnosti na domovské stránce" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" -msgstr "Zobrazit čekající zásilky SO" +msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" -msgstr "Zobrazit čekající zásilky SO na domovské stránce" +msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" -msgstr "Zobrazit novinky" +msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" -msgstr "Zobrazit novinky na domovské stránce" +msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" -msgstr "Zobrazení štítků na řádku" +msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "Zobrazit štítky PDF v prohlížeči namísto stahování jako soubor" +msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" -msgstr "Výchozí tiskárna štítků" +msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" -msgstr "Konfigurovat tiskárnu štítků, která má být vybrána jako výchozí" +msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" -msgstr "Zobrazení reportů na řádku" +msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "Zobrazit reporty PDF v prohlížeči namísto stahování jako soubor" +msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" -msgstr "Hledat díly" +msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" -msgstr "Zobrazit díly v náhledu hledání" +msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "Hledat díly dodavatele" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" -msgstr "Zobrazit díly dodavatele v náhledu hledání" +msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" -msgstr "Vyhledávání dílů výrobce" +msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" -msgstr "Zobrazit díly výrobce v náhledu hledání" +msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" -msgstr "Skrýt neaktivní díly" +msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" -msgstr "Vyloučené neaktivní části z okna náhledu vyhledávání" +msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" -msgstr "Hledat kategorie" +msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" -msgstr "Zobrazit kategorie dílů v náhledu hledání" +msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" -msgstr "Hledat zásoby" +msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" -msgstr "Zobrazit skladové položky v náhledu hledání" +msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" -msgstr "Skrýt nedostupné skladové položky" +msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" -msgstr "Vyloučit skladové položky, které nejsou dostupné z okna náhledu hledání" +msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" -msgstr "Hledat umístění" +msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" -msgstr "Zobrazit skladová umístění v náhledu hledání" +msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" -msgstr "Hledat společnosti" +msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" -msgstr "Zobrazit společnosti v náhledu hledání" +msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" -msgstr "Hledat objednávky sestav" +msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" -msgstr "Zobrazit objednávky sestav v náhledu hledání" +msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" -msgstr "Hledat nákupní objednávky" +msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" -msgstr "Zobrazit nákupní objednávky v náhledu hledání" +msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" -msgstr "Vyloučit neaktivní nákupní objednávky" +msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" -msgstr "Vyloučit neaktivní nákupní objednávky z okna náhledu vyhledávání" +msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" -msgstr "Hledat prodejní objednávky" +msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" -msgstr "Zobrazit prodejní objednávky v náhledu hledání" +msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" -msgstr "Vyloučit neaktivní prodejní objednávky" +msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" -msgstr "Vyloučit neaktivní prodejní objednávky z okna náhledu vyhledávání" +msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" -msgstr "Vyhledávání vrácených objednávek" +msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" -msgstr "Zobrazit vrácené objednávky v okně náhledu vyhledávání" +msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" -msgstr "Vyloučit neaktivní vrácené objednávky" +msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" -msgstr "Vyloučit neaktivní vrácené objednávky z okna náhledu vyhledávání" +msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" -msgstr "Náhled výsledků vyhledávání" +msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" -msgstr "Počet výsledků, které se mají zobrazit v každé části okna náhledu vyhledávání" +msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" -msgstr "Regex hledání" +msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" -msgstr "Povolit regulární výrazy ve vyhledávacích dotazech" +msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" -msgstr "Vyhledávání celého slova" +msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" -msgstr "Vyhledávací dotazy vracejí výsledky pro shody celých slov" +msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" -msgstr "Zobrazit množství ve formulářích" +msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" -msgstr "Zobrazit dostupné množství dílů v některých formulářích" +msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" -msgstr "Klávesa Escape zavře formuláře" +msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" -msgstr "Zavřít modální formuláře pomocí klávesy escape" +msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" -msgstr "Pevná navigační lišta" +msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" -msgstr "Pozice navigační lišty je pevně nastavena na horní okraj obrazovky" +msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Formát data" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" -msgstr "Preferovaný formát pro zobrazení datumů" +msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" -msgstr "Plánování dílů" +msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" -msgstr "Zobrazit informace o plánování dílů" +msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" -msgstr "Inventura dílu" +msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "Zobrazit informace o skladových zásobách dílů (pokud je povolena funkce inventury)" +msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" -msgstr "Délka textu v tabulce" +msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" -msgstr "Maximální délka textu v zobrazeních tabulek" +msgstr "" + +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" -#: common/models.py:2530 +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" -msgstr "Přijímat zprávy o chybách" +msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" -msgstr "Dostávat oznámení o systémových chybách" +msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" -msgstr "Poslední použité tiskárny" +msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" -msgstr "Uložte poslední použité tiskárny pro uživatele" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Uživatel" +msgstr "" -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" -msgstr "Množství cenové slevy" +msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Cena" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" -msgstr "Jednotková cena při stanoveném množství" +msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" -msgstr "Koncový bod" +msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" -msgstr "Koncový bod, ve kterém je tento webhook přijímán" +msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" -msgstr "Název tohoto webhooku" +msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" -msgstr "Je tento webhook aktivní" +msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" -msgstr "Token" +msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" -msgstr "Token pro přístup" +msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" -msgstr "Tajný klíč" +msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" -msgstr "Sdílený tajný klíč pro HMAC" +msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" -msgstr "ID zprávy" +msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" -msgstr "Unikátní identifikátor pro tuto zprávu" +msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" -msgstr "Hostitel" +msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" -msgstr "Hostitel, od kterého byla tato zpráva přijata" +msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" -msgstr "Záhlaví" +msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" -msgstr "Záhlaví této zprávy" +msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" -msgstr "Tělo" +msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" -msgstr "Tělo zprávy" +msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" -msgstr "Koncový bod, na kterém byla zpráva přijata" +msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" -msgstr "Pracoval na" +msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" -msgstr "Byla práce na této zprávě dokončena?" +msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" -msgstr "ID" +msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" -msgstr "Název" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Odkaz" +msgstr "" -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" -msgstr "Zveřejněno" +msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" -msgstr "Autor" +msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" -msgstr "Souhrn" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" -msgstr "Přečteno" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" -msgstr "Byla tato novinka přečtena?" +msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Obrazek" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" -msgstr "Soubor obrázku" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "Cílový typ modelu pro tento obrázek" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "Cílové ID modelu pro tento obrázek" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" -msgstr "Název jednotky musí být platný identifikátor" +msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" -msgstr "Název jednotky" +msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "Symbol" +msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" -msgstr "Volitelný symbol jednotky" +msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" -msgstr "Definice" +msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" -msgstr "Definice jednotky" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Příloha" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Chybějící soubor" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Chybějící externí odkaz" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Vyberte soubor k přiložení" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Komentář" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "Komentář přílohy" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "Datum nahrání" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "Datum, kdy byl soubor nahrán" - -#: common/models.py:3301 -msgid "File size" -msgstr "Velikost souboru" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "Velikost souboru v bytech" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "Uveden neplatný typ modelu pro přílohu" +msgstr "" #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" -msgstr "Nový {verbose_name}" +msgstr "" #: common/notifications.py:316 msgid "A new order has been created and assigned to you" -msgstr "Byla vytvořena nová objednávka a přiřazena k vám" +msgstr "" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "{verbose_name} zrušeno" +msgstr "" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "Objednávka, která je vám přidělena, byla zrušena" +msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,109 +3752,72 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" -msgstr "Čas uzamčení" +msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" -msgstr "Jméno úkolu" +msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" -msgstr "Funkce" +msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" -msgstr "Název funkce" +msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" -msgstr "Argumenty" +msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" -msgstr "Argumenty úlohy" +msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" -msgstr "Argumenty klíčových slov" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "Argumenty klíčových slov úlohy" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Název souboru" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "Typ modelu" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model" - -#: common/validators.py:35 -msgid "No attachment model type provided" msgstr "" -#: common/validators.py:41 -msgid "Invalid attachment model type" +#: common/serializers.py:377 +msgid "Task keyword arguments" msgstr "" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "Minimální počet míst nesmí být větší než maximální počet míst" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "Maximální počet míst nesmí být menší než minimální počet míst" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Prázdná doména není povolena." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Neplatný název domény: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" -msgstr "Nahrát soubor" +msgstr "" #: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:119 @@ -4110,19 +3825,19 @@ msgstr "Nahrát soubor" #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "Přiřadit pole" +msgstr "" #: common/views.py:84 msgid "Match Items" -msgstr "Přiřadit položky" +msgstr "" #: common/views.py:401 msgid "Fields matching failed" -msgstr "Shoda polí se nezdařila" +msgstr "" #: common/views.py:464 msgid "Parts imported" -msgstr "Importované díly" +msgstr "" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -4133,457 +3848,428 @@ msgstr "Importované díly" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "Předchozí krok" +msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "Díl je aktivní" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "Výrobce je aktivní" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" -msgstr "Díl dodavatele je aktivní" +msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" -msgstr "Interní díl je aktivní" +msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" -msgstr "Dodavatel je aktivní" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Společnost" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Společnosti" +msgstr "" -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" -msgstr "Popis společnosti" +msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" -msgstr "Popis společnosti" +msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Webová stránka" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Webové stránky společnosti" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefonní číslo" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Kontaktní telefonní číslo" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Kontaktní místo" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" -msgstr "Odkaz na externí informace o společnosti" +msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" -msgstr "Je tato společnost aktivní?" - -#: company/models.py:168 -msgid "Is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:165 +msgid "is customer" +msgstr "je zákazník" + +#: company/models.py:166 msgid "Do you sell items to this company?" -msgstr "Prodáváte zboží této společnosti?" +msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" -msgstr "Zakupujete zboží od této společnosti?" +msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" -msgstr "Vyrábí tato společnost díly?" +msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" -msgstr "Výchozí měna používaná pro tuto společnost" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adresa" +msgstr "" -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresy" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Společnost" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" -msgstr "Vyberte společnost" +msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" -msgstr "Název adresy" +msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" -msgstr "Název popisující záznam adresy" +msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" -msgstr "Primární adresa" +msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" -msgstr "Nastavit jako primární adresu" +msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" -msgstr "Řádek 1" +msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" -msgstr "1. řádek adresy" +msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" -msgstr "Řádek 2" +msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" -msgstr "2. řádek adresy" +msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" -msgstr "PSČ" +msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" -msgstr "Město/Region" +msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" -msgstr "PSČ město/region" +msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" -msgstr "Stát/kraj" +msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" -msgstr "Stát nebo provincie" +msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" -msgstr "Země" +msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" -msgstr "Adresovaná země" +msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" -msgstr "Doručovací poznámky pro kurýra" +msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" -msgstr "Poznámky pro kurýra" +msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" -msgstr "Interní přepravní poznámky" +msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" -msgstr "Doručovací poznámky pro interní použití" +msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" -msgstr "Odkaz na informace o adrese (externí)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Výrobce dílu" +msgstr "" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Základní díl" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Zvolte díl" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Výrobce" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "MPN" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Číslo dílu výrobce" -#: company/models.py:513 +#: company/models.py:515 msgid "URL for external manufacturer part link" -msgstr "URL pro odkaz na díl externího výrobce" +msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Popis dílu výrobce" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Výrobce dílu" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Název parametru" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Hodnota" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Hodnota parametru" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Jednotky" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" -msgstr "Jednotky parametru" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Díl dodavatele" +msgstr "" -#: company/models.py:719 +#: company/models.py:731 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ů" +msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" -msgstr "Jednotky balení musí být větší než nula" +msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" -msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" +msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Dodavatel" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" -msgstr "Vyberte dodavatele" +msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" -msgstr "Skladová evidence dodavatele" +msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" -msgstr "Je tento díl dodavatele aktivní?" +msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" -msgstr "Vyberte díl výrobce" +msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" -msgstr "Adresa URL pro odkaz na externí díl dodavatele" +msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" -msgstr "Popis dílu dodavatele" +msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Poznámka" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" -msgstr "základní cena" +msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" -msgstr "Minimální poplatek (např. poplatek za skladování)" +msgstr "" + +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" -#: company/models.py:853 +#: company/models.py:864 msgid "Part packaging" -msgstr "Balení dílu" +msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" -msgstr "Počet kusů v balení" +msgstr "" -#: company/models.py:860 +#: company/models.py:871 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é." +msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" -msgstr "více" +msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" -msgstr "Objednat více" +msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" -msgstr "Množství dostupné od dodavatele" +msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" -msgstr "Dostupnost aktualizována" +msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" -msgstr "Datum poslední aktualizace údajů o dostupnosti" - -#: company/models.py:1027 -msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" -msgstr "Výchozí měna používaná pro tohoto dodavatele" - -#: company/serializers.py:210 -msgid "Company Name" msgstr "" -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" -msgstr "Skladem" +msgstr "" #: company/templates/company/company_base.html:16 #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" -msgstr "Neaktivní" +msgstr "" #: company/templates/company/company_base.html:27 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" -msgstr "Vytvořit nákupní objednávku" +msgstr "" #: company/templates/company/company_base.html:33 msgid "Company actions" -msgstr "Akce společnosti" +msgstr "" #: company/templates/company/company_base.html:38 msgid "Edit company information" @@ -4607,13 +4293,13 @@ msgstr "Odstranit společnost" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" -msgstr "Obrázek dílu" +msgstr "" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 @@ -4630,53 +4316,60 @@ msgstr "Stáhnout obrázek z URL" msgid "Delete image" msgstr "Smazat obrázek" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Zákazník" #: company/templates/company/company_base.html:117 msgid "Uses default currency" -msgstr "Použít výchozí měnu" +msgstr "" + +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adresa" #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "Odstranit obrázek" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "Odstranit přidružený obrázek z této společnosti" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Odstranit" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "Nahrát obrázek" +msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "Stáhnout obrázek" +msgstr "" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4690,7 +4383,7 @@ msgstr "Vytvořit nového dodavatele dílu" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Nová díl dodavatele" @@ -4703,7 +4396,7 @@ msgstr "Výrobce dílů" msgid "Create new manufacturer part" msgstr "Vytvořit nového výrobce dílu" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Nový výrobce dílu" @@ -4717,7 +4410,7 @@ msgstr "Dodavatelský sklad" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4728,39 +4421,39 @@ msgstr "Zakoupené objednávky" #: company/templates/company/detail.html:79 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" -msgstr "Vytvořit novou nákupní objednávku" +msgstr "" #: company/templates/company/detail.html:80 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "Nová nákupní objednávka" +msgstr "" #: company/templates/company/detail.html:101 #: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 #: users/models.py:209 msgid "Sales Orders" -msgstr "Prodejní objednávky" +msgstr "" #: company/templates/company/detail.html:105 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "Vytvořit novou prodejní objednávku" +msgstr "" #: company/templates/company/detail.html:106 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "Nová prodejní objednávka" +msgstr "" #: company/templates/company/detail.html:126 msgid "Assigned Stock" -msgstr "Přiřazené zásoby" +msgstr "" #: company/templates/company/detail.html:142 #: company/templates/company/sidebar.html:29 @@ -4771,17 +4464,17 @@ msgstr "Přiřazené zásoby" #: templates/js/translated/search.js:232 templates/navbar.html:65 #: users/models.py:210 msgid "Return Orders" -msgstr "Návratové objednávky" +msgstr "" #: company/templates/company/detail.html:146 #: order/templates/order/return_orders.html:20 msgid "Create new return order" -msgstr "Vytvořit novou návratovou objednávku" +msgstr "" #: company/templates/company/detail.html:147 #: order/templates/order/return_orders.html:21 msgid "New Return Order" -msgstr "Nová návratová objednávka" +msgstr "" #: company/templates/company/detail.html:168 msgid "Company Notes" @@ -4789,120 +4482,128 @@ msgstr "Poznámky ke společnosti" #: company/templates/company/detail.html:183 msgid "Company Contacts" -msgstr "Kontakty na společnost" +msgstr "" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "Přidat kontakt" +msgstr "" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "Adresy společnosti" +msgstr "" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "Přidat adresu" +msgstr "" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 msgid "Manufacturers" -msgstr "Výrobci" +msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Objednávka dílů" #: company/templates/company/manufacturer_part.html:39 #: templates/js/translated/company.js:1343 msgid "Edit manufacturer part" -msgstr "Upravit díl výrobce" +msgstr "" #: company/templates/company/manufacturer_part.html:43 #: templates/js/translated/company.js:1344 msgid "Delete manufacturer part" -msgstr "Odstranit díl výrobce" +msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" -msgstr "Interní díl" +msgstr "" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "Nejsou k dispozici žádné informace o výrobci" +msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" -msgstr "Dodavatelé" +msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" -msgstr "Parametry" +msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" -msgstr "Nový parametr" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" msgstr "" -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" -msgstr "Přidat parametr" +msgstr "" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "Vyrobené díly" +msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "Dodané díly" +msgstr "" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "Dodané skladové položky" +msgstr "" #: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "Přiřazené skladové položky" +msgstr "" #: company/templates/company/sidebar.html:33 msgid "Contacts" -msgstr "Kontakty" +msgstr "" + +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" -msgstr "Akce týkající se dílu dodavatele" +msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Objednávka dílů" #: company/templates/company/supplier_part.html:60 #: company/templates/company/supplier_part.html:61 msgid "Update Availability" -msgstr "Aktualizovat dostupnost" +msgstr "" #: company/templates/company/supplier_part.html:63 #: company/templates/company/supplier_part.html:64 @@ -4926,330 +4627,224 @@ msgstr "Vymazat dodavatele dílu" #: company/templates/company/supplier_part.html:133 msgid "No supplier information available" -msgstr "Nejsou k dispozici žádné informace o dodavateli" +msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" -msgstr "Číslo zboží (SKU)" +msgstr "" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" msgstr "Sklad dílu dodavatele" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" -msgstr "Vytvořit novou položku skladu" +msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" -msgstr "Nová skladová položka" +msgstr "" #: company/templates/company/supplier_part.html:223 msgid "Supplier Part Orders" -msgstr "Objednávky dílu dodavatele" +msgstr "" #: company/templates/company/supplier_part.html:246 msgid "Pricing Information" -msgstr "Informace o cenách" +msgstr "" #: company/templates/company/supplier_part.html:251 #: templates/js/translated/company.js:398 #: templates/js/translated/pricing.js:684 msgid "Add Price Break" -msgstr "Přidat cenovou slevu" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" msgstr "" -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" -msgstr "QR kód dílu dodavatele" +msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" -msgstr "Propojit čárový kód s dílem dodavatele" +msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" -msgstr "Aktualizovat dostupnost dílu" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" -msgstr "Skladové položky" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:9 msgid "Supplier Part Pricing" -msgstr "Ceny dílu dodavatele" +msgstr "" #: company/views.py:32 msgid "New Supplier" -msgstr "Nový dodavatel" +msgstr "" #: company/views.py:38 msgid "New Manufacturer" -msgstr "Nový výrobce" +msgstr "" #: company/views.py:43 templates/InvenTree/search.html:210 #: templates/navbar.html:60 msgid "Customers" -msgstr "Zákazníci" +msgstr "" #: company/views.py:44 msgid "New Customer" -msgstr "Nový zákazník" - -#: company/views.py:52 -msgid "New Company" -msgstr "Nová společnost" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Umístěno" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" msgstr "" -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "Kopie" +msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" -msgstr "Počet kopií, které se mají tisknout pro každý štítek" +msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" -msgstr "Připojeno" +msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" -msgstr "Neznámý" +msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "Tisk" +msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "Žádná média" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "Odpojeno" +msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" -msgstr "Tiskárna štítků" +msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "Přímo vytisknout štítky pro různé položky." +msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "Umístění tiskárny" +msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" -msgstr "Určení rozsahu tiskárny na konkrétní místo" +msgstr "" #: machine/models.py:25 msgid "Name of machine" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" -msgstr "Společnost, od které se položky objednávají" +msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" -msgstr "Reference dodavatele" +msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" -msgstr "Referenční kód objednávky dodavatele" +msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" -msgstr "přijal" +msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" -msgstr "Datum vystavení" +msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" -msgstr "Datum vystavení objednávky" +msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" -msgstr "Datum dokončení objednávky" +msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" -msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO" +msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" -msgstr "Množství musí být kladné" +msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" -msgstr "Společnost, jíž se položky prodávají" - -#: order/models.py:1003 -msgid "Sales order status" msgstr "" -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " -msgstr "Reference zákazníka " +msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" -msgstr "Referenční kód objednávky zákazníka" +msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" -msgstr "Datum odeslání" +msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" -msgstr "odesláno společností" - -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "Objednávka je již dokončena" +msgstr "" -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "Objednávka je již zrušena" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" -msgstr "Pouze otevřená objednávka může být označena jako kompletní" +msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní" +msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 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" +msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" -msgstr "Množství položky" +msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" -msgstr "Odkaz na řádkovou položku" +msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" -msgstr "Poznámky k řádkovým položkám" +msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 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é)" +msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" -msgstr "Popis řádkové položky (nepovinné)" +msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" -msgstr "Kontext" +msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" -msgstr "Dodatečný kontext pro tento řádek" +msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" -msgstr "Cena za jednotku" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" -msgstr "Dodavatelský díl musí odpovídat dodavateli" +msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" -msgstr "smazáno" +msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" -msgstr "Díl dodavatele" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +msgstr "" + +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" -msgstr "Doručeno" +msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" -msgstr "Počet přijatých položek" +msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" -msgstr "Nákupní cena" +msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" -msgstr "Jednotková nákupní cena" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "Kde si kupující přeje, aby byla tato položka uložena?" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:1616 -msgid "Sales Order Line Item" +#: order/models.py:1434 +msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" -msgstr "Virtuální díl nelze přiřadit k prodejní objednávce" +msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" -msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly" +msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" -msgstr "Prodejní cena" +msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" -msgstr "Jednotková prodejní cena" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Odesláno" +msgstr "" -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" -msgstr "Odeslané množství" - -#: order/models.py:1751 -msgid "Sales Order Shipment" msgstr "" -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" -msgstr "Datum odeslání" +msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" -msgstr "Datum doručení" +msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" -msgstr "Datum doručení zásilky" +msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" -msgstr "Kontroloval(a)" +msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" -msgstr "Uživatel, který zkontroloval tuto zásilku" +msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" -msgstr "Doprava" +msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" -msgstr "Číslo zásilky" +msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" -msgstr "Sledovací číslo" +msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" -msgstr "Informace o sledování zásilky" +msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" -msgstr "Číslo faktury" +msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" -msgstr "Referenční číslo přiřazené faktury" +msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" -msgstr "Zásilka již byla odeslána" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "Zásilka nemá žádné přidělené skladové položky" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:1941 -msgid "Sales Order Allocation" +#: order/models.py:1721 +msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" -msgstr "Zásobní položka nebyla přiřazena" +msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 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" +msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" -msgstr "Nelze přidělit skladovou položku na řádek bez dílu" +msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "Přidělené množství nesmí překročit množství zásob" +msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" -msgstr "Množství musí být 1 pro serializovanou skladovou položku" +msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" -msgstr "Prodejní objednávka neodpovídá zásilce" +msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" -msgstr "Zásilka neodpovídá prodejní objednávce" +msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" -msgstr "Řádek" +msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" -msgstr "Odkaz na zásilku z prodejní objednávky" +msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" -msgstr "Položka" +msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" -msgstr "Vyberte skladovou položku pro přidělení" +msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" -msgstr "Zadejte množství pro přidělení zásob" +msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" -msgstr "Reference návratové objednávky" +msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" -msgstr "Společnost, od které se vrací položky" +msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" -msgstr "Stav návratové objednávky" - -#: order/models.py:2362 -msgid "Return Order Line Item" msgstr "" -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" -msgstr "K návratové objednávce lze přiřadit pouze serializované položky" +msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" -msgstr "Vyberte položku pro vrácení od zákazníka" +msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" -msgstr "Datum přijetí" +msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" -msgstr "Datum přijetí této vrácené položky" +msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "Výsledek" +msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" -msgstr "Výsledky pro tuto položku" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "Náklady spojené s návratem nebo opravou této položky" - -#: order/models.py:2428 -msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "Dokončené řádky" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" +#: order/models.py:2242 +msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" -msgstr "Objednávku nelze zrušit" +msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" -msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" +msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" -msgstr "Objednávka má nedokončené řádkové položky" +msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" -msgstr "Objednávka není otevřena" +msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" -msgstr "Automatická cena" +msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 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" +msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" -msgstr "Měna nákupní ceny" +msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" -msgstr "Sloučit položky" +msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 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:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Interní číslo dílu" - -#: order/serializers.py:568 -msgid "Internal Part Name" msgstr "" -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" -msgstr "Musí být uveden díl dodavatele" +msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" -msgstr "Objednávka musí být zadána" +msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" -msgstr "Dodavatel musí odpovídat objednávce" +msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" -msgstr "Objednávka musí odpovídat dodavateli" +msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" -msgstr "Řádková položka" +msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" -msgstr "Řádková položka neodpovídá nákupní objednávce" +msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" -msgstr "Vyberte cílové umístění pro přijaté položky" +msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" -msgstr "Zadat kód dávky pro příchozí položky skladu" - -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "Zadat sériová čísla pro příchozí skladové položky" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "Čárový kód" +msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" -msgstr "Naskenovaný čárový kód" +msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" -msgstr "Tento čárový kód se již používá" +msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" -msgstr "U sledovatelných dílů musí být uvedeno celočíselné množství" +msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" -msgstr "Musí být uvedeny řádkové položky" +msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" -msgstr "Místo určení musí být specifikováno" +msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" -msgstr "Hodnoty dodaných čárových kódů musí být unikátní" +msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Ztraceno" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Vráceno" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Zpracovává se" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Vrátit zpět" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Oprava" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Náhrada" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Vrácení peněz" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Odmítnout" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6221,7 +5698,7 @@ msgstr "" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "Objednávka je již zpracována. Soubory nelze nahrát." +msgstr "" #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -6229,58 +5706,67 @@ msgstr "Objednávka je již zpracována. Soubory nelze nahrát." #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "Krok %(step)s z %(count)s" +msgstr "" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "Přijaté skladové zásoby" +msgstr "" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" -msgstr "Položky nákupní objednávky" +msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "Přidat řádkovou položku" +msgstr "" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "Přijmout řádkové položky" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "Extra řádky" +msgstr "" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "Přidání dalšího řádku" +msgstr "" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "Přijaté položky" +msgstr "" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 #: order/templates/order/sales_order_detail.html:139 msgid "Order Notes" -msgstr "Poznámky k objednávce" +msgstr "" #: order/templates/order/return_order_base.html:18 #: order/templates/order/sales_order_base.html:18 msgid "Customer logo thumbnail" -msgstr "Náhled loga zákazníka" +msgstr "" #: order/templates/order/return_order_base.html:60 msgid "Print return order report" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "ID dílu" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Název dílu" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Popis dílu" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Díly" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "IPN dílu" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategorie dílu" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Výchozí umístění dílů v této kategorii" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Díly nesmějí být přímo zařazeny do strukturované kategorie, ale mohou být zařazeny jako podkategorie." -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Výchozí klíčová slova pro díly v této kategorii" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Název dílu" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Interní číslo dílu" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "ID dílu nebo název dílu" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Jedinečná hodnota ID dílu" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Hodnota IPN dílu" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Aktualizovat díly" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Kusovník" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Činnost nebyla specifikována" msgid "No matching action found" msgstr "Nebyla nalezena odpovídající činnost" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Pro data čárového kódu nebyla nalezena shoda" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Pro data čárového kódu byla nalezena shoda" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Vyžaduje pozornost" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Poškozeno" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Zničeno" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Odmítnuto" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "V karanténě" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Původní položka sledování zásob" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Položka zásob vytvořena" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Položka zásob upravena" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Přiřazeno výrobní číslo" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stav zásob sečten" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Zásoba přidána ručně" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Zásoba odebrána ručně" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Umístění změněno" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Stav zásob byl aktualizován" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Nainstalováno do sestavy" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Odstraněno ze sestavy" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Instalovaná položka komponenty" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Odstraněná komponenta" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Rozdělit od nadřazené položky" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Rozdělit podřazený předmět" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Sloučené položky zásob" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Převedeno na variantu" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Výstup objednávky byl vytvořen" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Výstup objednávky sestavení dokončen" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Výstup objednávky sestavení byl odmítnut" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Spotřebováno podle objednávky" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Odesláno v souladu se zákaznickou objednávkou" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Přijato proti objednávce" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Vráceno proti vratce" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Odesláno zákazníkovi" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Vráceno od zákazníka" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Sestavení" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Odstranit" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Domovská stránka" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Potvrdit" @@ -11563,26 +10607,26 @@ msgstr "Potvrdit" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ano" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Nastavení oprávnění" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Skupina" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Zobrazit" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Oprávnění k zobrazení položek" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Oprávnění přidat položky" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Změnit" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Oprávnění k úpravě položek" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Oprávnění k odstranění položek" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 20a7c3cccb00..25c8b552c65c 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -48,38 +48,34 @@ msgstr "Ugyldigt antal angivet" msgid "Invalid quantity supplied ({exc})" msgstr "Ugyldigt antal angivet ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Fejloplysninger kan findes i admin panelet" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Bemærkninger" @@ -92,270 +88,250 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Indtast adgangskode" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Indtast ny adgangskode" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Bekræft adgangskode" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Bekræft ny adgangskode" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Gammel adgangskode" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-mail (igen)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Bekræftelse af e-mailadresse" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Du skal indtaste den samme e-mail hver gang." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Den indtastede email adresse er ikke gyldig." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Det angivne e-mail domæne er ikke godkendt." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registrering er deaktiveret." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarsk" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tjekkisk" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dansk" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Tysk" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Græsk" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Engelsk" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spansk" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spansk (Mexikansk)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finsk" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Fransk" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italiensk" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japansk" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreansk" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Hollandsk" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polsk" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilien)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russisk" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovensk" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbisk" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Svensk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" @@ -364,310 +340,349 @@ msgstr "Kinesisk (traditionelt)" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadata skal være et python dict objekt" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata felt, til brug af eksterne plugins" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Forkert formateret mønster" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Ukendt formatnøgle angivet" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøgle" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referencefelt må ikke være tomt" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Reference skal matche det påkrævede mønster" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Manglende fil" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Manglende eksternt link" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Vedhæftning" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Vælg fil, der skal vedhæftes" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link til ekstern URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Kommentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Fil kommentar" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Bruger" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "dato for upload" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Filnavn må ikke være tomt" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Ugyldig vedhæftningsmappe" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Filnavn indeholder ugyldigt tegn '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Filnavn mangler filtype" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Vedhæftning med dette filnavn findes allerede" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Fejl ved omdøbning af fil" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "overordnet" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown noter (valgfri)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Du har ikke tilladelse til at ændre denne brugerrolle." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Kun superbrugere kan oprette nye brugere" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Filnavn" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Vælg datafilen til upload" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Filtype ikke understøttet" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Ingen kolonner fundet i fil" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Ingen datarækker fundet i fil" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Ingen data-rækker angivet" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Ingen data-kolonner angivet" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrævet kolonne: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikeret kolonne: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Kontrol af baggrundstjeneste mislykkedes" @@ -679,27 +694,223 @@ msgstr "E-mail backend ej konfigureret" msgid "InvenTree system health checks failed" msgstr "Helbredstjek af InvenTree system mislykkedes" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Afventende" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Placeret" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Fuldført" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Annulleret" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Mistet" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Returneret" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Igangværende" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Afsendt" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Opmærksomhed påkrævet" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Beskadiget" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Destrueret" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Afvist" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "I karantæne" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Forældet lager sporings post" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lager-element oprettet" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Redigeret lager-element" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Serienummer tildelt" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Lagerbeholdning optalt" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Lagerbeholdning tilføjet manuelt" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Lagerbeholdning fjernet manuelt" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Lokation ændret" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Lager opdateret" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Monteret i samling" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Fjernet fra samling" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Installeret komponent element" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Fjernet komponent element" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Opdel fra overordnet element" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Opdel underordnet element" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Flettede lagervarer" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Konverteret til variant" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Byggeordre output genereret" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Byggeorder output fuldført" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Brugt efter byggeordre" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Afsendt mod salgsordre" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Modtaget mod indkøbsordre" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Returneret mod returordre" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Sendt til kunde" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Returneret fra kunde" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produktion" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Retur" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Reparér" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Erstat" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Refusion" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Afvis" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ukendt database" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Ugyldig fysisk enhed" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Overskud må ikke være negativ" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Overskuddet må ikke overstige 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Ugyldig værdi for overskud" @@ -727,105 +938,62 @@ msgstr "Systemoplysninger" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Overordnet produktion" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Valgfri" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Sporet" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Tilgængelig" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Produktionsordre" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Produktionsordre" msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Ugyldigt valg for overordnet produktion" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Overordnet produktion" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Produktionsordre som er tildelt denne produktion" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordre, som er tildelt denne produktion" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "udført af" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link til ekstern URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Afventende" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produktion" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Annulleret" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Fuldført" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Vis QR-kode" @@ -1787,9 +1744,9 @@ msgstr "Vis QR-kode" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,103 +2015,52 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 -#: company/templates/company/manufacturer_part_sidebar.html:9 -#: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" +#: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:39 +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" msgstr "" -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" +#: build/templates/build/detail.html:276 +msgid "Build Notes" msgstr "" -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" +#: build/templates/build/detail.html:434 +msgid "Allocation Complete" msgstr "" -#: common/currency.py:132 -msgid "Invalid currency code" +#: build/templates/build/detail.html:435 +msgid "All lines have been fully allocated" msgstr "" -#: common/currency.py:134 -msgid "Duplicate currency code" +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" msgstr "" -#: common/currency.py:139 -msgid "No valid currency codes provided" +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" msgstr "" -#: common/currency.py:156 -msgid "No plugin" +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" msgstr "" #: common/files.py:63 @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Bruger" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Vedhæftning" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Manglende fil" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Manglende eksternt link" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Vælg fil, der skal vedhæftes" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Kommentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Filnavn" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Placeret" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Afsendt" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Mistet" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Returneret" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Igangværende" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Retur" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Reparér" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Erstat" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Refusion" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Afvis" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,199 +7845,183 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 -msgid "Received purchase order line item" -msgstr "" - -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" +#: plugin/base/barcodes/mixins.py:479 +msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Opmærksomhed påkrævet" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Beskadiget" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Destrueret" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Afvist" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "I karantæne" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Forældet lager sporings post" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Lager-element oprettet" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Redigeret lager-element" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Serienummer tildelt" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Lagerbeholdning optalt" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Lagerbeholdning tilføjet manuelt" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Lagerbeholdning fjernet manuelt" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Lokation ændret" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Lager opdateret" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Monteret i samling" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Fjernet fra samling" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Installeret komponent element" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Fjernet komponent element" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Opdel fra overordnet element" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Opdel underordnet element" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Flettede lagervarer" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Konverteret til variant" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Byggeordre output genereret" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Byggeorder output fuldført" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Brugt efter byggeordre" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Afsendt mod salgsordre" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Modtaget mod indkøbsordre" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Returneret mod returordre" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Sendt til kunde" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Returneret fra kunde" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index c5b448f00761..8eca26f95c43 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -48,38 +48,34 @@ msgstr "Ungültige Menge" msgid "Invalid quantity supplied ({exc})" msgstr "Ungültige Menge ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Fehlerdetails finden Sie im Admin-Panel" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Notizen" @@ -92,270 +88,250 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Passwort eingeben" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Neues Passwort eingeben" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Passwort wiederholen" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Neues Passwort bestätigen" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Altes Passwort" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-Mail (nochmal)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Bestätigung der E-Mail Adresse" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "E-Mail Adressen müssen übereinstimmen." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "MFA Registrierung ist deaktiviert." - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Die angegebene primäre E-Mail-Adresse ist ungültig." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Die angegebene E-Mail-Domain ist nicht freigegeben." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registrierung ist deaktiviert." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Ungültiger Gruppenbereich: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ungültige Gruppensequenz: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Anzahl der eindeutigen Seriennummern ({len(serials)}) muss mit der Menge übereinstimmen ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arabisch" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarisch" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tschechisch" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dänisch" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Deutsch" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Griechisch" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Englisch" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estnisch" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Persisch" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Beenden" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Französisch" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hinduistisch" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ungarisch" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italienisch" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Lettisch" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polnisch" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugiesisch" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugiesisch (Brasilien)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumänisch" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russisch" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slowakisch" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slowenisch" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbisch" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrainisch" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Chinesisch (Vereinfacht)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" @@ -364,310 +340,349 @@ msgstr "Chinesisch (Traditionell)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] In App einloggen" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Email" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Fehler beim Ausführen der Plugin Validierung" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadaten müssen ein Python-Dict Objekt sein" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Plugin Metadaten" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-Metadatenfeld, für die Verwendung durch externe Plugins" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Falsch formatiertes Muster" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Unbekannter Formatschlüssel angegeben" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Erforderlicher Formatschlüssel fehlt" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referenz-Feld darf nicht leer sein" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referenz muss erforderlichem Muster entsprechen" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Fehlende Datei" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Fehlender externer Link" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Anhang" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Datei zum Anhängen auswählen" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link zu einer externen URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Kommentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Datei-Kommentar" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Benutzer" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "Hochladedatum" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Dateiname darf nicht leer sein" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Ungültiges Verzeichnis für Anhang" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Dateiname enthält ungültiges Zeichen '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Dateiendung fehlt" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Anhang mit diesem Dateinamen bereits vorhanden" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Fehler beim Umbenennen" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "Name" +msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "Eltern" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown Notizen (optional)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Benutzername" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Vorname" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Vorname des Benutzers" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Nachname" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Nachname des Benutzers" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "E-Mailadresse des Benutzers" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Mitarbeiter" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Hat der Benutzer die Mitarbeiter Berechtigung" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Administrator" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Ist dieser Benutzer ein Administrator" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktiv" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Ist dieses Benutzerkonto aktiv" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Sie haben keine Berechtigung, diese Benutzerrolle zu ändern." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Nur Superuser können neue Benutzer erstellen" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Dateiname" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datendatei" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Neue Datei zum Hochladen auswählen" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nicht unterstütztes Dateiformat" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Datei ist zu groß" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Keine Spalten in der Datei gefunden" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Keine Datensätze in der Datei gefunden" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Keine Zeilen ausgewählt" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Keine Spalten angegeben" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Erforderliche Spalte '{name}' fehlt" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Doppelte Spalte: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" @@ -679,27 +694,223 @@ msgstr "E-Mail-Backend nicht konfiguriert" msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ausstehend" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Platziert" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Fertig" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Storniert" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Verloren" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Zurückgegeben" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "In Bearbeitung" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Versendet" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "erfordert Eingriff" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Beschädigt" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Zerstört" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Zurückgewiesen" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "In Quarantäne" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Alter Bestand-Verfolgungs-Eintrag" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagerartikel erstellt" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Lagerartikel bearbeitet" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Seriennummer hinzugefügt" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Bestand gezählt" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Bestand manuell hinzugefügt" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Bestand manuell entfernt" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Standort geändert" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Lagerbestand aktualisiert" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "In Baugruppe installiert" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Aus Baugruppe entfernt" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Komponente installiert" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Komponente entfernt" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Vom übergeordneten Element geteilt" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Unterobjekt geteilt" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Lagerartikel zusammengeführt" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "In Variante umgewandelt" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Endprodukt erstellt" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Endprodukt fertiggestellt" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Endprodukt abgelehnt" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Durch Bauauftrag verbraucht" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Versandt gegen Verkaufsauftrag" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Gegen Bestellung empfangen" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Zurückgeschickt gegen Rücksendeauftrag" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Zum Kunden geschickt" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Rücksendung vom Kunden" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "in Arbeit" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Zurück" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Reparatur" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Ersetzen" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Rückerstattung" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Ablehnen" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Unbekannte Datenbank" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Ungültige physikalische Einheit" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Überschuss-Wert darf nicht negativ sein" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Überschuss darf 100% nicht überschreiten" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Ungültiger Wert für Ausschuss" @@ -727,105 +938,62 @@ msgstr "Systeminformationen" msgid "About InvenTree" msgstr "Über InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "Mehrstufig" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Eltern-Bauauftrag" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "Mir zugewiesen" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Aufgegeben von" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" -msgstr "Optional" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Baugruppe" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "Nachverfolgt" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" +msgstr "Nachverfolgt" + +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Verfügbar" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Bauauftrag" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Bauauftrag" msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Ungültige Wahl für übergeordneten Bauauftrag" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referenz" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Eltern-Bauauftrag" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Teil" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externer Link" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link zu einer externen URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Name des Teils" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Lagerort" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "Lagerort für Bauprodukt" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Lagerort" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "Status" +msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "Zugewiesen Bestand verbrauchen" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Zugewiesenen Bestand entfernen" -#: build/serializers.py:655 -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:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Abzug aller Lagerbestände, die diesem Build bereits zugewiesen wurden" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Fehler beim Starten der automatischen Zuweisung" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Hersteller-Teilenummer" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Ortsname" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Verpackungen" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Teil-ID" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "Teil IPN" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Beschreibung des Teils" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Seriennummer" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "Zugewiesene Menge" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Verfügbare Menge" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Nachverfolgbar" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "Vererbt" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Varianten zulassen" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Zugewiesener Bestand" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bestellt" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "Verfügbares Ersatzmaterial" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "Externes Lager" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Ausstehend" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "in Arbeit" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Storniert" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Fertig" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Bestand für Bauauftrag erforderlich" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Überfälliger Bauauftrag" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" @@ -1764,8 +1721,8 @@ msgstr "Miniaturansicht" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Barcode Aktionen" @@ -1776,7 +1733,7 @@ msgstr "Barcode Aktionen" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-Code anzeigen" @@ -1787,9 +1744,9 @@ msgstr "QR-Code anzeigen" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Barcode abhängen" @@ -1800,7 +1757,7 @@ msgstr "Barcode abhängen" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Barcode anhängen" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Bauauftrag bearbeiten" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Bauauftrag duplizieren" +msgid "Cancel Build" +msgstr "Bauauftrag abbrechen" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Bauauftrag duplizieren" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Bauauftrag abbrechen" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Bauauftrag fertigstellen" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Baubeschreibung" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Es wurden keine Endprodukte für diesen Bauauftrag erstellt" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Bauauftrag ist bereit abgeschlossen zu werden" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bauauftrag kann nicht abgeschlossen werden, da es noch ausstehende Endprodukte gibt" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Bestand wurde Bauauftrag noch nicht vollständig zugewiesen" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Zieldatum" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Bauauftrag war fällig am %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Überfällig" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Fertiggestellte Endprodukte" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Auftrag" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Aufgegeben von" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Priorität" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Bauftrags-QR-Code" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Barcode mit Bauauftrag verknüpfen" @@ -1968,8 +1911,8 @@ msgstr "Ausgangs-Lager" msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Ziel-Lager" @@ -1981,23 +1924,23 @@ msgstr "Ziel-Lagerort nicht angegeben" msgid "Allocated Parts" msgstr "Zugewiesene Teile" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Losnummer" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Erstellt" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Kein Ziel-Datum gesetzt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Fertig" @@ -2015,13 +1958,13 @@ msgstr "Fertig" msgid "Build not complete" msgstr "Bauauftrag ist nicht vollständig" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Unter-Bauaufträge" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Bestand Bauauftrag zuweisen" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Automatisch zuweisen" msgid "Manually allocate stock to build" msgstr "Lagerartikel manuell dem Bauauftrag zuweisen" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Bestand zuweisen" @@ -2072,19 +2015,15 @@ msgstr "Neues Endprodukt anlegen" msgid "New Build Output" msgstr "Neues Endprodukt" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Verbrauchte Bestände" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Fertiggestellte Endprodukte" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Anhänge" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Bauauftrags-Notizen" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Zuordnung abgeschlossen" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Alle Zeilen wurden vollständig zugewiesen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Neuer Bauauftrag" @@ -2120,57 +2059,10 @@ msgstr "Neuer Bauauftrag" msgid "Build Order Details" msgstr "Bauauftragdetails" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Positionen" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Unfertige Endprodukte" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "Link" - -#: common/api.py:701 -msgid "Is File" -msgstr "Datei" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Ungültiges Währungskürzel" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Doppeltes Währungskürzel" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Kein Plugin" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Datei" msgid "Select {name} file to upload" msgstr "{name} Datei zum Hochladen auswählen" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "Seiten-URL ist durch die Konfiguration gesperrt" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Eindeutiger Projektcode" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Keine Gruppe" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Eine leere Domain ist nicht erlaubt." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Ungültiger Domainname: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Kein Plugin" + +#: common/models.py:1259 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Firmenname" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Standardwährung" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Verfügbare Währungen" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Liste der unterstützten Währungskürzel" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Wie oft Wechselkurse aktualisiert werden sollen (auf Null zum Deaktivieren setzen)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "Tage" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Überschreiben des Benutzer-Agenten, der verwendet wird, um Bilder und Dateien von externer Servern herunterzuladen (leer für die Standardeinstellung)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Bestätigung verpflichtend" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Eine ausdrückliche Benutzerbestätigung für bestimmte Aktionen erfordern." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Baumtiefe" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard Ebene für Baumansicht. Tiefere Ebenen können bei Bedarf nachgeladen werden." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Wie oft soll nach Updates gesucht werden? (auf 0 setzen zum Deaktivieren)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "Löschen aus Baugruppe erlauben" - -#: common/models.py:1438 -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/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" -msgstr "IPN Regex" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Vorlage" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Baugruppe" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponente" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Nachverfolgbar" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Import in Ansichten anzeigen" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Importassistent in einigen Teil-Ansichten anzeigen" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Wenn Einheiten angegeben werden, müssen die Parameterwerte mit den angegebenen Einheiten übereinstimmen" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximale Anzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-Auflösung bei der Erstellung von Bilddateien für Etikettendruck-Plugins" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Testberichte aktivieren" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Testberichte anhängen" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Beim Drucken eines Testberichts dem zugehörigen Lagerbestand eine Kopie des Testberichts beifügen" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Seriennummern automatisch ausfüllen" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Seriennummern in Formularen automatisch ausfüllen" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" -msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Installierte Lagerbestandteile müssen im BOM für den übergeordneten Teil vorhanden sein" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "Lagerartikel, die nicht auf Lager sind, können zwischen Lagerstandorten übertragen werden" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" -msgstr "Verantwortlicher Besitzer erforderlich" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" msgstr "" -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 +msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "Versendete Bestellungen als abgeschlossen markieren" - -#: common/models.py:1916 -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/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Bestellung automatisch als abgeschlossen markieren, wenn der Empfang aller Artikel bestätigt wurde" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "SSO Gruppensynchronisation aktivieren" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "SSO Gruppenschlüssel" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Projektcodes aktivieren" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "Aktiviere Projektcodes für die Verfolgung von Projekten" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Inventurfunktionen" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Inventur-Funktionen zur Aufzeichnung von Lagerbeständen und zur Berechnung des Lagerwerts aktivieren" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Lagerartikeln in externen Standorten in der Berechnungen zur Bestandsaufnahme ausschließen" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Anzahl der Tage zwischen automatischen Bestandsaufnahmen (zum Deaktivieren auf Null setzen)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "Löschintervall für Berichte" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Inventurberichte werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Ausblenden inaktiver Teile in den auf der Startseite angezeigten Ergebnissen" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" -msgstr "Zeige ungültige Stücklisten" +msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "Ausstehende Versandaufträge anzeigen" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "Ausstehende Versandaufträge auf der Startseite anzeigen" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Zeige Neuigkeiten" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Neuigkeiten auf der Startseite anzeigen" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Standard-Etikettendrucker" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Einen standardmäßig ausgewählten Etikettendrucker konfigurieren" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Teile suchen" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Teile in der Suchvorschau anzeigen" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Zulieferteile durchsuchen" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Zuliefererteile in der Suchvorschau anzeigen" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Herstellerteile durchsuchen" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Herstellerteile in der Suchvorschau anzeigen" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Kategorien durchsuchen" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Teilekategorien in der Suchvorschau anzeigen" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Bestand durchsuchen" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Lagerartikel in Suchvorschau anzeigen" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Nicht verfügbare Artikel ausblenden" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nicht verfügbare Lagerartikel aus der Suchvorschau ausschließen" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Lagerorte durchsuchen" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Lagerorte in Suchvorschau anzeigen" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Firmen durchsuchen" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Firmen in der Suchvorschau anzeigen" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Bauaufträge durchsuchen" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Bauaufträge in der Suchvorschau anzeigen" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Bestellungen durchsuchen" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Bestellungen in der Suchvorschau anzeigen" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktive Bestellungen ausblenden" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktive Bestellungen in der Suchvorschau ausblenden" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Aufträge durchsuchen" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Aufträge in der Suchvorschau anzeigen" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Inaktive Aufträge ausblenden" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktive Aufträge in der Suchvorschau ausblenden" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Suche nach Rücksendungen" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "Rücksendungen in der Suchvorschau anzeigen" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "Inaktive Rücksendungen ausblenden" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "Inaktive Rücksendungen in der Suchvorschau ausblenden" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau pro Sektion angezeigt werden sollen" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Regex Suche" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "Reguläre Ausdrücke in Suchabfragen aktivieren" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "Ganzes Wort suchen" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "Suchabfragen liefern Ergebnisse für ganze Wortkombinationen" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "Position der Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Datumsformat" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Bevorzugtes Format für die Anzeige von Daten" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Teilzeitplanung" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Zeige Zeitplanung für Teile" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventur" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Zeigt Inventur-Informationen an (falls die Inventurfunktion aktiviert ist)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Zeichenkettenlänge in Tabellen" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "Maximale Länge für Zeichenketten, die in Tabellenansichten angezeigt werden" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "Standardvorlage für Teilebeschriftung" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "Die Teil-Etikettenvorlage, die automatisch ausgewählt werden soll" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Lagerartikel-Standardvorlage" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "Die Lagerartikel-Etikettenvorlage soll automatisch ausgewählt werden" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "Standardetikettenvorlage für Lagerstandort" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "Die Lagerstandort-Etikettenvorlage, die automatisch ausgewählt werden soll" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "Fehlerberichte empfangen" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "Benachrichtigungen bei Systemfehlern erhalten" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "Zuletzt verwendete Druckmaschinen" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Benutzer" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Preis" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktiv" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" -msgstr "Token" +msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" -msgstr "Host" +msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" -msgstr "Body" +msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "ID" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Link" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autor" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Gelesen" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bild" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "Symbol" +msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" -msgstr "Definition" +msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "Einheitsdefinition" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Anhang" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Fehlende Datei" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Fehlender externer Link" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Datei zum Anhängen auswählen" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Kommentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "Upload Datum" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "Datum der hochgeladenen Datei" - -#: common/models.py:3301 -msgid "File size" -msgstr "Dateigröße" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "Dateigröße in Bytes" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "Ungültiger Modelltyp für Anhang angegeben" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "{verbose_name} storniert" msgid "A order that is assigned to you was canceled" msgstr "Eine Bestellung, die Ihnen zugewiesen war, wurde storniert" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Artikel erhalten" @@ -4000,103 +3752,66 @@ msgstr "Artikel wurden aus einer Rücksendung erhalten" msgid "Error raised by plugin" msgstr "Fehler in Plugin aufgetreten" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "Funktion" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Dateiname" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "Modelltyp" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Eine leere Domain ist nicht erlaubt." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Ungültiger Domainname: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Teile importiert" msgid "Previous Step" msgstr "Vorheriger Schritt" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "Teil ist aktiv" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "Hersteller ist aktiv" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" -msgstr "Lieferantenteil ist aktiv" +msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" -msgstr "Internes Teil ist aktiv" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "Lieferant ist aktiv" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Firma" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmen" +msgstr "" -#: company/models.py:117 +#: company/api.py:325 +msgid "Supplier is Active" +msgstr "" + +#: company/models.py:114 msgid "Company description" msgstr "Firmenbeschreibung" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" -msgstr "Webseite" +msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Firmenwebsite Adresse/URL" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Kontakt-Telefon" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Kontakt-Email" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" -msgstr "Ist dieses Unternehmen aktiv?" +msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "Ist Kunde" +#: company/models.py:165 +msgid "is customer" +msgstr "ist Kunde" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "Ist Zulieferer" +#: company/models.py:171 +msgid "is supplier" +msgstr "ist Zulieferer" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "Ist Hersteller" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "ist Hersteller" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adresse" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adressen" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Firma auswählen" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "Adresstitel" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "Titel zur Beschreibung des Adresseintrages" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "Primäre Adresse" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "Als primäre Adresse festlegen" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Linie 1" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Adresszeile 1" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Linie 2" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Adresszeile 2" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postleitzahl" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Stadt/Region" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "Postleitzahl Stadt/Region" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "Staat/Provinz" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "Bundesland" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Adresse Land" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Versandnotizen" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Notizen für Versandkurier" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Interne Versandnotizen" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Versandnotizen für interne Verwendung" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Herstellerteil" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Teil auswählen" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Hersteller" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "MPN" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Hersteller-Teilenummer" -#: company/models.py:513 +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "Externe URL für das Herstellerteil" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Teilbeschreibung des Herstellers" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "Teilenummer des Herstellers" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Herstellerteil" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Parametername" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Wert" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Parameterwert" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Einheiten" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Parametereinheit" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Zuliefererteil" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "Packeinheiten müssen mit den Basisteileinheiten kompatibel sein" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "Packeinheiten müssen größer als Null sein" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" -msgstr "Ist dieser Lieferantenteil aktiv?" +msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Herstellerteil auswählen" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Notiz" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Verpackungen" + +#: company/models.py:864 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Packmenge" -#: company/models.py:860 +#: company/models.py:871 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:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "Vielfache" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Mehrere bestellen" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Verfügbare Menge von Lieferanten" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Verfügbarkeit aktualisiert" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "Firmenname" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "Auf Lager" @@ -4571,8 +4257,8 @@ msgstr "Auf Lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktiv" @@ -4607,11 +4293,11 @@ msgstr "Firma löschen" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Artikelbild" @@ -4630,17 +4316,17 @@ msgstr "Bild von URL herunterladen" msgid "Delete image" msgstr "Bild löschen" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Kunde" @@ -4648,12 +4334,19 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "verwendet Standard-Währung" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adresse" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "Bild entfernen" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "Verknüpftes Bild von dieser Firma entfernen" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Entfernen" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "Bild hochladen" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "Bild herunterladen" @@ -4690,7 +4383,7 @@ msgstr "Neues Zuliefererteil anlegen" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Neues Zuliefererteil" @@ -4703,7 +4396,7 @@ msgstr "Herstellerteile" msgid "Create new manufacturer part" msgstr "Neues Herstellerteil anlegen" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Neues Herstellerteil" @@ -4717,7 +4410,7 @@ msgstr "Zulieferer-Bestand" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Neue Bestellung" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Hersteller" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Teil bestellen" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Herstellerteil löschen" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Internes Teil" @@ -4838,7 +4530,7 @@ msgstr "Keine Herstellerdaten verfügbar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Zulieferer" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parameter" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Neuer Parameter" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "Parameter hinzufügen" @@ -4887,6 +4575,19 @@ msgstr "Zugewiesene Lagerartikel" msgid "Contacts" msgstr "Kontakte" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adressen" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Zuliefererteil" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "Zulieferer-Teil Aktionen" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Teil bestellen" @@ -4928,12 +4629,12 @@ msgstr "Zuliefererteil entfernen" msgid "No supplier information available" msgstr "Keine Lieferanteninformationen verfügbar" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "Lieferanten-Teilenummer" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Zulieferer-Bestand" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Neuen Lagerartikel hinzufügen" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Neuer Lagerartikel" @@ -4966,33 +4667,29 @@ msgstr "Preisinformationen ansehen" msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "Zulieferteil QR-Code" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "Barcode mit Zulieferteil verknüpfen" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "Verfügbarkeit der Teile aktualisieren" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Lagerartikel" @@ -5018,236 +4715,134 @@ msgstr "Kunden" msgid "New Customer" msgstr "Neuer Kunde" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmen" + #: company/views.py:52 msgid "New Company" msgstr "Neue Firma" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Platziert" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "Ungültiges Exportformat" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "Zeitstempel" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "Zu importierende Datei" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Spalten" - -#: importer/models.py:84 -msgid "Import status" -msgstr "Importstatus" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "Standardwerte" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Wert" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "Fehler" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Gültig" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "Dateiformat nicht unterstützt" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "Fehler beim Öffnen der Datei" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "Ungültige Dateigröße" +#: label/api.py:247 +msgid "Error printing label" +msgstr "Fehler beim Drucken des Labels" -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Label Name" -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Label Beschreibung" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "Zeilen" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "Liste der zu akzeptierenden Zeilen IDs" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "Keine Zeilen ausgewählt" +#: label/models.py:137 +msgid "Label template file" +msgstr "Label-Vorlage-Datei" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktiviert" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Label-Vorlage ist aktiviert" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Breite [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Label-Breite in mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Höhe [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Label-Höhe in mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Dateinamen-Muster" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Muster für die Erstellung von Label-Dateinamen" -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filter" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-Code" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-Code" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "Kopien" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "Anzahl der zu druckenden Kopien für jedes Label" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Unbekannt" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "Drucken" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "Keine Medien" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "Verbindung getrennt" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "Etikettendrucker" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "Drucken Sie Etiketten direkt für verschiedene Artikel." -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "Druckerstandort" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "Den Drucker an einen bestimmten Ort aufstellen" @@ -5287,6 +4882,10 @@ msgstr "Keine Fehler" msgid "Initialized" msgstr "Initialisiert" +#: machine/models.py:110 +msgid "Errors" +msgstr "Fehler" + #: machine/models.py:117 msgid "Machine status" msgstr "Status der Maschine" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "Konfigurationstyp" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Gesamtpreis" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Bestellstatus" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Bestellreferenz" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "Ausstehend" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "Hat Preise" +msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Keine passende Bestellung gefunden" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Bestellung" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" -msgstr "Bestellung abgeschlossen" +msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" -msgstr "Bestellung ausstehend" +msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Rücksendeauftrag" @@ -5399,616 +4980,512 @@ msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwende msgid "Contact does not match selected company" msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "Erstellt von" -#: order/models.py:332 +#: order/models.py:321 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:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "Ansprechpartner für diesen Auftrag" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "Empfangen von" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "Bestellung ist bereits abgeschlossen" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "Auftrag kann nicht abgeschlossen werden, da keine Teile zugewiesen wurden" -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "Bestellung ist bereits storniert" - -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1393 +#: order/models.py:1296 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:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Kontext" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "gelöscht" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Empfangen" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Wo möchte der Käufer diesen Artikel gelagert haben?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Ein virtuelles Teil kann nicht einem Auftrag zugeordnet werden" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Versendet" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Sendung" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Position" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Position" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "Nur serialisierte Artikel können einer Rücksendung zugeordnet werden" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "Das Datum des Empfangs dieses Rücksendeartikels" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:2418 +#: order/models.py:2242 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:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "Abgeschlossene Positionen" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Lieferant" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:547 +#: order/serializers.py:477 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:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Interne Teilenummer" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Position" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "Barcode" +msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:1790 +#: order/serializers.py:1684 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:1873 +#: order/serializers.py:1762 msgid "Line price currency" -msgstr "Verkaufspreis-Währung" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Verloren" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Zurückgegeben" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "In Bearbeitung" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Zurück" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Reparatur" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Ersetzen" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Rückerstattung" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Ablehnen" +msgstr "Verkaufspreis-Währung" #: order/tasks.py:25 msgid "Overdue Purchase Order" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Auftrag bearbeiten" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Bestellung duplizieren" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Bestellung duplizieren" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "Bestellung aufgeben" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Auftrag fertigstellen" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "Vorschaubild des Lieferanten" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Bestellreferenz" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Bestellungsbeschreibung" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Keine Lieferanteninformationen verfügbar" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Abgeschlossene Positionen" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Unvollständig" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Gesamtsumme" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Gesamtkosten konnten nicht berechnet werden" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "Bestellung QR-Code" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "Barcode mit Bestellung verknüpfen" @@ -6184,13 +5661,13 @@ msgstr "Auswahl duplizieren" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Zeile entfernen" @@ -6231,6 +5708,15 @@ msgstr "Bestellung ist bereits verarbeitet. Dateien können nicht hochgeladen we msgid "Step %(step)s of %(count)s" msgstr "Schritt %(step)s von %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Positionen" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Empfangene Lagerartikel" @@ -6243,7 +5729,7 @@ msgstr "Bestellungs-Positionen" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Position hinzufügen" @@ -6291,31 +5777,31 @@ msgstr "Rücksendebericht drucken" msgid "Print packing list" msgstr "Paketliste drucken" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Kundenreferenz" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Gesamtkosten" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "QR-Code Bestellung zurückgeben" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "Barcode mit Rücksendung verknüpfen" @@ -6327,36 +5813,31 @@ msgstr "Bestelldetails" msgid "Print sales order report" msgstr "Auftragsbericht drucken" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Versandartikel" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "Als verschickt markieren" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Auftrag abschließen" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "Auftrag QR-Code" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "Barcode mit Verkaufsauftrag verknüpfen" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Ausstehende Sendungen" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Aktionen" @@ -6401,21 +5881,35 @@ msgstr "Stückpreis für {part} auf {price} aktualisiert" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} Stückpreis auf {price} und Menge auf {qty} aktualisiert" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Teil-ID" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Name des Teils" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Beschreibung des Teils" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Version" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Schlüsselwörter" @@ -6423,16 +5917,15 @@ msgstr "Schlüsselwörter" msgid "Part Image" msgstr "Artikelbild" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "Kategorie-ID" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Kategoriename" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "Standard-Standortnummer" @@ -6440,11 +5933,11 @@ msgstr "Standard-Standortnummer" msgid "Default Supplier ID" msgstr "Standard-Lieferantennummer" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante von" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -6452,187 +5945,165 @@ msgstr "Minimaler Bestand" msgid "Used In" msgstr "Benutzt in" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "Im Bau" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Eltern ID" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Name des übergeordneten Teils" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Teile" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "Stücklistenebene" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "Stücklisten-Position ID" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "Übergeordnete IPN" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "Teil IPN" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "Markiert" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "Nach markierten Kategorien filtern" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "Ebenen" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "Filter nach Kategorietiefe" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "Oberste Ebene" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" +msgstr "Mehrstufig" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "Übergeordnetes" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "Nach übergeordneter Kategorie filtern" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "Baum ausschließen" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Eingehende Bestellung" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Ausgehender Auftrag" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Lagerartikel produziert von Bauauftrag" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Lagerartikel für Bauauftrag benötigt" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Gültig" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Diese Option muss ausgewählt werden" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategorie" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "Verwendet" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Gesamtbestand" @@ -6641,1148 +6112,1024 @@ msgstr "Gesamtbestand" msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Standard Stichwörter" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Symbol" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Symbol (optional)" -#: part/models.py:178 +#: part/models.py:148 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:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -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:527 -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:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Ungültige Auswahl für übergeordnetes Teil" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, 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:632 +#: part/models.py:551 #, 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:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Interne Teilenummer" + +#: part/models.py:912 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Datum" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Zusätzliche Notizen" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "Benutzer, der diese Inventur durchgeführt hat" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Bericht" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "Inventur-Berichtsdatei (intern generiert)" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Anzahl der Teile" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "Anzahl der Teile, die von der Inventur abgedeckt werden" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "Benutzer, der diesen Inventurbericht angefordert hat" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 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:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "Auswahl muss einzigartig sein" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:3586 +#: part/models.py:3457 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:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Aktiviert" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Benötigt" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3635 +#: part/models.py:3506 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:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3642 +#: part/models.py:3513 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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Auswahlmöglichkeiten" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "Auswahl muss einzigartig sein" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" -msgstr "Checkbox" +msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: part/models.py:3793 +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "Auswahlmöglichkeiten" + +#: part/models.py:3645 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Wert" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "Teilnummer oder Teilname" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Eindeutige Teil-ID" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "IPN-Wert des Teils" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Stufe" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "Stücklistenebene" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4266 +#: part/models.py:4048 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:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Überschuss" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "überprüft" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4308 +#: part/models.py:4090 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:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Varianten zulassen" + +#: part/models.py:4096 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:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4637 +#: part/models.py:4419 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:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "Übergeordnete Kategorie" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "Übergeordnete Teilkategorie" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "Anzahl der Teile, die diese Vorlage verwenden" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Keine Teile ausgewählt" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Kategorie auswählen" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:514 +#: part/serializers.py:480 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:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" +#: part/serializers.py:823 +msgid "External Stock" +msgstr "Externes Lager" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Inventurbericht auf ein bestimmtes Teil und alle Variantenteile beschränken" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Inventurbericht auf eine bestimmte Teilekategorie und alle untergeordneten Kategorien beschränken" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Inventurbericht auf einen bestimmten Lagerort und alle untergeordneten Lagerorte beschränken" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "Externen Bestand ausschließen" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "Lagerartikel an externen Orten ausschließen" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Bericht generieren" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Teile aktualisieren" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "Inventur-Funktionalität ist nicht aktiviert" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, 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:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Herstellbar" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Bestehende Stückliste löschen" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "Bestehende Stücklisten-Positionen vor dem Importieren entfernen" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "Keine Teilspalte angegeben" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "Mehrere übereinstimmende Teile gefunden" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Keine passenden Teile gefunden" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "Teil ist nicht als Komponente angelegt" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Menge nicht angegeben" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "Mindestens eine Stückliste-Position ist erforderlich" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Gesamtstückzahl" @@ -7828,65 +7175,65 @@ msgstr "Die Stückliste wurde zuletzt von %(checker)s am %(check_date)s kontroll msgid "This BOM has not been validated." msgstr "Die Stückliste wurde noch nicht kontrolliert." -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Inventur für diese Teilekategorie durchführen" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Sie haben Benachrichtigungen für diese Kategorie abonniert" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Benachrichtigungen für diese Kategorie abonnieren" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Kategorieaktionen" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Oberste Teil-Kategorie" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Teile (inklusive Unter-Kategorien)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Neues Teil anlegen" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Neues Teil" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Teilparameter" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Teil-Kategorie anlegen" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Neue Kategorie" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "Inventurinformationen hinzufügen" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Inventur" @@ -7946,105 +7293,101 @@ msgstr "Teil Test-Vorlagen" msgid "Add Test Template" msgstr "Test Vorlage hinzufügen" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Verkaufsauftragszuweisungen" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Teile-Notizen" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Teil Varianten" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Neue Variante anlegen" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "neue Variante anlegen" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Verknüpfte Teile" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Stückliste" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Export-Aktionen" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Stückliste exportieren" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Stücklisten-Bericht drucken" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "Stücklisten-Aktionen" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Stückliste hochladen" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Stückliste überprüfen" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Baugruppen" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Gefertigte Teile" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Bauauftragszuweisungen" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "Verknüpftes Teil" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" @@ -8079,13 +7422,13 @@ msgstr "Teile-Importvorlage herunterladen" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" -msgstr "Format" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Dateiformat auswählen" @@ -8103,7 +7446,7 @@ msgstr "Benachrichtigungen für dieses Teil abonnieren" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Label drucken" @@ -8113,7 +7456,7 @@ msgstr "Kosteninformationen ansehen" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Bestands-Aktionen" @@ -8125,7 +7468,7 @@ msgstr "Bestand zählen" msgid "Transfer part stock" msgstr "Teilbestand verschieben" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Teile Aktionen" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Teil ist virtuell (kein physisches Teil)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Teildetails anzeigen" @@ -8188,47 +7531,51 @@ msgstr "Zu Bauaufträgen zugeordnet" msgid "Allocated to Sales Orders" msgstr "Zur Bestellung zugeordnet" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Herstellbar" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Minimaler Bestand" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Preisspanne" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "letzte Seriennummer" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Nach Seriennummer suchen" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "QR-Code Teil" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "Barcode mit Teil verknüpfen" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "Berechnen" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "Verknüpftes Bild von diesem Teil entfernen" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "Keine passenden Bilder gefunden" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "Teildetails ausblenden" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Varianten" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Bestand" @@ -8324,17 +7671,17 @@ msgstr "Artikelpreise überschreiben" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Bearbeiten" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -8344,11 +7691,11 @@ msgstr "Preiskategorie" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "Minimum" +msgstr "" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "Maximum" +msgstr "" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "Preise aktualisieren" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Kein Bestand" @@ -8486,7 +7833,7 @@ msgstr "Teilbild nicht gefunden" msgid "Part Pricing" msgstr "Teilbepreisung" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "Das Plugin kann nicht gelöscht werden, da es derzeit aktiv ist" @@ -8498,108 +7845,100 @@ msgstr "Keine Aktion angegeben" msgid "No matching action found" msgstr "Keine passende Aktion gefunden" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "Barcode entspricht einem bereits vorhandenen Artikel" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "Keine passenden Teiledaten gefunden" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "Keine passenden Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "Mehrere passende Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "Zulieferteil zugeordnet" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "Artikel wurde bereits erhalten" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "Keine Übereinstimmung für Zulieferbarcode" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "Mehrere passende Elemente gefunden" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "Kein passendes Element gefunden" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "Barcode stimmt nicht mit einem vorhandenen Lagerartikel überein" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "Lagerartikel stimmt nicht mit dem Element überein" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "Lagerartikel der Bestellung zugeordnet" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "Nicht genügend Informationen" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "Mehrere passende Lieferantenteile für Barcode gefunden" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Mehrere Einkaufsaufträge gefunden mit '{order}'" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Keine passende Bestellung für '{order}'" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "Bestellung entspricht nicht dem Lieferanten" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "Ausstehender Artikel für Lieferantenteil konnte nicht gefunden werden" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "Weitere Informationen zum Empfang des Zeilenelements erforderlich" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "Erhaltene Bestellartikel" @@ -8607,90 +7946,82 @@ msgstr "Erhaltene Bestellartikel" msgid "Scanned barcode data" msgstr "Gescannte Barcode Daten" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "Ordne Artikel Bestellung zu" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "Bestellung ist nicht ausstehend" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "Ordne erhaltene Artikel Bestellung zu" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "Bestellung wurde nicht aufgegeben" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "Ort für den Empfang von Artikeln" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "Kann keinen strukturellen Standort auswählen" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "Kundenauftrag zum Zuordnen von Artikeln zu" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "Bestellung ist nicht ausstehend" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "Artikel der Verkaufsbestellung zuweisen" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "Sendung des Verkaufsauftrags zur Zuweisung von Artikeln gegen" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "Sendung wurde bereits geliefert" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "Zugewiesene Menge" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "Labeldruck fehlgeschlagen" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "Fehler beim Rendern des Etikett als PDF" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "Fehler beim Rendern des Etikett als HTML" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "Keine Elemente zum Drucken übergeben" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" +msgstr "Fehler beim Rendern des Etikett als PNG" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" -msgstr "InvenTree Barcodes" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "Bietet native Unterstützung für Barcodes" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "Bietet native Unterstützung für Barcodes" msgid "InvenTree contributors" msgstr "InvenTree Mitwirkende" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree Benachrichtigungen" @@ -8768,21 +8075,19 @@ msgstr "InvenTree Währungsumstellung" msgid "Default currency exchange integration" msgstr "Standard-Wechselkursintegration" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF-Etikettendrucker" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "Bietet native Unterstützung für das Drucken von PDF-Etiketten" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "Debug-Modus" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug-Modus aktivieren - gibt Roh-HTML statt PDF zurück" @@ -8794,11 +8099,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:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "Zuletzt benutzt" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "Optionen" @@ -8822,7 +8127,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Einen Rahmen um jedes Label drucken" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "Querformat" @@ -8838,11 +8143,11 @@ msgstr "InvenTree Etikettendrucker" msgid "Arrays multiple labels onto a single sheet" msgstr "Anordnen mehrerer Etiketten auf einem einzigen Blatt" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "Label ist zu groß für Seitengröße" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "Es wurden keine Etiketten generiert" @@ -8935,62 +8240,61 @@ msgstr "Plugin kann nicht deinstalliert werden, da es momentan aktiv ist" msgid "Uninstalled plugin successfully" msgstr "Plugin erfolgreich deinstallieren" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Plugin-Konfiguration" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Plugin-Konfigurationen" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Schlüssel" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Schlüssel des Plugins" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "Name des Plugins" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Paket-Name" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "Name des installierten Paketes, wenn das Plugin über PIP installiert wurde" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Ist das Plugin aktiv" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installiert" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Beispiel-Plugin" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Integriertes Plugin" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "Paket-Plugin" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "Plugin" +msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Methode" @@ -8998,17 +8302,17 @@ msgstr "Methode" msgid "No author found" msgstr "Kein Autor gefunden" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin benötigt mindestens Version {v}" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin benötigt maximal Version {v}" @@ -9069,7 +8373,7 @@ msgstr "Name für das Plugin-Paket - kann auch einen Versionstext enthalten" #: templates/InvenTree/settings/plugin_settings.html:42 #: templates/js/translated/plugin.js:86 msgid "Version" -msgstr "Version" +msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." @@ -9091,1194 +8395,909 @@ msgstr "Installation nicht bestätigt" msgid "Either packagename of URL must be provided" msgstr "Entweder Paketname oder URL muss angegeben werden" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Komplett neu laden" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "Führe ein vollständiges Nachladen der Plugin-Registrierung durch" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Neuladen erzwingen" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Erzwinge ein erneutes Laden der Plugin-Registrierung, auch wenn sie bereits geladen ist" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "Plugins sammeln" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "Plugins sammeln und zur Registrierung hinzufügen" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Plugin aktivieren" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "Dieses Plugin aktivieren" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "Konfiguration löschen" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "Plugin-Konfiguration aus der Datenbank löschen" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Keine korrekten Objekte für Vorlage gegeben" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "Teile" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "Plugin nicht gefunden" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "Plugin ist nicht aktiv" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "Fehler beim Drucken des Labels" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Vorlagendatei '{template}' fehlt oder existiert nicht" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Testbericht" + +#: report/helpers.py:15 msgid "A4" -msgstr "A4" +msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" -msgstr "A3" +msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "US-Legal" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "US-Letter" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Vorlagen Name" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Dateinamen-Muster" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Filter" +#: report/models.py:183 +msgid "Report template file" +msgstr "Bericht-Vorlage Datei" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Bericht-Vorlage Beschreibung" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Bericht Revisionsnummer (autom. erhöht)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "Seitengröße für PDF-Berichte" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "Bericht in Querformat anzeigen" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Breite [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Muster für die Erstellung von Berichtsdateinamen" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Label-Breite in mm" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Bericht-Vorlage ist ein" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Höhe [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Lagerartikel-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Label-Höhe in mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "einfügen Installiert in Tests" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Test-Ergebnisse für Lagerartikel in Baugruppen einschließen" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Bauauftrag Filter" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "Fortschritt" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Bau-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Teil Filter" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "Teile-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "Ausgabedatei" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Bestellungs-Abfragefilter" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Auftrags-Abfragefilter" -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" +#: report/models.py:569 +msgid "Return order query filters" +msgstr "Rückgabe von Auftragsabfragefiltern" -#: report/models.py:479 -msgid "Label Template" -msgstr "" +#: report/models.py:641 +msgid "Snippet file with this name already exists" +msgstr "Snippet-Datei mit diesem Namen existiert bereits" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" -msgstr "Schnipsel" +msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "Eine Datei mit diesem Namen existiert bereits" + +#: report/models.py:722 msgid "Asset" msgstr "Ressource" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "Ressource-Beschreibung" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "Etiketten-Vorlage auswählen" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-Code" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-Code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "Filter für standortbezogene Abfragen (kommaseparierte Liste von Schlüssel=Wert-Paaren)" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Benötigte Materialien" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "benötigt für" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Lieferant gelöscht" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Stück-Preis" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "Zusätzliche Positionen" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Summe" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Seriennummer" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "Lagerstandorte" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Testergebnisse" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" -msgstr "Test" +msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Ergebnis" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "bestanden" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "fehlgeschlagen" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "Kein Ergebnis (erforderlich)" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Kein Ergebnis" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Verbaute Objekte" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seriennummer" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "Die Bestandsdatei ist nicht vorhanden" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "Bilddatei nicht gefunden" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "part_image tag benötigt eine Bauteilinstanz" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "company_image tag erfordert eine Firmeninstanz" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "Standort-ID" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Ortsname" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Lagerortpfad" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "Lagerartikel ID" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Statuscode" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "Zuliefererteil-ID" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "Zulieferer ID" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Lieferant" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "Kunden ID" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "verbaut in" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "Bauauftrag-ID" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "Auftrags-ID" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "Bestellungs-ID" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Überprüfung erforderlich" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "Löschen wenn leer" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "Filtern nach Standorttiefe" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "Übergeordneter Ort" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "überfällig" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "Lagerstandort Typ" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "Lagerstandorte Typen" -#: stock/models.py:91 +#: stock/models.py:90 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:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:189 +#: stock/models.py:167 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:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Extern" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "Dies ist ein externer Lagerort" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Standorttyp" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "Standortart dieses Standortes" -#: stock/models.py:279 +#: stock/models.py:254 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:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:708 +#: stock/models.py:670 #, 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:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:748 +#: stock/models.py:712 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:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:921 +#: stock/models.py:885 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:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1525 +#: stock/models.py:1479 #, 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:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "Teststation" -#: stock/models.py:2572 +#: stock/models.py:2458 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:2578 +#: stock/models.py:2464 msgid "Started" msgstr "Gestartet" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "Vorlagen-ID oder Testname muss angegeben werden" -#: stock/serializers.py:286 +#: stock/serializers.py:151 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:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "Seriennummer ist zu lang" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Elternposition" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 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:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "abgelaufen" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Untergeordnete Objekte" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, 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:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 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:930 +#: stock/serializers.py:703 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:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "Ziel Lagerort für zurückgegebene Artikel" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "Übergeordneter Lagerort" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1551 +#: stock/serializers.py:1322 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1570 +#: stock/serializers.py:1341 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1598 +#: stock/serializers.py:1369 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "erfordert Eingriff" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Beschädigt" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Zerstört" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Zurückgewiesen" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "In Quarantäne" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Alter Bestand-Verfolgungs-Eintrag" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Lagerartikel erstellt" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Lagerartikel bearbeitet" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Seriennummer hinzugefügt" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Bestand gezählt" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Bestand manuell hinzugefügt" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Bestand manuell entfernt" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Standort geändert" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Lagerbestand aktualisiert" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "In Baugruppe installiert" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Aus Baugruppe entfernt" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Komponente installiert" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Komponente entfernt" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Vom übergeordneten Element geteilt" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Unterobjekt geteilt" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Lagerartikel zusammengeführt" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "In Variante umgewandelt" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Endprodukt erstellt" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Endprodukt fertiggestellt" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Endprodukt abgelehnt" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Durch Bauauftrag verbraucht" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Versandt gegen Verkaufsauftrag" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Gegen Bestellung empfangen" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Zurückgeschickt gegen Rücksendeauftrag" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Zum Kunden geschickt" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Rücksendung vom Kunden" - #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Informationen zur Bestand-Verfolgung" @@ -10300,7 +9319,7 @@ msgstr "Testdaten" msgid "Test Report" msgstr "Test-Bericht" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Testdaten löschen" @@ -10316,15 +9335,15 @@ msgstr "Lagerartikel-Notizen" msgid "Installed Stock Items" msgstr "Installierte Lagerartikel" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Lagerartikel installieren" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Alle Testergebnisse für diesen Lagerartikel löschen" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "Testergebnis hinzufügen" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "zu Lagerort einscannen" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Druck Aktionen" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "Bestands-Anpassungs Aktionen" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Bestand zählen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Bestand hinzufügen" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Bestand entfernen" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Bestand serialisieren" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Bestand verschieben" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "Kunden zuweisen" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "Lagerartikel löschen" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Bauauftrag" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Elternposition" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Kein Hersteller ausgewählt" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Sie gehören nicht zu den Eigentümern dieses Objekts und können es nicht ändern." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Nur Leserechte" @@ -10469,14 +9492,18 @@ msgstr "nächste Seite" msgid "Navigate to next serial number" msgstr "Zur nächsten Seriennummer wechseln" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Verfügbare Menge" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Kein Lagerort gesetzt" #: stock/templates/stock/item_base.html:413 msgid "Tests" -msgstr "Tests" +msgstr "" #: stock/templates/stock/item_base.html:419 msgid "This stock item has not passed all required tests" @@ -10487,6 +9514,11 @@ msgstr "Dieser Lagerartikel hat nicht alle Tests bestanden" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Dieser Lagerartikel lief am %(item.expiry_date)s ab" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "abgelaufen" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "Dieser Lagerartikel läuft am %(item.expiry_date)s ab" msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "Lagerartikel" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "Lagerstatus bearbeiten" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "Lagerartikel QR-Code" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "Barcode mit Lagerartikel verknüpfen" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "Wählen Sie eine der unten aufgeführten Teilvarianten aus." -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Warnung" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "Lagerartikel umwandeln" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "Zurück ins Lager" @@ -10541,84 +9573,80 @@ msgstr "Teile mit Seriennummern mit diesem BestandObjekt anlegen." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Zu serialisierende Anzahl und eindeutige Seriennummern angeben." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "Inventur für diesen Lagerort durchführen" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "Lagerort lokalisieren" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Lagerartikel per Barcode-Scan zu diesem Lagerort hinzufügen" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Lagerartikel einscannen" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "Lagerort hierher einscannen" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "Lagerort scannen" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "Standortbericht drucken" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Lagerort-Aktionen" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Lagerort bearbeiten" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Lagerort löschen" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Oberster Lagerstandort" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Standortbesitzer" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Sie sind nicht auf der Liste der Besitzer dieses Lagerorts. Der Bestands-Lagerort kann nicht verändert werden." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "Lagerort Typ" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Neuer Lagerort" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "Lagerort" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "Lagerbehälter an diesen Ort eingescannt" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "Lagerort QR-Code" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "Barcode mit Lagerort verknüpfen" @@ -10634,6 +9662,10 @@ msgstr "Lagerartikel-Verfolgung" msgid "Allocations" msgstr "Zuweisungen" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Untergeordnete Objekte" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Zugriff verweigert" @@ -10686,7 +9718,7 @@ msgstr "Die Seite ist derzeit in Wartung und sollte bald wieder verfügbar sein! #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "Index" +msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" @@ -10840,14 +9872,14 @@ msgstr "Anmeldeeinstellungen" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Ausgehende E-Mails wurde nicht konfiguriert. Einige Anmelde- und Anmeldefunktionen funktionieren möglicherweise nicht korrekt!" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Anmelden" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" -msgstr "Single Sign On" +msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 @@ -10856,7 +9888,7 @@ msgstr "Einstellungen" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "URLs" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format @@ -10865,7 +9897,7 @@ msgstr "Die Basis-URL für dieses Plugin ist unknown on unknown" msgstr "unbekannt auf unbekanntem" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "unbekannt" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP Adresse" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Gerät" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Letzte Aktivität" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s vor (diese Sitzung)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s vor" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "Möchten Sie die ausgewählte E-Mail-Adresse wirklich entfernen?" @@ -11461,7 +10505,7 @@ msgstr "Sucheinstellungen" #: templates/InvenTree/settings/user_sso.html:9 msgid "Single Sign On Accounts" -msgstr "Single Sign On Konten" +msgstr "" #: templates/InvenTree/settings/user_sso.html:16 msgid "You can sign in to your account using any of the following third party accounts:" @@ -11525,14 +10569,14 @@ msgstr "Danksagung" #: templates/about.html:79 msgid "Mobile App" -msgstr "Mobile App" +msgstr "" #: templates/about.html:84 msgid "Submit Bug Report" msgstr "Fehlerbericht senden" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "In die Zwischenablage kopieren" @@ -11554,7 +10598,7 @@ msgstr "E-Mail-Adresse bestätigen" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Bitte bestätigen Sie, dass %(email)s eine E-Mail-Adresse für den Benutzer %(user_display)s ist." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Bestätigen" @@ -11563,26 +10607,26 @@ msgstr "Bestätigen" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Dieser E-Mail Bestätigungslink ist abgelaufen oder ungültig. Bitte fordern Sie eine neue E-Mail Bestätigung an." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Einloggen" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Kein Mitglied?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Anmelden" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Passwort vergessen?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "oder melden Sie sich mit" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Möchten Sie sich wirklich abmelden?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Zurück zur Seite" @@ -11710,19 +10754,15 @@ msgstr "Schritt 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Scannen Sie den QR-Code unten mit einem Token-Generator Ihrer Wahl (z.B. Google Authenticator)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Schritt 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Geben Sie das von der App generierte Token ein:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Überprüfen" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "Bei den folgenden Teilen gibt es wenige Lagerartikel" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "Klicken Sie auf den folgenden Link, um diesen Teil anzuzeigen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Mindestmenge" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "Keine Antwort" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "Keine Antwort vom InvenTree Server" @@ -11821,27 +10861,27 @@ msgstr "Fehler 400: Ungültige Anforderung" msgid "API request returned error code 400" msgstr "API Anfrage hat Fehler 400 zurückgegeben" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "Fehler 401: Nicht authentifiziert" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "Anmeldeinformationen nicht angegeben" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "Fehler 403: Zugriff verweigert" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "Sie haben nicht die erforderliche Berechtigung auf diesen Inhalt zuzugreifen" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "Fehler 404: Ressource nicht gefunden" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "Die angefragte Ressource konnte auf dem Server nicht gefunden werden" @@ -11853,11 +10893,11 @@ msgstr "Fehler 405: Methode nicht erlaubt" msgid "HTTP method not allowed at URL" msgstr "HTTP Methode für diese URL nicht erlaubt" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "Fehler 408: Zeitüberschreitung" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "Zeitüberschreitung beim Abfragen der Daten vom Server" @@ -11889,27 +10929,27 @@ msgstr "Anhang löschen" msgid "Delete attachments" msgstr "Anhänge löschen" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "Anhang-Aktionen" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "Keine Anhänge gefunden" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "Anhänge bearbeiten" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "Datum hochgeladen" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "Anhang bearbeiten" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "Anhang löschen" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "Unbekannte Serverantwort" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "Ungültige Serverantwort" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "Barcode Daten scannen" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Barcode scannen" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "Keine URL in der Antwort" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "Dadurch wird der Link zu dem zugehörigen Barcode entfernt" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "Verknüpfung aufheben" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "Lagerartikel entfernen" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "Artikel per Barcode-Scan zu Lagerort hinzufügen" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "Barcode des Lagerartikels scannen um ihn an diesen Ort hinzuzufügen" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "Einbuchen" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "Kein Barcode vorhanden" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "Lagerartikel bereits gescannt" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "Lagerartikel bereits an diesem Standort vorhanden" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "Lagerartikel hinzugefügt" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "Barcode entspricht keinem Lagerartikel" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "Lagerbehälter an diesen Ort einscannen" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "Barcode des Lagerbehälters scannen um ihn an diesen Ort hinzuzufügen" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "Barcode entspricht keinem gültigen Lagerort" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "Zu Lagerort hinzufügen" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "Barcode entspricht keinem Lagerort" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "Zeilendaten" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "Stückliste für Bauteile laden" msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "Alternatives Lager erlaubt" @@ -12176,30 +11216,30 @@ msgstr "Stücklistenpreise sind vollständig" msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "Externes Lager" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "Alternatives Lager und Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "Alternatives Lager einschließen" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Verbrauchsartikel" @@ -12231,7 +11271,7 @@ msgstr "Stückliste anzeigen" msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Benötigtes Teil" @@ -12239,120 +11279,120 @@ msgstr "Benötigtes Teil" msgid "Inherited from parent BOM" msgstr "Von übergeordneter Stückliste geerbt" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "Bauauftrag bearbeiten" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "Bauauftrag erstellen" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "Bauauftrag abbrechen" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "Sind Sie sicher, dass sie diesen Bauauftrag abbrechen möchten?" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "Lagerartikel wurden zu diesem Bauauftrag hinzugefügt" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "Es sind noch unvollständige Artikel für diesen Bauauftrag vorhanden" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "Bauauftrag ist bereit abgeschlossen zu werden" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "Dieser Bauauftrag kann nicht abgeschlossen werden, da es unfertige Endprodukte gibt" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "Bauauftrag ist unvollständig" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "Bauauftrag fertigstellen" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "Nächste verfügbare Seriennummer" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "Letzte Seriennummer" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "Die Stückliste enthält verfolgbare Teile" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "Endprodukte müssen individuell angelegt werden" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "Nachverfolgbare Teile können Seriennummern haben" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Seriennummern für mehrere einzelne Endprodukte angeben" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "Endprodukt anlegen" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "Lagerartikel zu diesem Endprodukt zuweisen" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "Bestand von Endprodukt entfernen" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "Endprodukt fertigstellen" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "Ausschuss Endprodukt" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "Endprodukt entfernen" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Sind Sie sicher, dass sie alle Lagerartikel von diesem Bauauftrag entfernen möchten?" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "Lagerartikel entfernen" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "Endprodukte auswählen" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "Mindestens ein Endprodukt muss ausgewählt werden" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "Ausgewählte Endprodukte werden als vollständig markiert" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "Endprodukt" @@ -12376,263 +11416,231 @@ msgstr "Zugewiesene Lagerbestände werden nicht mehr verfügbar sein" msgid "The completion status of the build order will not be adjusted" msgstr "Der Fertigstellungsstatus des Bauauftrags wird nicht angepasst" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "Ausschuss Endprodukte" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "Ausgewählte Endprodukte werden gelöscht" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "Endprodukte werden dauerhaft gelöscht" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "Zugewiesene Lagerartikel werden in den Bestand zurückgeführt" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "Endprodukte entfernen" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 +#: templates/js/translated/build.js:960 msgid "No build order allocations found" msgstr "Keine Allokationen für Bauauftrag gefunden" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" +msgstr "Zugewiesene Menge" + +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "Standort nicht angegeben" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "Endprodukte fertigstellen" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "Ausschuss" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "Endprodukte löschen" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "Endprodukt" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "Endprodukte" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "Endprodukt-Aktionen" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "Zugewiesene Positionen" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "Erforderliche Prüfungen" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "Sie müssen mindestens einen Teil für die Zuweisung auswählen" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "Alle Teile zugeordnet" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "Wählen Sie den Quellort aus (leer lassen, um von allen Standorten zu nehmen)" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "Keine passenden Lagerartikel" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "Automatische Lagerzuordnung" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Lagerartikel werden automatisch diesem Bauauftrag zugewiesen, entsprechend den angegebenen Richtlinien" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Wenn ein Lagerort angegeben ist, wird der Lagerbestand nur von diesem Ort zugewiesen" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Wenn der Lagerbestand als austauschbar gilt, wird er vom ersten Standort zugewiesen, an dem er gefunden wird" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Wenn ein Ersatzlager zugelassen ist, wird dieses verwendet, wenn das Primärteil nicht vorrätig ist" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "Lagerartikel zuordnen" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "Keine Bauaufträge zur Suchanfrage" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "Fortschritt" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "Bauauftragsposition" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "Bauauftragspositionen" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "Keine Bauauftragspositionen gefunden" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "Menge" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "Ausreichender Bestand vorhanden" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Verbrauchsartikel" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Verfolgtes Objekt" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "Zuweisung von nachverfolgbaren Artikeln zu einzelnen Bauprodukten" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "Bestands-Zuordnung löschen" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "Parameter löschen" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "Teile bestellen" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "Keine Herstellerteile gefunden" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "Vorlagenteil" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "Baugruppe" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "Keine Parameter gefunden" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "Parameter löschen" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "Parameter löschen" @@ -12877,119 +11885,119 @@ msgstr "Staffelpreis bearbeiten" msgid "Delete price break" msgstr "Staffelpreis löschen" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "wahr" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "falsch" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "Filter auswählen" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "Etiketten drucken" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "Berichte drucken" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "Tabelle herunterladen" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "Tabelle neu laden" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "Neuen Filter hinzufügen" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "Alle Filter entfernen" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "Filter erstellen" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "Aktion nicht erlaubt" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "Erstellen ist nicht erlaubt" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "Aktualisieren ist nicht erlaubt" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "Löschvorgang nicht erlaubt" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "Anzeigevorgang nicht erlaubt" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "Dieses Formular offen lassen" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "Eingabe löschen" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "Dateispalte" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "Feldname" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "Spalten auswählen" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "JA" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "NEIN" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "Wahr" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "Falsch" @@ -12997,74 +12005,110 @@ msgstr "Falsch" msgid "No parts required for builds" msgstr "Keine Ersatzteile für Montage erforderlich" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "Elemente auswählen" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "Keine Elemente zum Drucken ausgewählt" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "Keine Etiketten gefunden" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "Keine Berichtvorlagen für ausgewählte Bestellungen gefunden" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "ausgewählt" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "Druckoptionen" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "Etikett drucken" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "Etiketten drucken" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "Drucken" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "Etiketten-Vorlage auswählen" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "Plugin auswählen" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "Etiketten an den Drucker senden" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "Abbrechen" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Abschicken" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "Formulartitel" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "Warte auf Server..." -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "Akzeptieren" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "Lade Daten" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "Ungültige Antwort vom Server" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "Formulardaten fehlen bei Serverantwort" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "Formulardaten fehlerhaft" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "JSON Antwort enthält keine Formulardaten" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "Fehler 400: Ungültige Anfrage" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "Fehler 400 von Server erhalten" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "Fehler bei Formulardaten-Anfrage" @@ -13074,9 +12118,9 @@ msgstr "Keine Nachrichten gefunden" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" -msgstr "ID" +msgstr "" #: templates/js/translated/notification.js:52 msgid "Age" @@ -13102,498 +12146,494 @@ msgstr "Keine ungelesenen Benachrichtigungen" msgid "Notifications will load here" msgstr "Benachrichtigungen erscheinen hier" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "Zusätzliche Position hinzufügen" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "Bestellung exportieren" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "Position duplizieren" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "Postion bearbeiten" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "Position löschen" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "Keine Postionen gefunden" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "Postionen duplizieren" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "Position bearbeiten" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "Position löschen" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "Teileigenschaften" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "Erstellungsoptionen für Teile" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "Duplizierungsoptionen für Teile" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "Teil-Kategorie hinzufügen" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "Übergeordnete Teilkategorie" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "Icon (optional) - alle verfügbaren Icons einsehbar auf" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "Teil-Kategorie hinzufügen" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "Neue Kategorie nach dieser Kategorie erstellen" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "Artikelkategorie erstellt" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "Teilekategorie bearbeiten" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "Möchten Sie diese Artikel-Kategorie wirklich löschen?" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "In übergeordnete Kategorie verschieben" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "Teil-Kategorie löschen" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "Aktion für Teile in dieser Kategorie" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "Aktion für Unterkategorien" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "Teil erstellen" +msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "Weiteres Teil nach diesem erstellen" +msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "Teil erfolgreich angelegt" +msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "Teil bearbeiten" +msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "Teil bearbeitet" +msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" -msgstr "Teil-Variante anlegen" +msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" -msgstr "Aktives Teil" +msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" -msgstr "Teil kann nicht gelöscht werden, da es derzeit aktiv ist" +msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" -msgstr "Das Löschen dieses Teils kann nicht rückgängig gemacht werden" +msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" -msgstr "Alle Lagerartikel für dieses Teil werden gelöscht" +msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" -msgstr "Dieses Teil wird von allen Stücklisten entfernt" +msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Alle Hersteller- und Lieferanteninformationen für dieses Teil werden gelöscht" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Teil löschen" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "Du hast Benachrichtigungen zu diesem Artikel abonniert" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "Du hast Benachrichtigungen zu diesem Artikel abonniert" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "Benachrichtigungen zu diesem Artikel abonnieren" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "Du erhältst keine Benachrichtigungen zu diesem Artikel mehr" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "Die Stückliste zu validieren markiert jede Position als gültig" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "Stückliste prüfen" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "Überprüfte Stückliste" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "Stückliste kopieren" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "Bestand niedrig" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Bedarf" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Einheit" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "Virtuelles Teil" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Abonniertes Teil" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Verkäufliches Teil" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "Erstellung eines neuen Inventurberichts planen." -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "Nach Fertigstellung steht der Inventurbericht zum Download zur Verfügung." -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "Inventurbericht erstellen" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "Inventurbericht geplant" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "Keine Inventurinformationen verfügbar" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "Inventureintrag bearbeiten" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "Inventureintrag löschen" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "Keine Varianten gefunden" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "Keine Teileparametervorlagen gefunden" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "Teileparametervorlage bearbeiten" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "Alle Parameter mit Verweis auf diese Vorlage werden ebenfalls gelöscht" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "Teileparametervorlage löschen" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "Diese Position ist überfällig" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "Position empfangen" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "Teilebeziehung löschen" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "Teilebeziehung löschen" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "Keine Teile gefunden" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "Wähle die Kategorie für die ausgewählten Teile" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "Teilekategorie auswählen" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "Kategorie wählen" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "Teil" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "Teile" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "Keine Kategorien" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Als Liste anzeigen" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "Als Raster anzeigen" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "Keine Unterkategorien gefunden" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Als Baum anzeigen" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "Unterkategorien laden" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "Keine passenden Testvorlagen gefunden" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "Ergebnisse" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" +msgstr "Testergebnis bearbeiten" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" +msgstr "Testergebnis löschen" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "Dieser Test ist für ein übergeordnetes Teil definiert" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "Vorlage für Testergebnis bearbeiten" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "Vorlage für Testergebnis löschen" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "Kein Datum angegeben" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "Das angegebene Datum liegt in der Vergangenheit" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Spekulativ" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" -msgstr "Keine Zeitplanung für dieses Teil vorhanden" +msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" -msgstr "Fehler beim Abrufen der Zeitplanungsinformationen für dieses Teil" +msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" -msgstr "Geplante Lagermengen" +msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Maximale Menge" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" -msgstr "Minimaler Lagerbestand" +msgstr "" #: templates/js/translated/plugin.js:46 msgid "No plugins found" -msgstr "Keine Plugins gefunden" +msgstr "" #: templates/js/translated/plugin.js:58 msgid "This plugin is no longer installed" -msgstr "Dieses Plugin ist nicht mehr installiert" +msgstr "" #: templates/js/translated/plugin.js:60 msgid "This plugin is active" -msgstr "Dieses Plugin ist aktiv" +msgstr "" #: templates/js/translated/plugin.js:62 msgid "This plugin is installed but not active" -msgstr "Dieses Plugin ist installiert, aber nicht aktiv" +msgstr "" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "Plugin deaktivieren" +msgstr "" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 msgid "Enable Plugin" -msgstr "Plugin aktivieren" +msgstr "" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "Das Plugin wurde installiert" +msgstr "" #: templates/js/translated/plugin.js:177 msgid "Are you sure you want to enable this plugin?" -msgstr "Soll dieses Plugin aktiviert werden?" +msgstr "" #: templates/js/translated/plugin.js:181 msgid "Are you sure you want to disable this plugin?" -msgstr "Soll dieses Plugin deaktiviert werden?" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Enable" -msgstr "Aktivieren" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Disable" -msgstr "Deaktivieren" +msgstr "" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "Plugin aktualisiert" +msgstr "" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" -msgstr "Fehler beim Abrufen der Währungsdaten" +msgstr "" #: templates/js/translated/pricing.js:321 msgid "No BOM data available" -msgstr "Keine Stücklisten-Daten verfügbar" +msgstr "" #: templates/js/translated/pricing.js:463 msgid "No supplier pricing data available" -msgstr "Keine Zulieferer-Preise verfügbar" +msgstr "" #: templates/js/translated/pricing.js:572 msgid "No price break data available" -msgstr "Keine Staffelpreisdaten verfügbar" +msgstr "" #: templates/js/translated/pricing.js:755 msgid "No purchase history data available" -msgstr "Keine Einkaufshistorie verfügbar" +msgstr "" #: templates/js/translated/pricing.js:791 msgid "Purchase Price History" -msgstr "Kaufpreisverlauf" +msgstr "" #: templates/js/translated/pricing.js:894 msgid "No sales history data available" -msgstr "Keine Verkaufshistorie verfügbar" +msgstr "" #: templates/js/translated/pricing.js:916 msgid "Sale Price History" -msgstr "Verkaufspreisverlauf" +msgstr "" #: templates/js/translated/pricing.js:1005 msgid "No variant data available" -msgstr "Keine Variantendaten verfügbar" +msgstr "" #: templates/js/translated/pricing.js:1045 msgid "Variant Part" -msgstr "Variantenteil" +msgstr "" #: templates/js/translated/purchase_order.js:169 msgid "Select purchase order to duplicate" -msgstr "Bestellung zum Duplizieren auswählen" +msgstr "" #: templates/js/translated/purchase_order.js:176 msgid "Duplicate Line Items" @@ -13613,21 +12653,21 @@ msgstr "Zusätzliche Positionen der ausgewählten Bestellung duplizieren" #: templates/js/translated/purchase_order.js:206 msgid "Edit Purchase Order" -msgstr "Bestellung bearbeiten" +msgstr "" #: templates/js/translated/purchase_order.js:223 msgid "Duplication Options" -msgstr "Duplizierungsoptionen" +msgstr "" #: templates/js/translated/purchase_order.js:431 msgid "Complete Purchase Order" -msgstr "Bestellung abschließen" +msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" -msgstr "Diese Bestellung als vollständig markieren?" +msgstr "" #: templates/js/translated/purchase_order.js:454 msgid "All line items have been received" @@ -13638,20 +12678,21 @@ msgid "This order has line items which have not been marked as received." msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden." #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "Fertigstellen dieser Bestellung bedeutet, dass sie ihre Positionen nicht länger bearbeiten können." #: templates/js/translated/purchase_order.js:483 msgid "Cancel Purchase Order" -msgstr "Bestellung stornieren" +msgstr "" #: templates/js/translated/purchase_order.js:488 msgid "Are you sure you wish to cancel this purchase order?" -msgstr "Soll die Bestellung storniert werden?" +msgstr "" #: templates/js/translated/purchase_order.js:494 msgid "This purchase order can not be cancelled" -msgstr "Diese Bestellung kann nicht storniert werden" +msgstr "" #: templates/js/translated/purchase_order.js:515 #: templates/js/translated/return_order.js:164 @@ -13660,11 +12701,11 @@ msgstr "Nachdem diese Bestellung platziert ist, können die Positionen nicht lä #: templates/js/translated/purchase_order.js:520 msgid "Issue Purchase Order" -msgstr "Bestellung aufgeben" +msgstr "" #: templates/js/translated/purchase_order.js:612 msgid "At least one purchaseable part must be selected" -msgstr "Mindestens ein kaufbares Teil muss ausgewählt werden" +msgstr "" #: templates/js/translated/purchase_order.js:637 msgid "Quantity to order" @@ -13672,15 +12713,15 @@ msgstr "Zu bestellende Menge" #: templates/js/translated/purchase_order.js:646 msgid "New supplier part" -msgstr "Neues Zuliefererteil" +msgstr "" #: templates/js/translated/purchase_order.js:664 msgid "New purchase order" -msgstr "Neue Bestellung" +msgstr "" #: templates/js/translated/purchase_order.js:705 msgid "Add to purchase order" -msgstr "Zur Bestellung hinzufügen" +msgstr "" #: templates/js/translated/purchase_order.js:755 msgid "Merge" @@ -13688,19 +12729,19 @@ msgstr "Zusammenfügen" #: templates/js/translated/purchase_order.js:859 msgid "No matching supplier parts" -msgstr "Keine passenden Lieferantenteile" +msgstr "" #: templates/js/translated/purchase_order.js:878 msgid "No matching purchase orders" -msgstr "Keine passenden Bestellungen" +msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "Positionen auswählen" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "Mindestens eine Position muss ausgewählt werden" @@ -13712,188 +12753,190 @@ msgstr "Erhaltene Menge" msgid "Quantity to receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" -msgstr "Bestandsstatus" +msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" -msgstr "Barcode hinzufügen" +msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" -msgstr "Barcode entfernen" +msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" -msgstr "Lagerort angeben" +msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" -msgstr "Losnummer hinzufügen" - -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" msgstr "" -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" -msgstr "Seriennummern hinzufügen" - -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" msgstr "" -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" -msgstr "Seriennummern" +msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" -msgstr "Bestellnummer" +msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "Empfang der Artikel bestätigen" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "Bestellartikel erhalten" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "Artikel-Barcode scannen" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Scanne den Barcode am erhaltenen Artikel (darf nicht mit einem existierenden Lagerartikel übereinstimmen)" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "Ungültige Barcode-Daten" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "Bestellung ist überfällig" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "Alle ausgewählten Positionen werden gelöscht" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "Ausgewählte Positionen löschen?" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "Position löschen" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "Position löschen" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 msgid "Add Customer" -msgstr "Kunden hinzufügen" +msgstr "" #: templates/js/translated/return_order.js:134 msgid "Create Return Order" -msgstr "Rücksendeauftrag erstellen" +msgstr "" #: templates/js/translated/return_order.js:149 msgid "Edit Return Order" -msgstr "Rücksendeauftrag bearbeiten" +msgstr "" #: templates/js/translated/return_order.js:169 msgid "Issue Return Order" -msgstr "Neuer Rücksendeauftrag" +msgstr "" #: templates/js/translated/return_order.js:186 msgid "Are you sure you wish to cancel this Return Order?" -msgstr "Soll der Rücksendeauftrag storniert werden?" +msgstr "" #: templates/js/translated/return_order.js:193 msgid "Cancel Return Order" -msgstr "Rücksendeauftrag stornieren" +msgstr "" #: templates/js/translated/return_order.js:218 msgid "Complete Return Order" -msgstr "Rücksendeauftrag abschließen" +msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" -msgstr "Kein Rücksendeauftrag gefunden" +msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" -msgstr "Ungültiger Kunde" +msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" -msgstr "Rücksendeauftragspositionen erhalten" +msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "Keine passenden Positionen gefunden" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" -msgstr "Artikel als empfangen markieren" +msgstr "" #: templates/js/translated/sales_order.js:161 msgid "Create Sales Order" @@ -13905,192 +12948,176 @@ msgstr "Auftrag bearbeiten" #: templates/js/translated/sales_order.js:291 msgid "No stock items have been allocated to this shipment" -msgstr "Dieser Sendung wurden keine Lagerartikel zugewiesen" +msgstr "" #: templates/js/translated/sales_order.js:296 msgid "The following stock items will be shipped" -msgstr "Die folgenden Lagerartikel werden verschickt" +msgstr "" #: templates/js/translated/sales_order.js:336 msgid "Complete Shipment" -msgstr "Lieferung fertigstellen" +msgstr "" #: templates/js/translated/sales_order.js:360 msgid "Confirm Shipment" -msgstr "Lieferung bestätigen" +msgstr "" #: templates/js/translated/sales_order.js:416 msgid "No pending shipments found" -msgstr "Keine ausstehenden Sendungen gefunden" +msgstr "" #: templates/js/translated/sales_order.js:420 msgid "No stock items have been allocated to pending shipments" -msgstr "Keine Lagerartikel wurden offenen Sendungen zugewiesen" +msgstr "" #: templates/js/translated/sales_order.js:430 msgid "Complete Shipments" -msgstr "Lieferung fertigstellen" +msgstr "" #: templates/js/translated/sales_order.js:452 msgid "Skip" -msgstr "Überspringen" - -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "Auftrag versenden" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "Bestellung versenden?" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind" +msgstr "" #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "Dieser Auftrag enthält Positionen, die noch nicht abgeschlossen sind." -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "Versenden dieses Auftrags bedeutet, dass der Auftrag und seine Positionen nicht mehr bearbeitbar sind." - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "Diesen Auftrag aufgeben?" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "Auftrag aufgeben" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "Auftrag stornieren" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." -msgstr "Stornieren dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." +msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" -msgstr "Neue Lieferung erstellen" +msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" -msgstr "Lieferung bearbeiten" +msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" -msgstr "Lieferung fertigstellen" +msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" -msgstr "Lieferung löschen" +msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" -msgstr "Lieferung bearbeiten" +msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" -msgstr "Lieferung löschen" +msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" -msgstr "Keine passende Lieferung gefunden" +msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" -msgstr "Sendungsreferenz" +msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" -msgstr "Nicht versandt" +msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" -msgstr "Nachverfolgen" +msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" -msgstr "Rechnung" +msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" -msgstr "Lieferung hinzufügen" +msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" -msgstr "Bestandszuordnung bestätigen" +msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "Lagerartikel Auftrag zuweisen" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "Keine Allokationen für Auftrag gefunden" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" -msgstr "Bestandszuordnung bearbeiten" +msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" -msgstr "Löschvorgang bestätigen" +msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" -msgstr "Bestandszuordnung löschen" +msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" -msgstr "An den Kunden versandt" +msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" -msgstr "Lagerort nicht angegeben" +msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" -msgstr "Seriennummern zuweisen" +msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" -msgstr "Bestand kaufen" +msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" -msgstr "Preis berechnen" +msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" -msgstr "Kann nicht gelöscht werden, da Artikel versandt wurden" +msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" -msgstr "Kann nicht gelöscht werden, da Artikel zugewiesen sind" +msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" -msgstr "Seriennummern zuweisen" +msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" -msgstr "Stückpreis aktualisieren" +msgstr "" #: templates/js/translated/search.js:270 msgid "No results" -msgstr "Keine Ergebnisse" +msgstr "" #: templates/js/translated/search.js:292 templates/search.html:25 msgid "Enter search query" @@ -14098,835 +13125,821 @@ msgstr "Suchbegriff eingeben" #: templates/js/translated/search.js:342 msgid "result" -msgstr "ergebnis" +msgstr "" #: templates/js/translated/search.js:352 msgid "Minimize results" -msgstr "Ergebnisse minimieren" +msgstr "" #: templates/js/translated/search.js:355 msgid "Remove results" -msgstr "Ergebnisse entfernen" +msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" -msgstr "Lagerartikel serialisieren" +msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" -msgstr "Lager-Serialisierung bestätigen" +msgstr "" + +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:166 msgid "Add Location type" -msgstr "Lagerorttyp hinzufügen" +msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" -msgstr "Lagerort bearbeiten" +msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" -msgstr "Lagerort hinzufügen" +msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" -msgstr "Weiteren Lagerort nach diesem erstellen" +msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" -msgstr "Lagerort erstellt" +msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" -msgstr "Soll dieser Lagerort gelöscht werden?" +msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" -msgstr "Zum übergeordneten Lagerort verschieben" +msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" -msgstr "Lagerort löschen" +msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" -msgstr "Aktion für Lagerartikel in diesem Lagerort" +msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" -msgstr "Aktion für Unter-Lagerorte" +msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" -msgstr "Dieser Teil kann nicht serialisiert werden" +msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" -msgstr "Angegebene Menge als Packungen anstatt einzelner Artikel hinzufügen" +msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" -msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" +msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" +msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" -msgstr "Lagerartikel dupliziert" +msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" -msgstr "Lagerartikel duplizieren" +msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" -msgstr "Soll dieser Lagerartikel gelöscht werden?" +msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" -msgstr "Lagerartikel löschen" +msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" -msgstr "Lagerartikel bearbeiten" +msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" -msgstr "Weiteres Teil nach diesem erstellen" +msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" -msgstr "Neuen Lagerartikel erstellen" +msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" -msgstr "Mehrere Lagerartikel wurden erstellt" +msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" -msgstr "Seriennummer finden" +msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" -msgstr "Seriennummer eingeben" +msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" -msgstr "Eine Seriennummer eingeben" +msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" -msgstr "Keine passende Seriennummer" +msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" -msgstr "Mehr als ein übereinstimmendes Ergebnis gefunden" +msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" -msgstr "Bestand Zuweisung bestätigen" +msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" -msgstr "Lagerbestand einem Kunden zuweisen" +msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" -msgstr "Achtung: Das Zusammenführen kann nicht rückgängig gemacht werden" +msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" -msgstr "Einige Informationen gehen verloren, wenn Artikel zusammengeführt werden" +msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" -msgstr "Lagerartikelverlauf wird für zusammengeführte Lagerartikel gelöscht" +msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" -msgstr "Lieferantenteil-Informationen werden für zusammengeführte Artikel gelöscht" +msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" -msgstr "Bestandszusammenführung bestätigen" +msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" -msgstr "Lagerartikel zusammenführen" +msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" -msgstr "Bestand verschieben" +msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "Verschieben" +msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" -msgstr "Bestand zählen" +msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" -msgstr "Zählen" +msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" -msgstr "Bestand entfernen" +msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" -msgstr "Entnehmen" +msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" -msgstr "Bestand hinzufügen" +msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Hinzufügen" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" -msgstr "Bestand löschen" +msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" - -#: templates/js/translated/stock.js:1152 -msgid "Specify stock quantity" -msgstr "Bestandsanzahl angeben" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" msgstr "" -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" +#: templates/js/translated/stock.js:1143 +msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" -msgstr "Lagerartikel auswählen" +msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" -msgstr "Wähle mindestens einen verfügbaren Lagerartikel aus" +msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" -msgstr "Bestandsanpassung bestätigen" +msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" -msgstr "ERFOLGREICH" +msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" -msgstr "FEHLGESCHLAGEN" +msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" -msgstr "KEIN ERGEBNIS" +msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" -msgstr "Test bestanden" +msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" -msgstr "Testergebnis hinzufügen" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "Testergebnis bearbeiten" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "Testergebnis löschen" +msgstr "" -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" -msgstr "Keine Testergebnisse gefunden" +msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" -msgstr "Testdatum" +msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" -msgstr "Test gestartet" +msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" -msgstr "Test beendet" +msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" -msgstr "Testergebnis bearbeiten" +msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" -msgstr "Testergebnis löschen" +msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" -msgstr "In Produktion" +msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" -msgstr "In Lagerartikel installiert" +msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" -msgstr "Auftrag zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" -msgstr "Kein Lagerort gesetzt" +msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" -msgstr "Bestandsstatus ändern" +msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" -msgstr "Bestand zusammenführen" +msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" -msgstr "Bestand löschen" +msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" -msgstr "Lagerartikel" +msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" -msgstr "Zu Lagerort einscannen" +msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "Lager-Aktionen" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" -msgstr "Installierte Artikel laden" +msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" -msgstr "Lagerartikel wird produziert" +msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" -msgstr "Lagerartikel wurde Auftrag zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" -msgstr "Lagerartikel wurde Kunden zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" -msgstr "Serialisierter Lagerartikel wurde zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" -msgstr "Lagerartikel wurde vollständig zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" -msgstr "Lagerartikel wurde teilweise zugewiesen" +msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" -msgstr "Lagerartikel in anderem Artikel verbaut" +msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" -msgstr "Lagerbestand wurde durch einen Bauauftrag verbraucht" +msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" -msgstr "Lagerartikel ist abgelaufen" +msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" -msgstr "Lagerartikel läuft demnächst ab" +msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" -msgstr "Lagerartikel wurde zurückgewiesen" +msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" -msgstr "Lagerartikel ist verloren" +msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" -msgstr "Lagerartikel ist zerstört" +msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" -msgstr "Aufgebraucht" +msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" -msgstr "Zuliefererteil nicht angegeben" +msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" -msgstr "Bestandswert" +msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" -msgstr "Keine zur Anfrage passenden Lagerartikel gefunden" +msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" -msgstr "Lagerorte" +msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" -msgstr "Untergeordnete Lagerorte laden" +msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" -msgstr "Details" +msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" -msgstr "Keine Änderungen" +msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" -msgstr "Teileinformationen nicht verfügbar" +msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" -msgstr "Lagerort existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" -msgstr "Bauauftrag existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" -msgstr "Bestellung existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" -msgstr "Auftrag existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" -msgstr "Rücksendebestellung existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" -msgstr "Kunde existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" -msgstr "Lagerartikel existiert nicht mehr" +msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" -msgstr "Hinzugefügt" +msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" -msgstr "Entfernt" +msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" -msgstr "Keine installierten Artikel" +msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" -msgstr "Lagerartikel deinstallieren" +msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" -msgstr "Zu deinstallierende Lagerartikel auswählen" +msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" -msgstr "Einen anderen Lagerartikel in dieses Teil installieren" +msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" -msgstr "Lagerartikel können nur installiert werden wenn folgende Kriterien erfüllt werden" +msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "Der Lagerartikel ist mit einem Teil verknüpft das in der Stückliste für diesen Lagerartikel ist" +msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" -msgstr "Dieser Lagerartikel ist aktuell vorhanden" +msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" -msgstr "Der Lagerbestand ist nicht bereits in einem anderen Bestand installiert" +msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "Der Lagerbestand wird entweder mit einem Batch-Code oder mit Seriennummer verfolgt" +msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" -msgstr "Teil zur Installation auswählen" +msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" -msgstr "Wählen Sie einen oder mehrere Bestandteile aus" +msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" -msgstr "Lagerartikel auswählen" - -#: templates/js/translated/stock.js:3400 -msgid "Change Stock Status" -msgstr "Bestandsstatus ändern" - -#: templates/js/translated/stock.js:3477 -msgid "This week" msgstr "" -#: templates/js/translated/stock.js:3485 -msgid "This month" +#: templates/js/translated/stock.js:3317 +msgid "Change Stock Status" msgstr "" -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" -msgstr "Hat Projektcode" +msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" -msgstr "Bestellstatus" +msgstr "" + +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" -msgstr "Baugruppe" +msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" -msgstr "Hat verfügbaren Bestand" +msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "Erlaube alternatives Lager" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" -msgstr "Unter-Lagerorte einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" -msgstr "Lagerorte einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" -msgstr "Hat Lagerorttyp" +msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" -msgstr "Unterkategorien einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" -msgstr "Abonniert" +msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" -msgstr "Hat Seriennummer" +msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" -msgstr "Seriennummer >=" +msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" -msgstr "Seriennummer größer oder gleich" +msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" -msgstr "Seriennummer <=" +msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" -msgstr "Seriennummern kleiner oder gleich" +msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" -msgstr "Seriennummer" +msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" -msgstr "Losnummer" +msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" -msgstr "Aktive Teile" +msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" -msgstr "Bestand aktiver Teile anzeigen" +msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" -msgstr "Teil ist eine Baugruppe" +msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" -msgstr "Ist zugeordnet" +msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" -msgstr "Teil wurde zugeordnet" +msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" -msgstr "Lagerartikel ist zur Verwendung verfügbar" +msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" -msgstr "Bestand in Unter-Lagerorten einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" -msgstr "Zeige aufgebrauchte Lagerartikel" +msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" -msgstr "Zeige Teile welche im Lager sind" +msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" -msgstr "Zeige Teile welche in Produktion sind" +msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" -msgstr "Varianten einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "Lagerartikel für Teile-Varianten einschließen" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" -msgstr "Zeige Bestand, welcher in einem anderen Teil verbaut ist" +msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" -msgstr "Zeige Bestand, welcher Kunden zugeordnet ist" +msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" -msgstr "Bestandsstatus" +msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" -msgstr "Hat Batch-Code" +msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" -msgstr "Lagerbestand wird entweder per Batch-Code oder Seriennummer verfolgt" +msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" -msgstr "Hat Einkaufspreis" +msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" -msgstr "Zeige Bestand, für welchen ein Einkaufspreis verfügbar ist" +msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" -msgstr "Ablaufdatum vor" +msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" -msgstr "Ablaufdatum nach" +msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" -msgstr "Zeige abgelaufene Lagerartikel" +msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" -msgstr "Zeige Bestand, der bald abläuft" +msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" -msgstr "Test bestanden" - -#: templates/js/translated/table_filters.js:467 -msgid "Include Installed Items" -msgstr "Installierte Teile einschließen" - -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" msgstr "" -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" +#: templates/js/translated/table_filters.js:460 +msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" -msgstr "Bauauftrags Status" +msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" -msgstr "Teile in Unterkategorien einschließen" +msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" -msgstr "Aktive Teile anzeigen" +msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" +msgid "Available stock" msgstr "" #: templates/js/translated/table_filters.js:733 -msgid "Available stock" -msgstr "Verfügbarer Lagerbestand" - -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" -msgstr "Hat Einheiten" +msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" -msgstr "Teil hat definierte Einheiten" +msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" -msgstr "Hat IPN" +msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" -msgstr "Teil hat Interne Teilenummer" +msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" -msgstr "Auf Lager" +msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" -msgstr "Kaufbar" +msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" -msgstr "Hat Inventureinträge" +msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" -msgstr "Hat Auswahlen" +msgstr "" #: templates/js/translated/tables.js:92 msgid "Display calendar view" -msgstr "Kalenderansicht anzeigen" +msgstr "" #: templates/js/translated/tables.js:102 msgid "Display list view" -msgstr "Listenansicht anzeigen" +msgstr "" #: templates/js/translated/tables.js:112 msgid "Display tree view" -msgstr "Baumansicht anzeigen" +msgstr "" #: templates/js/translated/tables.js:130 msgid "Expand all rows" -msgstr "Alle Zeilen ausklappen" +msgstr "" #: templates/js/translated/tables.js:136 msgid "Collapse all rows" -msgstr "Alle Zeilen einklappen" +msgstr "" #: templates/js/translated/tables.js:186 msgid "Export Table Data" -msgstr "Tabellendaten exportieren" +msgstr "" #: templates/js/translated/tables.js:190 msgid "Select File Format" -msgstr "Dateiformat wählen" +msgstr "" #: templates/js/translated/tables.js:529 msgid "Loading data" -msgstr "Lade Daten" +msgstr "" #: templates/js/translated/tables.js:532 msgid "rows per page" -msgstr "Zeilen pro Seite" +msgstr "" #: templates/js/translated/tables.js:537 msgid "Showing all rows" -msgstr "Alle Zeilen anzeigen" +msgstr "" #: templates/js/translated/tables.js:539 msgid "Showing" -msgstr "Zeige" +msgstr "" #: templates/js/translated/tables.js:539 msgid "to" -msgstr "bis" +msgstr "" #: templates/js/translated/tables.js:539 msgid "of" -msgstr "von" +msgstr "" #: templates/js/translated/tables.js:539 msgid "rows" -msgstr "Zeilen" +msgstr "" #: templates/js/translated/tables.js:546 msgid "No matching results" -msgstr "Keine passenden Ergebnisse gefunden" +msgstr "" #: templates/js/translated/tables.js:549 msgid "Hide/Show pagination" -msgstr "Seitennavigation verstecken/anzeigen" +msgstr "" #: templates/js/translated/tables.js:555 msgid "Toggle" -msgstr "Umschalten" +msgstr "" + +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" #: templates/js/translated/tables.js:561 msgid "All" -msgstr "Alle" +msgstr "" #: templates/navbar.html:45 msgid "Buy" @@ -14946,7 +13959,7 @@ msgstr "Neue Benachrichtigungen" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" -msgstr "Admin" +msgstr "" #: templates/navbar.html:148 msgid "Logout" @@ -14960,22 +13973,6 @@ msgstr "Speichern" msgid "Show all notifications and history" msgstr "Zeige alle Benachrichtigungen und Verlauf" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "Plattform UI - die neue Oberfläche für InvenTree - bietet modernere Administrationsmöglichkeiten." - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "Plattform UI - die neue Benutzeroberfläche für InvenTree - ist bereit um getestet zu werden." - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "Jetzt ausprobieren" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "hier" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR Daten nicht angegeben" @@ -15042,28 +14039,28 @@ msgstr "Weiter" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" -msgstr "Ungültiger SSO-Anbieter" +msgstr "" #: templates/socialaccount/login.html:31 msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "Der ausgewählte SSO-Anbieter ist ungültig oder wurde nicht korrekt konfiguriert" +msgstr "" #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "Sie sind dabei, Ihr %(provider_name)s Konto zu verwenden, um sich bei %(site_name)s anzumelden." +msgstr "" #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" -msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus" +msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 msgid "Provider has not been configured" -msgstr "Anbieter wurde nicht konfiguriert" +msgstr "" #: templates/socialaccount/snippets/provider_list.html:35 msgid "No SSO providers have been configured" -msgstr "Es wurden keine SSO-Anbieter konfiguriert" +msgstr "" #: templates/stats.html:13 msgid "Instance Name" @@ -15125,14 +14122,6 @@ msgstr "E-Mail-Einstellungen" msgid "Email settings not configured" msgstr "E-Mail-Einstellungen nicht konfiguriert" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -15151,7 +14140,7 @@ msgstr "Welche Benutzer gehören zu dieser Gruppe" #: users/admin.py:249 msgid "The following users are members of multiple groups" -msgstr "Folgende Benutzer gehören zu mehreren Gruppen" +msgstr "" #: users/admin.py:283 msgid "Personal info" @@ -15167,19 +14156,19 @@ msgstr "wichtige Daten" #: users/authentication.py:29 users/models.py:138 msgid "Token has been revoked" -msgstr "Token wurde widerrufen" +msgstr "" #: users/authentication.py:32 msgid "Token has expired" -msgstr "Token ist abgelaufen" +msgstr "" #: users/models.py:81 msgid "API Token" -msgstr "API Token" +msgstr "" #: users/models.py:82 msgid "API Tokens" -msgstr "API-Tokens" +msgstr "" #: users/models.py:118 msgid "Token Name" @@ -15191,49 +14180,49 @@ msgstr "Benutzerdefinierter Tokenname" #: users/models.py:125 msgid "Token expiry date" -msgstr "Token Ablaufdatum" +msgstr "" #: users/models.py:133 msgid "Last Seen" -msgstr "Zuletzt gesehen" +msgstr "" #: users/models.py:134 msgid "Last time the token was used" -msgstr "Das letzte Mal, wo das Token verwendet wurde" +msgstr "" #: users/models.py:138 msgid "Revoked" -msgstr "Widerrufen" +msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Gruppe" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Ansicht" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Ändern" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index 4fc2989b76d6..bd12cb701ecd 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -48,38 +48,34 @@ msgstr "Δόθηκε μη έγκυρη ποσότητα" msgid "Invalid quantity supplied ({exc})" msgstr "Δόθηκε μη έγκυρη ποσότητα ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλματος στον πίνακα διαχείρισης" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Σημειώσεις" @@ -92,270 +88,250 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Εισάγετε κωδικό" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Εισάγετε νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Επιβεβαιώστε τον κωδικό πρόσβασης" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Επιβεβαιώστε τον νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Παλιός κωδικός πρόσβασης" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-mail (ξανά)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Επιβεβαίωση διεύθυνσης email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Πρέπει να πληκτρολογήσετε το ίδιο email κάθε φορά." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Η παρεχόμενη κύρια διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Ο παρεχόμενος τομέας ηλεκτρονικού ταχυδρομείου δεν έχει εγκριθεί." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Η εγγραφή είναι απενεργοποιημένη." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Διπλότυπο serial number" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Μη έγκυρο εύρος ομάδας: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Μη έγκυρη ακολουθία ομάδας: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({len(serials)}) πρέπει να αντιστοιχεί στην ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Βουλγάρικα" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Τσέχικα" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Δανέζικα" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Γερμανικά" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Ελληνικά" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Αγγλικά" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Ισπανικά" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Ισπανικά (Μεξικό)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Φαρσί / Περσικά" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Φινλανδικά" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Γαλλικά" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Εβραϊκά" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Ινδικά" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ούγγρικα" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Ιταλικά" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Ιαπωνικά" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Κορεάτικα" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Νορβηγικά" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Πολωνικά" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Πορτογαλικά" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Πορτογαλικά (Βραζιλίας)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Ρωσικά" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Σλοβάκικα" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Σλοβενικά" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Σερβικά" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Σουηδικά" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Ταϊλανδέζικα" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Τούρκικα" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Βιετναμέζικα" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Κινέζικα (απλοποιημένα)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" @@ -364,310 +340,349 @@ msgstr "Κινέζικα (Παραδοσιακά)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Σφάλμα κατά την εκτέλεση επικύρωσης προσθέτου" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Τα μεταδεδομένα πρέπει να είναι ένα αντικείμενο dict python" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Μεταδεδομένα Πρόσθετου" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON πεδίο μεταδεδομένων, για χρήση από εξωτερικά πρόσθετα" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Λανθασμένο μοτίβο" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Δώσατε λάθος μορφή κλειδιού" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Λείπει το απαραίτητο κλειδί" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Το πεδίο δεν μπορεί να είναι άδειο" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Η αναφορά πρέπει να ταιριάζει με το απαιτούμενο μοτίβο" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Το αρχείο λείπει" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Λείπει ο εξωτερικός σύνδεσμος" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Συνημμένο" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Επιλέξτε αρχείο για επισύναψη" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Σύνδεσμος" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Σχόλιο" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Σχόλιο αρχείου" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Χρήστης" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "ημερομηνία φόρτωσης" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Το όνομα αρχείου δεν μπορεί να είναι κενό" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Μη διαθέσιμη τοποθεσία συνημμένου" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Το όνομα αρχείου περιέχει μη έγκυρους χαρακτήρες '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Λείπει επέκταση ονόματος αρχείου" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Αρχείο με αυτό το όνομα υπάρχει ήδη" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Σφάλμα κατά τη μετονομασία" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "γονέας" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Σημειώσεις Markdown (προαιρετικό)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Στοιχεία Barcode" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Δεδομένα barcode τρίτων" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Μοναδικό hash δεδομένων barcode" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Δεν έχετε άδεια να αλλάξετε αυτόν τον ρόλο χρήστη." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Μόνο υπερχρήστες (superusers) μπορούν να δημιουργήσουν νέους χρήστες" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Όνομα αρχείου" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Αρχείο Δεδομένων" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Επιλέξτε ένα αρχείο για ανέβασμα" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Μη υποστηριζόμενος τύπος αρχείου" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Το αρχείο είναι πολύ μεγάλο" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Δεν βρέθηκαν στήλες στο αρχείο" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Δεν βρέθηκαν γραμμές δεδομένων στο αρχείο" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Δεν παρασχέθηκαν σειρές δεδομένων" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Δεν δόθηκαν στήλες δεδομένων" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Λείπει απαιτούμενη στήλη: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Διπλή στήλη: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε" @@ -679,27 +694,223 @@ msgstr "Δεν έχει ρυθμιστεί διεύθυνση ηλεκτρονι msgid "InvenTree system health checks failed" msgstr "Ο έλεγχος συστήματος για το Inventree απέτυχε" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Σε εκκρεμότητα" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Τοποθετήθηκε" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Ολοκληρώθηκε" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Ακυρώθηκε" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Χάθηκε" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Επιστράφηκε" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Σε Εξέλιξη" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Αποστάλθηκε" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "ΟΚ" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Απαιτείται προσοχή" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Κατεστραμμένο" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Καταστράφηκε" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Απορρίφθηκε" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Σε Καραντίνα" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Καταχώρηση παλαιού αποθέματος" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Έγινε συγχώνευση αποθεμάτων" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Εκχωρημένος σειριακός κωδικός" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Απόθεμα που μετρήθηκε" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Προστέθηκε απόθεμα χειροκίνητα" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Αφαιρέθηκε απόθεμα χειροκίνητα" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Η τοποθεσία τροποποιήθηκε" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Το απόθεμα ενημερώθηκε" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Εγκαταστάθηκε στη συναρμολόγηση" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Αφαιρέθηκε από τη συναρμολόγηση" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Εγκαταστάθηκε αντικείμενο" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Αφαιρέθηκε αντικείμενο" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχείο" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Έγινε συγχώνευση αποθεμάτων" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Μετατράπηκε σε παραλλαγή" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Δημιουργήθηκε η έξοδος παραγγελίας" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Η έξοδος της σειράς κατασκευής ολοκληρώθηκε" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Η εντολή κατασκευής απορρίφθηκε" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Κατανάλωση με εντολή κατασκευής" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Αποστολή έναντι Εντολής Πώλησης" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Λήφθηκε έναντι Εντολής Αγοράς" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Επιστράφηκε έναντι Εντολής Αγοράς" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Απεστάλη στον πελάτη" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Επιστράφηκε από πελάτη" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Παραγωγή" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Επιστροφή" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Επισκευή" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Αντικατάσταση" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Επιστροφή χρημάτων" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Απόρριψη" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Άγνωστη βάση δεδομένων" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Μη έγκυρη φυσική μονάδα" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Η μέση τιμή δεν πρέπει να είναι αρνητική" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Η μέση τιμή δεν πρέπει να υπερβαίνει το 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Μη έγκυρη τιμή για υπέρβαση" @@ -727,105 +938,62 @@ msgstr "Πληροφορίες συστήματος" msgid "About InvenTree" msgstr "Σχετικά με το InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Γονική Κατασκευή" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Εκδόθηκε από" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Διαθέσιμο" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Σειρά Κατασκευής" msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Αναφορά" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Γονική Κατασκευή" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Εξάρτημα" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Τοποθεσία" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Τοποθεσία" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Κατάσταση" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Αφαίρεση Καταχωρημένου Αποθέματος" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Αφαίρεσε το απόθεμα που έχει κατανεμηθεί σε αυτή την κατασκευή" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Σε εκκρεμότητα" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Παραγωγή" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Ακυρώθηκε" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Ολοκληρώθηκε" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Αποσύνδεση Barcode" @@ -1800,7 +1757,7 @@ msgstr "Αποσύνδεση Barcode" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Σύνδεση Barcode" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Επεξεργασία Κατασκευής" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Αντιγραφή Κατασκευής" +msgid "Cancel Build" +msgstr "Ακύρωση κατασκευής" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Αντιγραφή Κατασκευής" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Ακύρωση κατασκευής" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Διαγραφή Κατασκευής" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Ολοκλήρωση Κατασκευής" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Περιγραφή Κατασκευής" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Δεν έχουν δημιουργηθεί προϊόντα για αυτήν την εντολή κατασκευής" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Η εντολή Κατασκευής είναι έτοιμη για να επισημανθεί ως ολοκληρωμένη" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Η Εντολή Κατασκευής δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν εκκρεμή προϊόντα" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ακόμα ολοκληρωθεί" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Το Απόθεμα δεν έχει κατανεμηθεί πλήρως σε αυτή την Εντολή Κατασκευής" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Αυτή η κατασκευή είχε προθεσμία %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Εκπρόθεσμη" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Ολοκληρωμένα Προϊόντα" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Εκδόθηκε από" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Προτεραιότητα" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Διαγραφή Εντολής Κατασκευής" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Κωδικός QR Εντολής Κατασκευής" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Σύνδεση Barcode με την Εντολή Κατασκευής" @@ -1968,8 +1911,8 @@ msgstr "Προέλευση Αποθέματος" msgid "Stock can be taken from any available location." msgstr "Το απόθεμα μπορεί να ληφθεί από οποιαδήποτε διαθέσιμη τοποθεσία." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Προορισμός" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Χρήστης" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Σύνδεσμος" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Συνημμένο" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Το αρχείο λείπει" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Λείπει ο εξωτερικός σύνδεσμος" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Επιλέξτε αρχείο για επισύναψη" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Σχόλιο" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Όνομα αρχείου" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Τοποθετήθηκε" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Αποστάλθηκε" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Χάθηκε" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Επιστράφηκε" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Σε Εξέλιξη" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Επιστροφή" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Επισκευή" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Αντικατάσταση" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Επιστροφή χρημάτων" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Απόρριψη" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "ΟΚ" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Απαιτείται προσοχή" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Κατεστραμμένο" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Καταστράφηκε" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Απορρίφθηκε" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Σε Καραντίνα" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Καταχώρηση παλαιού αποθέματος" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Έγινε συγχώνευση αποθεμάτων" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Εκχωρημένος σειριακός κωδικός" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Απόθεμα που μετρήθηκε" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Προστέθηκε απόθεμα χειροκίνητα" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Αφαιρέθηκε απόθεμα χειροκίνητα" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Η τοποθεσία τροποποιήθηκε" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Το απόθεμα ενημερώθηκε" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Εγκαταστάθηκε στη συναρμολόγηση" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Αφαιρέθηκε από τη συναρμολόγηση" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Εγκαταστάθηκε αντικείμενο" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Αφαιρέθηκε αντικείμενο" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχείο" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Έγινε συγχώνευση αποθεμάτων" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Μετατράπηκε σε παραλλαγή" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Δημιουργήθηκε η έξοδος παραγγελίας" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Η έξοδος της σειράς κατασκευής ολοκληρώθηκε" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Η εντολή κατασκευής απορρίφθηκε" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Κατανάλωση με εντολή κατασκευής" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Αποστολή έναντι Εντολής Πώλησης" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Λήφθηκε έναντι Εντολής Αγοράς" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Επιστράφηκε έναντι Εντολής Αγοράς" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Απεστάλη στον πελάτη" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Επιστράφηκε από πελάτη" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Κατασκευή" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 7821b2706634..f40d3d6c40a6 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 08:21+0000\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -49,38 +49,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -93,270 +89,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -365,310 +341,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -680,27 +695,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -728,105 +939,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -837,919 +1005,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1765,8 +1722,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1777,7 +1734,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1788,9 +1745,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1801,7 +1758,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1825,135 +1782,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1969,8 +1912,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1982,23 +1925,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2007,8 +1950,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2016,12 +1959,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2044,7 +1987,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2073,19 +2016,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2095,25 +2034,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2121,57 +2060,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2210,1763 +2102,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3985,7 +3737,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4001,103 +3753,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4136,435 +3851,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4572,8 +4258,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4608,11 +4294,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4631,17 +4317,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4649,12 +4335,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4663,19 +4356,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4691,7 +4384,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4704,7 +4397,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4718,7 +4411,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4741,7 +4434,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4813,7 +4506,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4828,8 +4521,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4839,7 +4531,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4848,23 +4540,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4888,6 +4576,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4896,7 +4597,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4929,12 +4630,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4943,13 +4644,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4967,33 +4668,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5019,236 +4716,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5288,6 +4883,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5305,82 +4904,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5400,617 +4981,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6052,87 +5529,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6185,13 +5662,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6232,6 +5709,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6244,7 +5730,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6292,31 +5778,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6328,36 +5814,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6371,8 +5852,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6402,21 +5882,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6424,16 +5918,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6441,11 +5934,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6453,187 +5946,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6642,1148 +6113,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7829,65 +7176,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7933,9 +7280,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7947,105 +7294,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8080,13 +7423,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8104,7 +7447,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8114,7 +7457,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8126,7 +7469,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8175,7 +7518,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8189,47 +7532,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8283,13 +7630,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8325,17 +7672,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8407,9 +7754,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8487,7 +7834,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8499,108 +7846,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8608,90 +7947,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8699,30 +8030,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8769,21 +8076,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8795,11 +8100,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8823,7 +8128,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8839,11 +8144,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8936,62 +8241,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8999,17 +8303,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9092,1192 +8396,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10301,7 +9320,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10317,15 +9336,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10338,8 +9357,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10348,17 +9367,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10367,12 +9386,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10413,10 +9432,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10426,7 +9449,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10470,8 +9493,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10488,6 +9515,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10497,40 +9529,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10542,84 +9574,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10635,6 +9663,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10841,12 +9873,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10885,11 +9917,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10923,36 +9955,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10995,7 +10027,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11005,7 +10037,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11039,20 +10071,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11108,9 +10140,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11131,7 +10163,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11150,12 +10182,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11163,41 +10195,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11219,7 +10251,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11254,7 +10286,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11268,6 +10300,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11341,49 +10385,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11533,7 +10577,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11555,7 +10599,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11564,26 +10608,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11597,7 +10641,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11711,19 +10755,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11788,7 +10828,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11802,15 +10842,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11822,27 +10862,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11854,11 +10894,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11890,27 +10930,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11943,85 +10983,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12038,8 +11078,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12157,7 +11197,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12177,30 +11217,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12232,7 +11272,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12240,120 +11280,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12377,263 +11417,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12780,7 +11788,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12797,34 +11805,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12878,119 +11886,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12998,74 +12006,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13075,7 +12119,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13103,404 +12147,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13626,7 +12666,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13639,6 +12679,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13696,12 +12737,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13713,136 +12754,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13874,25 +12917,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13936,156 +12979,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14109,751 +13136,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14925,6 +13934,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14961,22 +13974,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15126,14 +14123,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15206,34 +14195,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 0594d1a4557e..3dc0e9e3984b 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,28 +2,28 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" -"Language-Team: Spanish\n" -"Language: es_ES\n" +"Language-Team: Spanish, Mexico\n" +"Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: es-ES\n" +"X-Crowdin-Language: es-MX\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" -msgstr "endpoint API no encontrado" +msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" -msgstr "El usuario no tiene permiso para ver este modelo" +msgstr "" #: InvenTree/conversion.py:160 #, python-brace-format @@ -32,800 +32,968 @@ msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" -msgstr "Ningún valor proporcionado" +msgstr "" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "No se pudo convertir {original} a {unit}" +msgstr "" #: InvenTree/conversion.py:206 msgid "Invalid quantity supplied" -msgstr "La cantidad suministrada es inválida" +msgstr "" #: InvenTree/conversion.py:220 #, python-brace-format msgid "Invalid quantity supplied ({exc})" -msgstr "La cantidad suministrada es inválida ({exc})" +msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "Detalles del error pueden encontrarse en el panel de administración" +msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" -msgstr "Ingrese la fecha" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +msgstr "" + +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" -msgstr "Notas" +msgstr "" #: InvenTree/format.py:164 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "El valor '{name}' no aparece en formato de patrón" +msgstr "" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " -msgstr "El valor proporcionado no coincide con el patrón requerido: " +msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" -msgstr "Introduzca contraseña" +msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" -msgstr "Ingrese su nueva contraseña" +msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" -msgstr "Confirmar la contraseña" +msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" -msgstr "Confirmar contraseña nueva" +msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" -msgstr "Contraseña anterior" +msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" -msgstr "Email (de nuevo)" +msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" -msgstr "Confirmación de dirección de email" +msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." -msgstr "Debe escribir el mismo correo electrónico cada vez." - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." msgstr "" -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." -msgstr "La dirección de correo electrónico principal proporcionada no es válida." +msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." -msgstr "El dominio de correo electrónico proporcionado no está aprobado." +msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." -msgstr "Registro deshabilitado." +msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" -msgstr "Cantidad proporcionada no válida" +msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" -msgstr "No se ha proporcionado un número de serie" +msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" -msgstr "Serie duplicada" +msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" -msgstr "Rango de grupo inválido: {group}" +msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" -msgstr "Secuencia de grupo inválida: {group}" +msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" -msgstr "Numeros de serie no encontrados" +msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "Los números de serie únicos ({len(serials)}) debe coincidir con la cantidad ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" -msgstr "Eliminar etiquetas HTML de este valor" +msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" -msgstr "Error de conexión" +msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" -msgstr "El servidor respondió con código de estado no válido" +msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" -msgstr "Se ha producido una excepción" +msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" -msgstr "El servidor respondió con un valor de longitud de contenido inválido" +msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" -msgstr "El tamaño de la imagen es demasiado grande" +msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" -msgstr "La descarga de imagen excedió el tamaño máximo" +msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" -msgstr "El servidor remoto devolvió una respuesta vacía" +msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" -msgstr "La URL proporcionada no es un archivo de imagen válido" +msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:19 -msgid "Bulgarian" -msgstr "Búlgaro" - -#: InvenTree/locales.py:20 msgid "Czech" -msgstr "Checo" +msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" -msgstr "Danés" +msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" -msgstr "Alemán" +msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" -msgstr "Griego" +msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" -msgstr "Inglés" +msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" -msgstr "Español" +msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" -msgstr "Español (México)" - -#: InvenTree/locales.py:27 -msgid "Estonian" msgstr "" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" -msgstr "Farsi / Persa" +msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" -msgstr "Finlandés" +msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" -msgstr "Francés" +msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" -msgstr "Hebreo" +msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" -msgstr "Húngaro" +msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" -msgstr "Italiano" +msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" -msgstr "Japonés" +msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" -msgstr "Coreano" +msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" -msgstr "Holandés" +msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" -msgstr "Noruego" +msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" -msgstr "Polaco" +msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" -msgstr "Portugués" +msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" -msgstr "Portugués (Brasileño)" - -#: InvenTree/locales.py:43 -msgid "Romanian" msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" -msgstr "Ruso" +msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" -msgstr "Eslovaco" +msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" -msgstr "Esloveno" +msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" -msgstr "Serbio" +msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" -msgstr "Sueco" +msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" -msgstr "Tailandés" +msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" -msgstr "Turco" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" -msgstr "Vietnamita" +msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" -msgstr "Chino (Simplificado)" +msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" -msgstr "Chino (Tradicional)" +msgstr "" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Correo electrónico" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Los metadatos deben ser un objeto diccionario de python" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "Metadatos del complemento" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "Campo de metadatos JSON, para uso por complementos externos" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" -msgstr "Patrón con formato incorrecto" +msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" -msgstr "Clave de formato especificado desconocida" +msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" -msgstr "Falta la clave de formato necesaria" +msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" -msgstr "El campo de servidor no puede estar vacío" +msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" -msgstr "La referencia debe coincidir con la expresión regular {pattern}" +msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" -msgstr "El número de referencia es demasiado grande" +msgstr "" + +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" -msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" +msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" -msgstr "Selección no válida" +msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "Nombre" +msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "Descripción" +msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" -msgstr "Descripción (opcional)" +msgstr "" + +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" -msgstr "Ruta" +msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" -msgstr "Notas de Markdown (opcional)" +msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" -msgstr "Datos de código de barras" +msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" -msgstr "Datos de código de barras de terceros" +msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" -msgstr "Hash del Código de barras" +msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" -msgstr "Hash único de datos de código de barras" +msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" -msgstr "Código de barras existente encontrado" +msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" -msgstr "Error de servidor" +msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." -msgstr "Se ha registrado un error por el servidor." +msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" -msgstr "Debe ser un número válido" +msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "Moneda" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "Seleccionar moneda de las opciones disponibles" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nombre de usuario" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Nombre" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Apellido" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" msgstr "" -#: InvenTree/serializers.py:415 -msgid "Email address of the user" +#: InvenTree/serializers.py:102 +msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:439 -msgid "Staff" +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:442 -msgid "Superuser" +#: InvenTree/serializers.py:472 +msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Activo" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "No tiene permiso para cambiar este rol de usuario." - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "Solo los superusuarios pueden crear nuevos usuarios" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "Su cuenta ha sido creada." - -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" +#: InvenTree/serializers.py:542 +msgid "Filename" msgstr "" -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "Bienvenido a InvenTree" - -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:576 msgid "Invalid value" -msgstr "Valor inválido" +msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" -msgstr "Archivo de datos" +msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" -msgstr "Seleccione el archivo para subir" +msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" -msgstr "Tipo de archivo no soportado" +msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" -msgstr "El archivo es demasiado grande" +msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" -msgstr "No hay columnas en el archivo" +msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" -msgstr "No hay filas de datos en el archivo" +msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" -msgstr "No se proporcionaron filas de datos" +msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" -msgstr "No hay columnas de datos proporcionadas" +msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" -msgstr "Falta la columna requerida: '{name}'" +msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" -msgstr "Columna duplicada: '{col}'" +msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" -msgstr "Imagen remota" +msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" -msgstr "URL de imagen remota" +msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" -msgstr "La descarga de imágenes desde la URL remota no está habilitada" +msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" -msgstr "Falló la comprobación en segundo plano del worker" +msgstr "" #: InvenTree/status.py:70 msgid "Email backend not configured" -msgstr "No se ha configurado el backend de correo" +msgstr "" #: InvenTree/status.py:73 msgid "InvenTree system health checks failed" -msgstr "Las comprobaciones de estado del sistema InvenTree fallaron" +msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" -msgstr "Base de datos desconocida" +msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" -msgstr "Unidad física inválida" +msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" -msgstr "No es un código de moneda válido" +msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" -msgstr "El valor excedente no debe ser negativo" +msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" -msgstr "El excedente no debe superar el 100%" +msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" -msgstr "Valor no válido para sobrecarga" +msgstr "" #: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 msgid "Edit User Information" -msgstr "Editar datos del usuario" +msgstr "" #: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 msgid "Set Password" -msgstr "Configurar contraseña" +msgstr "" #: InvenTree/views.py:434 msgid "Password fields must match" -msgstr "Los campos de contraseña deben coincidir" +msgstr "" #: InvenTree/views.py:442 msgid "Wrong password provided" -msgstr "Contraseña incorrecta proporcionada" +msgstr "" #: InvenTree/views.py:650 templates/navbar.html:160 msgid "System Information" -msgstr "Información del sistema" +msgstr "" #: InvenTree/views.py:657 templates/navbar.html:171 msgid "About InvenTree" -msgstr "Acerca de InvenTree" - -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Construcción o Armado Superior" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Emitido por" - -#: build/api.py:125 -msgid "Assigned To" msgstr "" -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" -msgstr "La compilación debe cancelarse antes de poder ser eliminada" +msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" -msgstr "Consumible" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "Opcional" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Montaje" +msgstr "" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "Rastreado" +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 +msgid "Optional" +msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" -msgstr "Asignadas" +msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" -msgstr "Disponible" +msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" -msgstr "Construir órden" +msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -834,928 +1002,717 @@ msgstr "Construir órden" #: templates/InvenTree/settings/sidebar.html:55 #: templates/js/translated/search.js:186 users/models.py:207 msgid "Build Orders" -msgstr "Construir órdenes" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" -msgstr "Opción no válida para la construcción padre" +msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" -msgstr "La parte del pedido de construcción no puede ser modificada" +msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" -msgstr "Número de orden de construcción o armado" +msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" -msgstr "Referencia" +msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" -msgstr "Breve descripción de la construcción (opcional)" +msgstr "" + +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" -#: build/models.py:262 +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" -msgstr "Orden de Construcción o Armado a la que se asigna" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +msgstr "" + +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" -msgstr "Parte" +msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" -msgstr "Seleccionar parte a construir o armar" +msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" -msgstr "Referencia de orden de venta" +msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" -msgstr "Orden de Venta a la que se asigna" +msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" -msgstr "Ubicación de la fuente" +msgstr "" -#: build/models.py:293 +#: build/models.py:231 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)" +msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" -msgstr "Ubicación de destino" +msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" -msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" +msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" -msgstr "Cantidad a crear" +msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" -msgstr "Número de objetos existentes a construir" +msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" -msgstr "Elementos completados" +msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" -msgstr "Número de productos en stock que se han completado" +msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" -msgstr "Estado de la construcción" +msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" -msgstr "Código de estado de construcción" +msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" -msgstr "Numero de lote" +msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" -msgstr "Número de lote de este producto final" +msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" -msgstr "Fecha de Creación" +msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" -msgstr "Fecha límite de finalización" +msgstr "" -#: build/models.py:344 +#: build/models.py:282 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." +msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" -msgstr "Fecha de finalización" +msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" -msgstr "terminado por" +msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" -msgstr "Emitido por" +msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" -msgstr "El usuario que emitió esta orden" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +msgstr "" + +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" -msgstr "Responsable" +msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" -msgstr "Usuario o grupo responsable de esta orden de construcción" +msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" -msgstr "Link externo" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Enlace a URL externa" +msgstr "" -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" -msgstr "Prioridad de construcción" +msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" -msgstr "Prioridad de esta orden de construcción" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +msgstr "" + +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" -msgstr "Código del proyecto" +msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" -msgstr "Código de proyecto para esta orden de ensamble" - -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "El pedido {build} ha sido procesado" +msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" -msgstr "Pedido #[order] ha sido procesado" +msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" -msgstr "No se ha especificado salida de construcción" +msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" -msgstr "La construcción de la salida ya está completa" +msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" -msgstr "La salida de la construcción no coincide con el orden de construcción" +msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" -msgstr "La cantidad debe ser mayor que cero" +msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" -msgstr "La cantidad no puede ser mayor que la cantidad de salida" +msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" +#: build/models.py:1308 +msgid "Build object" msgstr "" -#: build/models.py:1490 -msgid "Build object" -msgstr "Ensamblar equipo" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" -msgstr "Cantidad" +msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" -msgstr "Cantidad requerida para orden de ensamble" +msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 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" +msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, 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})" +msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" -msgstr "Artículo de stock sobreasignado" +msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" -msgstr "Cantidad asignada debe ser mayor que cero" +msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" -msgstr "La cantidad debe ser 1 para el stock serializado" +msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" -msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" +msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" -msgstr "Artículo de stock" +msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" -msgstr "Producto original de stock" +msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" -msgstr "Cantidad de stock a asignar para construir" +msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" -msgstr "Instalar en" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "Artículo de stock de destino" - -#: build/serializers.py:91 -msgid "Build Level" msgstr "" -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Nombre de parte" - -#: build/serializers.py:111 -msgid "Project Code Label" +#: build/models.py:1588 +msgid "Destination stock item" msgstr "" -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" -msgstr "Resultado de la construcción o armado" +msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" -msgstr "La salida de construcción no coincide con la construcción padre" +msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" -msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" +msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" -msgstr "Esta salida de construcción ya ha sido completada" +msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" -msgstr "Esta salida de construcción no está completamente asignada" +msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" -msgstr "Ingrese la cantidad para la producción de la construcción" +msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" -msgstr "Cantidad entera requerida para partes rastreables" +msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 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" +msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" -msgstr "Números de serie" +msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" -msgstr "Introduzca los números de serie de salidas de construcción" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Ubicación" - -#: build/serializers.py:316 -msgid "Stock location for build output" msgstr "" -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" -msgstr "Autoasignar Números de Serie" +msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 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:346 -msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" -msgstr "Los siguientes números seriales ya existen o son inválidos" +msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "Debe proporcionarse una lista de salidas de construcción" +msgstr "" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" -msgstr "Ubicación de almacén para salidas descartadas" +msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" -msgstr "Descartar asignaciones" +msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" +msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" -msgstr "Razón para descartar la salida de ensamble(s)" +msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "Ubicación para las salidas de construcción completadas" +msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "Estado" +msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" -msgstr "Aceptar Asignación Incompleta" +msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Completar salidas si el inventario no se ha asignado completamente" +msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" -msgstr "Eliminar salidas incompletas" +msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "Eliminar cualquier salida de construcción que no se haya completado" +msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" -msgstr "No permitido" +msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" -msgstr "Aceptar como consumido por este pedido de construcción" +msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" -msgstr "Liberar antes de completar esta orden de construcción" +msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" -msgstr "Stock sobreasignado" +msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 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" +msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" -msgstr "Algunos artículos de inventario han sido sobreasignados" +msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "Aceptar no asignado" +msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 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" +msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" -msgstr "El stock requerido no ha sido completamente asignado" +msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" -msgstr "Aceptar incompleto" +msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "La cantidad de construcción requerida aún no se ha completado" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:777 -msgid "Build order must be in production state" +#: build/serializers.py:695 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" -msgstr "El orden de construcción tiene salidas incompletas" +msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" -msgstr "Linea de ensamble" +msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" -msgstr "Resultado de la construcción o armado" +msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" -msgstr "La salida de la construcción debe apuntar a la misma construcción" +msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" -msgstr "Crear partida" +msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 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" +msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" -msgstr "El artículo debe estar en stock" +msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "Cantidad disponible ({q}) excedida" +msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 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" +msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 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" +msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" -msgstr "Debe proporcionarse la adjudicación de artículos" - -#: build/serializers.py:1049 -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:1057 -msgid "Exclude Location" -msgstr "Excluir ubicación" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "Excluir artículos de stock de esta ubicación seleccionada" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "Stock intercambiable" - -#: build/serializers.py:1064 -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:1069 -msgid "Substitute Stock" -msgstr "Sustituir stock" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "Permitir la asignación de partes sustitutas" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "Elementos opcionales" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "Asignar artículos de la BOM opcionales para construir la orden" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" msgstr "" -#: build/serializers.py:1181 -msgid "Supplier Part Number" +#: build/serializers.py:965 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Número de parte de fabricante" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Nombre de localización" - -#: build/serializers.py:1184 -msgid "Build Reference" +#: build/serializers.py:973 +msgid "Exclude Location" msgstr "" -#: build/serializers.py:1185 -msgid "BOM Reference" +#: build/serializers.py:974 +msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Paquetes" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID de Parte" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN de la parte" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Descripción de parte" - -#: build/serializers.py:1195 -msgid "BOM Part ID" +#: build/serializers.py:979 +msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1196 -msgid "BOM Part Name" +#: build/serializers.py:980 +msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Número de serie" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" +#: build/serializers.py:985 +msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Cantidad disponible" - -#: build/serializers.py:1283 -msgid "Part Category ID" +#: build/serializers.py:986 +msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1284 -msgid "Part Category Name" +#: build/serializers.py:991 +msgid "Optional Items" msgstr "" -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Rastreable" - -#: build/serializers.py:1292 -msgid "Inherited" +#: build/serializers.py:992 +msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Permitir variantes" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" -msgstr "Item de Lista de Materiales" +msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" -msgstr "Stock Asignado" +msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" -msgstr "En pedido" +msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" -msgstr "En producción" +msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" -msgstr "Stock Disponible" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Pendiente" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Producción" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" msgstr "" -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Cancelado" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Terminado" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" -msgstr "Stock requerido para la orden de construcción" +msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" -msgstr "Orden de construcción atrasada" +msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "El pedido de construcción {bo} está atrasado" +msgstr "" #: build/templates/build/build_base.html:18 msgid "Part thumbnail" -msgstr "Miniatura de parte" +msgstr "" #: build/templates/build/build_base.html:38 #: company/templates/company/supplier_part.html:35 @@ -1764,10 +1721,10 @@ msgstr "Miniatura de parte" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" -msgstr "Acciones para código de barras" +msgstr "" #: build/templates/build/build_base.html:42 #: company/templates/company/supplier_part.html:39 @@ -1776,9 +1733,9 @@ msgstr "Acciones para código de barras" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" -msgstr "Mostrar código QR" +msgstr "" #: build/templates/build/build_base.html:45 #: company/templates/company/supplier_part.html:41 @@ -1787,11 +1744,11 @@ msgstr "Mostrar código QR" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" -msgstr "Desvincular Código de Barras" +msgstr "" #: build/templates/build/build_base.html:47 #: company/templates/company/supplier_part.html:43 @@ -1800,261 +1757,247 @@ msgstr "Desvincular Código de Barras" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" -msgstr "Vincular Código de Barras" +msgstr "" #: build/templates/build/build_base.html:56 #: order/templates/order/order_base.html:46 #: order/templates/order/return_order_base.html:55 #: order/templates/order/sales_order_base.html:55 msgid "Print actions" -msgstr "Imprimir acciones" +msgstr "" #: build/templates/build/build_base.html:60 msgid "Print build order report" -msgstr "Imprimir informe de orden de construcción" +msgstr "" #: build/templates/build/build_base.html:67 msgid "Build actions" -msgstr "Acciones de construcción o armado" +msgstr "" #: build/templates/build/build_base.html:71 msgid "Edit Build" -msgstr "Editar construcción o armado" +msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Construcción duplicada" +msgid "Cancel Build" +msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Cancelar construcción o armado" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" -msgstr "Eliminar construcción o armado" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" msgstr "" -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" -msgstr "Completar construcción" +msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" -msgstr "Descripción de Construcción" +msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "No se han creado salidas para esta orden de construcción" +msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" -msgstr "Orden de construcción está lista para marcar como completada" +msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "La orden de construcción no se puede completar ya que existen salidas pendientes" +msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" -msgstr "La cantidad de construcción requerida aún no se ha completado" +msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" -msgstr "Stock no ha sido asignado completamente a este pedido de construcción" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +msgstr "" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" -msgstr "Fecha objetivo" +msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" -msgstr "Esta construcción vence el %(target)s" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +msgstr "" + +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" -msgstr "Vencido" +msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "Salidas completadas" +msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" -msgstr "Orden de Venta" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "Prioridad" +msgstr "" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" -msgstr "Eliminar Orden de Trabajo" +msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" -msgstr "Código QR de la Orden de Trabajo" +msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "Detalles de Trabajo" +msgstr "" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "Fuente de stock" +msgstr "" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "Las existencias se pueden tomar desde cualquier ubicación disponible." +msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" -msgstr "Destinación" +msgstr "" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "Se requiere ubicación de destino" +msgstr "" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "Partes asignadas" +msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "Lote" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" -msgstr "Creado" +msgstr "" #: build/templates/build/detail.html:144 msgid "No target date set" -msgstr "Sin fecha objetivo" +msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" -msgstr "Completados" +msgstr "" #: build/templates/build/detail.html:153 msgid "Build not complete" -msgstr "Trabajo incompleto" +msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" -msgstr "Órdenes de Trabajo herederas" +msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" -msgstr "Desasignar existencias" +msgstr "" #: build/templates/build/detail.html:182 msgid "Deallocate Stock" -msgstr "Desasignar existencias" +msgstr "" #: build/templates/build/detail.html:184 msgid "Automatically allocate stock to build" -msgstr "Asignar existencias automáticamente a contrucción" +msgstr "" #: build/templates/build/detail.html:185 msgid "Auto Allocate" -msgstr "Auto asignar" +msgstr "" #: build/templates/build/detail.html:187 msgid "Manually allocate stock to build" -msgstr "Asignar existencias manualmente a construcción" +msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "Asignar stock" +msgstr "" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "Pedir partes necesarias" +msgstr "" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 msgid "Order Parts" -msgstr "Partes del pedido" +msgstr "" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" @@ -2062,29 +2005,25 @@ msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" -msgstr "Salidas de Trabajo incompletas" +msgstr "" #: build/templates/build/detail.html:219 msgid "Create new build output" -msgstr "Crear nueva salida de trabajo" +msgstr "" #: build/templates/build/detail.html:220 msgid "New Build Output" -msgstr "Nueva Salida de Trabajo" +msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" -msgstr "Existencias consumidas" +msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" -msgstr "Salidas de Trabajo Completadas" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" msgstr "" -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,2015 +2033,1791 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" -msgstr "Adjuntos" +msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" -msgstr "Notas del Trabajo" +msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" -msgstr "Asignación Completa" +msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" -msgstr "Nueva Orden de Trabajo" +msgstr "" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "Configuración de Pedido de Trabajo" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Partidas" +msgstr "" #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" -msgstr "Salidas incompletas" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:156 -msgid "No plugin" -msgstr "Sin plugin" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" -msgstr "Formato de archivo no soportado: {fmt}" +msgstr "" #: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "Error al leer el archivo (codificación inválida)" +msgstr "" #: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "Error al leer el archivo (formato no válido)" +msgstr "" #: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "Error leyendo el archivo (dimensión incorrecta)" +msgstr "" #: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "Error al leer el archivo (los datos podrían estar corruptos)" +msgstr "" #: common/forms.py:12 msgid "File" -msgstr "Archivo" +msgstr "" #: common/forms.py:12 msgid "Select file to upload" -msgstr "Seleccione el archivo a cargar" +msgstr "" #: common/forms.py:25 msgid "{name.title()} File" -msgstr "Archivo {name.title()}" +msgstr "" #: common/forms.py:26 #, python-brace-format msgid "Select {name} file to upload" -msgstr "Seleccione el archivo {name} para subir" +msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" -msgstr "Actualizado" +msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" -msgstr "Fecha y hora de la última actualización" +msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" -msgstr "Código único del proyecto" +msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" -msgstr "Descripción del proyecto" +msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" -msgstr "Usuario o grupo responsable de este projecto" +msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" -msgstr "Clave de configuración (debe ser única - mayúsculas y minúsculas)" +msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" -msgstr "Valor de ajuste" +msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" -msgstr "El valor elegido no es una opción válida" +msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" -msgstr "El valor debe ser un valor booleano" +msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" -msgstr "El valor debe ser un entero" +msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" -msgstr "Cadena de clave debe ser única" +msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" -msgstr "Sin grupo" +msgstr "" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" -#: common/models.py:1231 +#: common/models.py:1259 msgid "Restart required" -msgstr "Reinicio requerido" +msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" -msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" +msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" -msgstr "Migraciones pendientes" +msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" -msgstr "Número de migraciones de base de datos pendientes" +msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" -msgstr "Nombre de la instancia del servidor" +msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" -msgstr "Descriptor de cadena para la instancia del servidor" +msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" -msgstr "Usar nombre de instancia" +msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" -msgstr "Utilice el nombre de la instancia en la barra de título" +msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" -msgstr "Restringir mostrar 'acerca de'" +msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" -msgstr "Mostrar la modal `about` solo para superusuarios" +msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" -msgstr "Nombre de empresa" +msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" -msgstr "Nombre interno de empresa" +msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" -msgstr "URL Base" +msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" -msgstr "URL base para la instancia del servidor" +msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" -msgstr "Moneda predeterminada" - -#: common/models.py:1277 -msgid "Select base currency for pricing calculations" -msgstr "Seleccione la moneda base para los cálculos de precios" - -#: common/models.py:1283 -msgid "Supported Currencies" msgstr "" -#: common/models.py:1284 -msgid "List of supported currency codes" +#: common/models.py:1305 +msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" -msgstr "Intervalo de actualización de moneda" +msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 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)" +msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" -msgstr "días" +msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" -msgstr "Plugin de Actualización de Moneda" +msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" -msgstr "Plugin de actualización de moneda a usar" +msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" -msgstr "Descargar desde URL" +msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 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" +msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" -msgstr "Límite de tamaño de descarga" +msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" -msgstr "Tamaño máximo de descarga permitido para la imagen remota" +msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" -msgstr "Agente de usuario usado para descargar desde la URL" +msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 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)" +msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" -msgstr "Validación estricta de URL" +msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" -msgstr "Requerir especificación de esquema al validar URLs" +msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" -msgstr "Requiere confirmación" +msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." -msgstr "Requiere confirmación explícita del usuario para ciertas acciones." +msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" -msgstr "Profundidad del árbol" +msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "Profundidad de árbol predeterminada para treeview. Los niveles más profundos pueden ser cargados perezosamente a medida que son necesarios." +msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" -msgstr "Actualizar intervalo de actualización" +msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" -msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" +msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" -msgstr "Copia de seguridad automática" +msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 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" +msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" -msgstr "Intervalo de respaldo automático" +msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" -msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" +msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" -msgstr "Intervalo de eliminación de tareas" +msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 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" +msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" -msgstr "Intervalo de eliminación de registro de errores" +msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 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" +msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" -msgstr "Intervalo de eliminación de notificaciones" +msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 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" +msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "Soporte de código de barras" +msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 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" +msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" -msgstr "Retraso de entrada de código de barras" - -#: common/models.py:1401 -msgid "Barcode input processing delay time" -msgstr "Tiempo de retraso en la lectura de códigos de barras" - -#: common/models.py:1407 -msgid "Barcode Webcam Support" -msgstr "Soporte para Webcam de código de barras" - -#: common/models.py:1408 -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/models.py:1413 -msgid "Barcode Show Data" msgstr "" -#: common/models.py:1414 -msgid "Display barcode data in browser as text" +#: common/models.py:1422 +msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1419 -msgid "Barcode Generation Plugin" +#: common/models.py:1428 +msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" +#: common/models.py:1429 +msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" -msgstr "Revisiones de partes" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "Habilitar campo de revisión para parte" - -#: common/models.py:1431 -msgid "Assembly Revision Only" msgstr "" -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" +#: common/models.py:1435 +msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" +#: common/models.py:1440 +msgid "IPN Regex" msgstr "" -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" +#: common/models.py:1441 +msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1443 -msgid "IPN Regex" -msgstr "Regex IPN" - #: common/models.py:1444 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Patrón de expresión regular para IPN de la parte coincidente" - -#: common/models.py:1447 msgid "Allow Duplicate IPN" -msgstr "Permitir IPN duplicado" +msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" -msgstr "Permitir que varias partes compartan el mismo IPN" +msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" -msgstr "Permitir editar IPN" +msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" -msgstr "Permite cambiar el valor de IPN mientras se edita una parte" +msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" -msgstr "Copiar parte de datos BOM" +msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" -msgstr "Copiar datos BOM por defecto al duplicar una parte" +msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" -msgstr "Copiar parámetros de parte" +msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" -msgstr "Copiar datos de parámetro por defecto al duplicar una parte" +msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" -msgstr "Copiar parte de datos de prueba" +msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" -msgstr "Copiar datos de parámetro por defecto al duplicar una parte" +msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" -msgstr "Copiar plantillas de parámetros de categoría" +msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" -msgstr "Copiar plantillas de parámetros de categoría al crear una parte" +msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" -msgstr "Plantilla" +msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" -msgstr "Las partes son plantillas por defecto" +msgstr "" + +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" -#: common/models.py:1490 +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" -msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" +msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" -msgstr "Componente" +msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" -msgstr "Las partes pueden ser usadas como subcomponentes por defecto" +msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" -msgstr "Comprable" +msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" -msgstr "Las partes son comprables por defecto" +msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" -msgstr "Vendible" +msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" -msgstr "Las partes se pueden vender por defecto" +msgstr "" + +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" -#: common/models.py:1514 +#: common/models.py:1511 msgid "Parts are trackable by default" -msgstr "Las partes son rastreables por defecto" +msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" -msgstr "Las partes son virtuales por defecto" +msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" -msgstr "Mostrar importación en vistas" +msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" -msgstr "Mostrar el asistente de importación en algunas vistas de partes" +msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" -msgstr "Mostrar partes relacionadas" +msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" -msgstr "Mostrar partes relacionadas para una parte" +msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" -msgstr "Datos iniciales de existencias" +msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 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" +msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" -msgstr "Datos iniciales del proveedor" +msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 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" +msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" -msgstr "Formato de visualización de Nombre de Parte" +msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" -msgstr "Formato para mostrar el nombre de la parte" +msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" -msgstr "Icono por defecto de la categoría de parte" +msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 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)" +msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" -msgstr "Forzar unidades de parámetro" +msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 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" +msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" -msgstr "Mínimo de lugares decimales en el precio" +msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 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" +msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" -msgstr "Máximo de lugares decimales en el precio" +msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 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" +msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" -msgstr "Usar precios de proveedor" +msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" +msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" -msgstr "Anulación del historial de compra" +msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" +msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" -msgstr "Usar precio del artículo de almacén" +msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 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" +msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" -msgstr "Edad del precio del artículo de almacén" +msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 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" +msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" -msgstr "Usar precios variantes" +msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" -msgstr "Incluir variantes de precios en los cálculos generales de precios" +msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" -msgstr "Solo variantes activas" +msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" -msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" +msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" -msgstr "Intervalo de reconstrucción de precios" +msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 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" +msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" -msgstr "Precios internos" +msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" -msgstr "Habilitar precios internos para partes" +msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" -msgstr "Anulación del precio interno" +msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" -msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" +msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" -msgstr "Habilitar impresión de etiquetas" +msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" -msgstr "Habilitar impresión de etiquetas desde la interfaz web" +msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" -msgstr "PPP de la imagen de etiqueta" +msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 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" +msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" -msgstr "Habilitar informes" +msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" -msgstr "Habilitar generación de informes" +msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" -msgstr "Modo de depuración" +msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" -msgstr "Generar informes en modo de depuración (salida HTML)" +msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" -msgstr "Tamaño de página" +msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" -msgstr "Tamaño de página predeterminado para informes PDF" +msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" -msgstr "Habilitar informes de prueba" +msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" -msgstr "Habilitar generación de informes de prueba" +msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" -msgstr "Adjuntar informes de prueba" +msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "Al imprimir un informe de prueba, adjuntar una copia del informe de prueba al artículo de almacén asociado" +msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" -msgstr "Seriales únicos globalmente" +msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 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" +msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" -msgstr "Autollenar números de serie" +msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" -msgstr "Autorellenar números de serie en formularios" +msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" -msgstr "Eliminar existencias agotadas" +msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" -msgstr "Plantilla de código de lote" +msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 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" +msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" -msgstr "Expiración de stock" +msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" -msgstr "Habilitar la funcionalidad de expiración de stock" +msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" -msgstr "Vender existencias caducadas" +msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" -msgstr "Permitir venta de existencias caducadas" +msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" -msgstr "Tiempo histórico de Stock" +msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 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" +msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" -msgstr "Crear Stock Caducado" +msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" -msgstr "Permitir crear con stock caducado" +msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" -msgstr "Control de Stock" +msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" -msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" +msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" -msgstr "Icono por defecto de ubicación de almacén" +msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 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)" +msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" -msgstr "Mostrar Articulos de Stock Instalados" +msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" -msgstr "Mostrar los artículos de stock instalados en las tablas de stock" +msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" -msgstr "Patrón de Referencia de Ordenes de Armado" +msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" -msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" +msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" -msgstr "Habilitar órdenes de devolución" +msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" -msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" +msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" -msgstr "Patrón de referencia de orden de devolución" +msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" -msgstr "Editar ordenes de devolución completadas" +msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 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" +msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" -msgstr "Patrón de Referencia de Ordenes de Venta" +msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" -msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" +msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" -msgstr "Envío Predeterminado de Ordenes de Venta" +msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" -msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" +msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" -msgstr "Editar Ordenes de Venta Completados" - -#: common/models.py:1908 -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/models.py:1914 -msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1857 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" -msgstr "Patrón de Referencia de Orden de Compra" +msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" -msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" +msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" -msgstr "Editar Ordenes de Compra Completados" +msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" -msgstr "Autocompletar Ordenes de compra" +msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" -msgstr "Habilitar función de contraseña olvidada" - -#: common/models.py:1954 -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/models.py:1959 -msgid "Enable registration" -msgstr "Habilitar registro" - -#: common/models.py:1960 -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/models.py:1965 -msgid "Enable SSO" -msgstr "Habilitar SSO" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "Habilitar SSO en las páginas de inicio de sesión" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "Habilitar registro SSO" - -#: common/models.py:1973 -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/models.py:1979 -msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +#: common/models.py:1895 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1987 -msgid "SSO group key" +#: common/models.py:1900 +msgid "Enable registration" msgstr "" -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" +#: common/models.py:1901 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1995 -msgid "SSO group map" +#: common/models.py:1906 +msgid "Enable SSO" msgstr "" -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +#: common/models.py:1907 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:2003 -msgid "Remove groups outside of SSO" +#: common/models.py:1912 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +#: common/models.py:1914 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" -msgstr "Email requerido" +msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" -msgstr "Requiere usuario para suministrar correo al registrarse" +msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" -msgstr "Auto-rellenar usuarios SSO" +msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" -msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" +msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" -msgstr "Correo dos veces" +msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" -msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" +msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" -msgstr "Contraseña dos veces" +msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" -msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" +msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" -msgstr "Dominios permitidos" +msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" -msgstr "Grupo al registrarse" +msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" -msgstr "Forzar MFA" +msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." -msgstr "Los usuarios deben utilizar seguridad multifactor." +msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" -msgstr "Comprobar complementos al iniciar" +msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 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" +msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" -msgstr "Habilitar integración de URL" +msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" -msgstr "Habilitar plugins para añadir rutas de URL" +msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" -msgstr "Habilitar integración de navegación" +msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" -msgstr "Habilitar plugins para integrar en la navegación" +msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" -msgstr "Habilitar integración de la aplicación" +msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" -msgstr "Habilitar plugins para añadir aplicaciones" +msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" -msgstr "Habilitar integración de programación" +msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" -msgstr "Habilitar plugins para ejecutar tareas programadas" +msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" -msgstr "Habilitar integración de eventos" +msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" -msgstr "Habilitar plugins para responder a eventos internos" +msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" -msgstr "Habilitar códigos de proyecto" +msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" -msgstr "Habilitar códigos de proyecto para rastrear proyectos" +msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" -msgstr "Excluir Ubicaciones Externas" +msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" -msgstr "Intervalo de borrado de informe" +msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" -msgstr "Mostrar nombres completos de los usuarios" +msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" -msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" +msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" -msgstr "Tecla de ajustes (debe ser única - mayúsculas y minúsculas" +msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" -msgstr "Ocultar partes inactivas" +msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "Ocultar partes inactivas en los resultados mostrados en la página de inicio" +msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" -msgstr "Mostrar partes suscritas" +msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" -msgstr "Mostrar las partes suscritas en la página principal" +msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" -msgstr "Mostrar categorías suscritas" +msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" -msgstr "Mostrar categorías de partes suscritas en la página de inicio" +msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" -msgstr "Mostrar últimas partes" +msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" -msgstr "Mostrar las últimas partes en la página de inicio" +msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" -msgstr "Mostrar BOMs que esperan validación en la página de inicio" +msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" -msgstr "Mostrar cambios recientes de stock" +msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" -msgstr "Mostrar artículos de stock recientemente modificados en la página de inicio" +msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" -msgstr "Mostrar stock bajo" +msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" -msgstr "Mostrar artículos de stock bajo en la página de inicio" +msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" -msgstr "Mostrar stock agotado" +msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" -msgstr "Mostrar artículos agotados en la página de inicio" +msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" -msgstr "Mostrar stock necesario" +msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" -msgstr "Mostrar artículos de stock necesarios para trabajos en la página de inicio" +msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" -msgstr "Mostrar stock caducado" +msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" -msgstr "Mostrar artículos de stock caducados en la página de inicio" +msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" -msgstr "Mostrar stock obsoleto" +msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" -msgstr "Mostrar artículos de stock obsoletos en la página de inicio" +msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" -msgstr "Mostrar trabajos pendientes" +msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" -msgstr "Mostrar trabajos pendientes en la página de inicio" +msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" -msgstr "Mostrar trabajos vencidos" +msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" -msgstr "Mostrar trabajos pendientes en la página de inicio" +msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" -msgstr "Mostrar Órdenes de Compra Pendientes" +msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" -msgstr "Mostrar las OC destacadas en la página de inicio" +msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" -msgstr "Mostrar OC atrasadas" +msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" -msgstr "Mostrar las OC vencidas en la página de inicio" +msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" -msgstr "Mostrar OV pendiemtes" +msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" -msgstr "Mostrar OV pendientes en la página de inicio" +msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" -msgstr "Mostrar OV atrasadas" +msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" -msgstr "Mostrar OV atrasadas en la página de inicio" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" -msgstr "Mostrar novedades" +msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" -msgstr "Mostrar las últimas novedades de InvenTree en la página de inicio" +msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" -msgstr "Mostrar etiqueta interior" +msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "Mostrar etiquetas PDF en el navegador, en lugar de descargar como un archivo" +msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" -msgstr "Impresora predeterminada" +msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" -msgstr "Mostrar informe en línea" +msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "Mostrar informes PDF en el navegador, en lugar de descargar como un archivo" +msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" -msgstr "Buscar partes" +msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "Buscar partes de proveedor" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" -msgstr "Buscar Partes del Fabricante" +msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" -msgstr "Ocultar Partes Inactivas" +msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" -msgstr "Excluir las partes inactivas de la ventana de previsualización de búsqueda" +msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" -msgstr "Buscar categorías" +msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" -msgstr "Mostrar categorias de la parte en la ventana de previsualización de búsqueda" +msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" -msgstr "Buscar inventario" +msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" -msgstr "Mostrar artículos del stock en la ventana de previsualización de búsqueda" +msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" -msgstr "Ocultar Artículos del Stock Agotados" +msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" -msgstr "Excluir artículos de stock que no están disponibles en la ventana de previsualización de búsqueda" +msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" -msgstr "Buscar ubicaciones" +msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" -msgstr "Mostrar ubicaciones de almacén en la ventana de vista previa de búsqueda" +msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" -msgstr "Buscar empresas" +msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" -msgstr "Mostrar empresas en la ventana de vista previa de búsqueda" +msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" -msgstr "Buscar Pedidos de Construcción" +msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" -msgstr "Buscar órdenes de compra" +msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" -msgstr "Excluir pedidos de compra inactivos" +msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" -msgstr "Buscar órdenes de venta" +msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" -msgstr "Buscar órdenes de devolución" +msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" -msgstr "Resultados de la vista previa" +msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" -msgstr "Búsqueda usando una expresión regular" +msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" -msgstr "Habilitar expresiones regulares en las consultas de búsqueda" +msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" -msgstr "Búsqueda por palabra completa" +msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" -msgstr "Las consultas de búsqueda devuelven resultados para palabras enteras coincidentes" +msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" -msgstr "Mostrar cantidad en formularios" +msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" -msgstr "Mostrar la cantidad de partes disponibles en algunos formularios" +msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" -msgstr "Formularios de cierre de teclas de escape" +msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" -msgstr "Usa la clave de escape para cerrar formularios modales" +msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" -msgstr "Barra de navegación fija" +msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" -msgstr "La posición de la barra de navegación se fija en la parte superior de la pantalla" +msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" -msgstr "Formato de Fecha" +msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" -msgstr "Formato preferido para mostrar fechas" +msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" -msgstr "Planificación de partes" +msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" -msgstr "Recibir reportes de error" +msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" -msgstr "Últimas impresoras usadas" +msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Usuario" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" -msgstr "Cantidad de salto de precio" +msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" -msgstr "Precio" +msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" -msgstr "Precio unitario a la cantidad especificada" +msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" -msgstr "Punto final en el que se recibe este webhook" +msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" -msgstr "Nombre para este webhook" +msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" -msgstr "Está activo este webhook" +msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" -msgstr "Token para el acceso" +msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" -msgstr "Clave" +msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" -msgstr "Secreto compartido para HMAC" +msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" -msgstr "ID de mensaje" +msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" -msgstr "Identificador único para este mensaje" +msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" -msgstr "Servidor desde el cual se recibió este mensaje" +msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" -msgstr "Encabezado" +msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" -msgstr "Encabezado del mensaje" +msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" -msgstr "Cuerpo" +msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" -msgstr "Cuerpo de este mensaje" +msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" -msgstr "Endpoint en el que se recibió este mensaje" +msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" -msgstr "Trabajado en" +msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" -msgstr "¿El trabajo en este mensaje ha terminado?" +msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" -msgstr "Título" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Enlace" +msgstr "" -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" -msgstr "Publicado" +msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" -msgstr "Autor" +msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" -msgstr "Resumen" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" -msgstr "Leer" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" -msgstr "¿Esta noticia ya fue leída?" +msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" -msgstr "Imágen" - -#: common/models.py:3040 -msgid "Image file" -msgstr "Archivo de imagen" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" msgstr "" -#: common/models.py:3099 -msgid "Unit symbol must be unique" +#: common/models.py:3044 +msgid "Image file" msgstr "" -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" -msgstr "Nombre de unidad debe ser un identificador válido" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "Nombre de unidad" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "Símbolo" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "Símbolo de unidad opcional" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "Definición" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "Definición de unidad" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Archivo adjunto" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Archivo no encontrado" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Falta enlace externo" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Seleccionar archivo para adjuntar" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Comentario" - -#: common/models.py:3280 -msgid "Attachment comment" msgstr "" -#: common/models.py:3296 -msgid "Upload date" +#: common/models.py:3105 +msgid "Unit name" msgstr "" -#: common/models.py:3297 -msgid "Date the file was uploaded" +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" msgstr "" -#: common/models.py:3301 -msgid "File size" +#: common/models.py:3113 +msgid "Optional unit symbol" msgstr "" -#: common/models.py:3301 -msgid "File size in bytes" +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" msgstr "" -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" +#: common/models.py:3121 +msgid "Unit definition" msgstr "" #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" -msgstr "Nuevo {verbose_name}" +msgstr "" #: common/notifications.py:316 msgid "A new order has been created and assigned to you" -msgstr "Se ha creado un nuevo pedido y se le ha asignado" +msgstr "" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "{verbose_name} cancelado" +msgstr "" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" -msgstr "Artículos Recibidos" +msgstr "" #: common/notifications.py:332 msgid "Items have been received against a purchase order" -msgstr "Los artículos han sido recibidos contra una orden de compra" +msgstr "" #: common/notifications.py:339 msgid "Items have been received against a return order" -msgstr "Los artículos han sido recibidos contra una orden de devolución" +msgstr "" #: common/notifications.py:457 msgid "Error raised by plugin" -msgstr "Error generado por el complemento" +msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" -msgstr "Está en ejecución" +msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" -msgstr "Tareas pendientes" +msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "Tareas Programadas" +msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" -msgstr "Tareas fallidas" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" -msgstr "Identificación de Tarea" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" -msgstr "Identificación de tarea única" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" -msgstr "Bloquear" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" -msgstr "Bloquear hora" +msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" -msgstr "Nombre de la tarea" +msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" -msgstr "Función" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "Nombre de la Función" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Argumentos" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Argumentos de la tarea" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "Argumentos de palabra clave" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "Argumentos de palabra clave de tarea" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nombre de Archivo" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" msgstr "" -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" +#: common/serializers.py:372 +msgid "Function name" msgstr "" -#: common/validators.py:35 -msgid "No attachment model type provided" +#: common/serializers.py:374 +msgid "Arguments" msgstr "" -#: common/validators.py:41 -msgid "Invalid attachment model type" +#: common/serializers.py:374 +msgid "Task arguments" msgstr "" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" +#: common/serializers.py:377 +msgid "Keyword Arguments" msgstr "" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" +#: common/serializers.py:377 +msgid "Task keyword arguments" msgstr "" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Un dominio vacío no está permitido." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Nombre de dominio inválido: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" -msgstr "Subir Archivo" +msgstr "" #: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:119 @@ -4110,19 +3825,19 @@ msgstr "Subir Archivo" #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "Coincidir Campos" +msgstr "" #: common/views.py:84 msgid "Match Items" -msgstr "Coincidir artículos" +msgstr "" #: common/views.py:401 msgid "Fields matching failed" -msgstr "Falló la coincidencia de campos" +msgstr "" #: common/views.py:464 msgid "Parts imported" -msgstr "Partes importadas" +msgstr "" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -4133,583 +3848,561 @@ msgstr "Partes importadas" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "Paso anterior" +msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Empresa" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Empresas" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" -msgstr "Descripción de la empresa" +msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" -msgstr "Descripción de la empresa" +msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" -msgstr "Página web" +msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" -msgstr "URL del sitio web de la empresa" +msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" -msgstr "Teléfono" +msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" -msgstr "Teléfono de contacto" +msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" -msgstr "Correo electrónico de contacto" +msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "Contacto" +msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" -msgstr "Punto de contacto" +msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" -msgstr "Enlace a información externa de la empresa" +msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" -msgstr "¿Vendes artículos a esta empresa?" +msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" -msgstr "¿Compras artículos de esta empresa?" +msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" -msgstr "¿Esta empresa fabrica partes?" +msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" -msgstr "Moneda predeterminada utilizada para esta empresa" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Dirección" +msgstr "" -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Direcciones" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" -msgstr "Seleccionar empresa" +msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" -msgstr "Título de dirección" +msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" -msgstr "Título que describe la entrada de dirección" +msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" -msgstr "Dirección principal" +msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" -msgstr "Establecer como dirección principal" +msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" -msgstr "Línea 1" +msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" -msgstr "Dirección línea 1" +msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" -msgstr "Línea 2" +msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" -msgstr "Dirección línea 2" +msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" -msgstr "Código postal" +msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" -msgstr "Ciudad/región" +msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" -msgstr "Código postal de ciudad/región" +msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" -msgstr "Estado/provincia" +msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" -msgstr "Estado o provincia" +msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" -msgstr "País" +msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" -msgstr "Dirección de país" +msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" -msgstr "Notas de envío de mensajería" +msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" -msgstr "Notas para el mensajero de envío" +msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" -msgstr "Notas de envío internas" +msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" -msgstr "Notas de envío para uso interno" +msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" -msgstr "Enlace a información de dirección (externa)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Parte del fabricante" +msgstr "" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" -msgstr "Parte base" +msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" -msgstr "Seleccionar parte" +msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" -msgstr "Fabricante" +msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" -msgstr "Seleccionar fabricante" +msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" -msgstr "URL para el enlace de parte del fabricante externo" +msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" -msgstr "Descripción de la parte del fabricante" +msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" -msgstr "Nombre del parámetro" +msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" -msgstr "Valor" +msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" -msgstr "Valor del parámetro" +msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" -msgstr "Unidades" +msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" -msgstr "Unidades de parámetro" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Parte del proveedor" +msgstr "" -#: company/models.py:719 +#: company/models.py:731 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" +msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" -msgstr "Las unidades de paquete deben ser mayor que cero" +msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" -msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" +msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" -msgstr "Proveedor" +msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" -msgstr "Seleccionar proveedor" +msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" -msgstr "Unidad de mantenimiento de stock de proveedores" +msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" -msgstr "Seleccionar parte del fabricante" +msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" -msgstr "URL del enlace de parte del proveedor externo" +msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" -msgstr "Descripción de la parte del proveedor" +msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" -msgstr "Nota" +msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" -msgstr "costo base" +msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" -msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" +msgstr "" + +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" -#: company/models.py:853 +#: company/models.py:864 msgid "Part packaging" -msgstr "Embalaje de partes" +msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" -msgstr "Cantidad de paquete" +msgstr "" -#: company/models.py:860 +#: company/models.py:871 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." +msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" -msgstr "múltiple" +msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" -msgstr "Pedido múltiple" +msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" -msgstr "Cantidad disponible del proveedor" +msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" -msgstr "Disponibilidad actualizada" +msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" -msgstr "Fecha de última actualización de los datos de disponibilidad" - -#: company/models.py:1027 -msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" -msgstr "Moneda predeterminada utilizada para este proveedor" - -#: company/serializers.py:210 -msgid "Company Name" msgstr "" -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" -msgstr "En Stock" +msgstr "" #: company/templates/company/company_base.html:16 #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" -msgstr "Inactivo" +msgstr "" #: company/templates/company/company_base.html:27 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" -msgstr "Crear orden de compra" +msgstr "" #: company/templates/company/company_base.html:33 msgid "Company actions" -msgstr "Acciones de empresa" +msgstr "" #: company/templates/company/company_base.html:38 msgid "Edit company information" -msgstr "Editar datos de la empresa" +msgstr "" #: company/templates/company/company_base.html:39 #: templates/js/translated/company.js:445 msgid "Edit Company" -msgstr "Editar empresa" +msgstr "" #: company/templates/company/company_base.html:43 msgid "Delete company" -msgstr "Eliminar empresa" +msgstr "" #: company/templates/company/company_base.html:44 #: company/templates/company/company_base.html:168 msgid "Delete Company" -msgstr "Eliminar Empresa" +msgstr "" #: company/templates/company/company_base.html:53 #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" -msgstr "Imagen de parte" +msgstr "" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "Cargar nueva imagen" +msgstr "" #: company/templates/company/company_base.html:64 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "Descargar desde URL" +msgstr "" #: company/templates/company/company_base.html:66 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "Borrar imagen" +msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" -msgstr "Cliente" +msgstr "" #: company/templates/company/company_base.html:117 msgid "Uses default currency" -msgstr "Usa la moneda predeterminada" +msgstr "" + +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" #: company/templates/company/company_base.html:131 msgid "Phone" -msgstr "Teléfono" +msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "Eliminar imagen" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "Eliminar imagen asociada a esta empresa" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" -msgstr "Eliminar" +msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "Subir Imagen" +msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "Descargar imagen" +msgstr "" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 #: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 msgid "Supplier Parts" -msgstr "Partes de Proveedor" +msgstr "" #: company/templates/company/detail.html:19 msgid "Create new supplier part" -msgstr "Crear nueva parte del proveedor" +msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" -msgstr "Nueva Parte de Proveedor" +msgstr "" #: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 #: templates/js/translated/search.js:151 msgid "Manufacturer Parts" -msgstr "Partes del fabricante" +msgstr "" #: company/templates/company/detail.html:45 msgid "Create new manufacturer part" -msgstr "Crear nueva parte de fabricante" +msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" -msgstr "Nueva parte de fabricante" +msgstr "" #: company/templates/company/detail.html:65 msgid "Supplier Stock" -msgstr "Stock del Proveedor" +msgstr "" #: company/templates/company/detail.html:75 #: company/templates/company/sidebar.html:12 @@ -4717,50 +4410,50 @@ msgstr "Stock del Proveedor" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 #: users/models.py:208 msgid "Purchase Orders" -msgstr "Ordenes de compra" +msgstr "" #: company/templates/company/detail.html:79 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" -msgstr "Crear nueva orden de compra" +msgstr "" #: company/templates/company/detail.html:80 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "Nueva orden de compra" +msgstr "" #: company/templates/company/detail.html:101 #: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 #: users/models.py:209 msgid "Sales Orders" -msgstr "Órdenes de venta" +msgstr "" #: company/templates/company/detail.html:105 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "Crear Orden de Venta" +msgstr "" #: company/templates/company/detail.html:106 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "Nueva orden de venta" +msgstr "" #: company/templates/company/detail.html:126 msgid "Assigned Stock" -msgstr "Stock asignado" +msgstr "" #: company/templates/company/detail.html:142 #: company/templates/company/sidebar.html:29 @@ -4771,529 +4464,435 @@ msgstr "Stock asignado" #: templates/js/translated/search.js:232 templates/navbar.html:65 #: users/models.py:210 msgid "Return Orders" -msgstr "Ordenes de devolución" +msgstr "" #: company/templates/company/detail.html:146 #: order/templates/order/return_orders.html:20 msgid "Create new return order" -msgstr "Crear nueva orden de devolución" +msgstr "" #: company/templates/company/detail.html:147 #: order/templates/order/return_orders.html:21 msgid "New Return Order" -msgstr "Nueva orden de devolución" +msgstr "" #: company/templates/company/detail.html:168 msgid "Company Notes" -msgstr "Notas de la empresa" +msgstr "" #: company/templates/company/detail.html:183 msgid "Company Contacts" -msgstr "Contactos de la empresa" +msgstr "" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "Añadir contacto" +msgstr "" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "Direcciones de la empresa" +msgstr "" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "Añadir dirección" +msgstr "" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 msgid "Manufacturers" -msgstr "Fabricantes" +msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" -msgstr "Pedir ítem" +msgstr "" #: company/templates/company/manufacturer_part.html:39 #: templates/js/translated/company.js:1343 msgid "Edit manufacturer part" -msgstr "Editar fabricante de la parte" +msgstr "" #: company/templates/company/manufacturer_part.html:43 #: templates/js/translated/company.js:1344 msgid "Delete manufacturer part" -msgstr "Eliminar fabricante de la parte" +msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" -msgstr "Componente interno" +msgstr "" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "No hay información del fabricante disponible" +msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" -msgstr "Proveedores" +msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" -msgstr "Parámetros" +msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" -msgstr "Nuevo parámetro" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" msgstr "" -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" -msgstr "Añadir parámetro" +msgstr "" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "Partes Manufacturadas" +msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "Partes suministradas" +msgstr "" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "Elementos de stock suministrados" +msgstr "" #: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "Elementos de Stock Asignados" +msgstr "" #: company/templates/company/sidebar.html:33 msgid "Contacts" -msgstr "Contactos" +msgstr "" + +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" -msgstr "Acciones de partes del proveedor" +msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" -msgstr "Pedir ítem" +msgstr "" #: company/templates/company/supplier_part.html:60 #: company/templates/company/supplier_part.html:61 msgid "Update Availability" -msgstr "Actualizar disponibilidad" +msgstr "" #: company/templates/company/supplier_part.html:63 #: company/templates/company/supplier_part.html:64 #: templates/js/translated/company.js:294 msgid "Edit Supplier Part" -msgstr "Editar Parte del Proveedor" +msgstr "" #: company/templates/company/supplier_part.html:68 #: company/templates/company/supplier_part.html:69 #: templates/js/translated/company.js:269 msgid "Duplicate Supplier Part" -msgstr "Duplicar parte del proveedor" +msgstr "" #: company/templates/company/supplier_part.html:73 msgid "Delete Supplier Part" -msgstr "Eliminar parte del proveedor" +msgstr "" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "Eliminar parte del proveedor" +msgstr "" #: company/templates/company/supplier_part.html:133 msgid "No supplier information available" -msgstr "No hay información de proveedor disponible" +msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" -msgstr "Stock del Proveedor" +msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" -msgstr "Crear nuevo artículo de stock" +msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" -msgstr "Nuevo artículo de stock" +msgstr "" #: company/templates/company/supplier_part.html:223 msgid "Supplier Part Orders" -msgstr "Pedidos de partes al proveedor" +msgstr "" #: company/templates/company/supplier_part.html:246 msgid "Pricing Information" -msgstr "Información de precios" +msgstr "" #: company/templates/company/supplier_part.html:251 #: templates/js/translated/company.js:398 #: templates/js/translated/pricing.js:684 msgid "Add Price Break" -msgstr "Agregar descuento de precio" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" msgstr "" -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" -msgstr "Código QR de parte del Proveedor" +msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" -msgstr "Elementos de stock" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:9 msgid "Supplier Part Pricing" -msgstr "Precio de parte del proveedor" +msgstr "" #: company/views.py:32 msgid "New Supplier" -msgstr "Nuevo Proveedor" +msgstr "" #: company/views.py:38 msgid "New Manufacturer" -msgstr "Nuevo Fabricante" +msgstr "" #: company/views.py:43 templates/InvenTree/search.html:210 #: templates/navbar.html:60 msgid "Customers" -msgstr "Clientes" +msgstr "" #: company/views.py:44 msgid "New Customer" -msgstr "Nuevo Cliente" - -#: company/views.py:52 -msgid "New Company" -msgstr "Nueva empresa" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Colocado" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Datos" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "Errores" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Válido" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "Copias" +msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" -msgstr "Conectado" +msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" -msgstr "Desconocido" +msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "Impresión" +msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "Sin archivos multimedia" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "Desconectado" +msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" -msgstr "Impresora de Etiquetas" +msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "Imprime directamente etiquetas para varios artículos." +msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "Ubicación de la Impresora" +msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "Nombre de la máquina" +msgstr "" #: machine/models.py:29 msgid "Machine Type" -msgstr "Tipo de Máquina" +msgstr "" #: machine/models.py:29 msgid "Type of machine" -msgstr "Tipo de máquina" +msgstr "" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "Controlador" +msgstr "" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "Controlador usado para la máquina" +msgstr "" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "Las máquinas pueden ser desactivadas" +msgstr "" #: machine/models.py:95 msgid "Driver available" -msgstr "Controlador disponible" +msgstr "" #: machine/models.py:100 msgid "No errors" -msgstr "Sin errores" +msgstr "" #: machine/models.py:105 msgid "Initialized" -msgstr "Inicializado" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" #: machine/models.py:117 msgid "Machine status" -msgstr "Estado de máquina" +msgstr "" #: machine/models.py:145 msgid "Machine" -msgstr "Máquina" +msgstr "" #: machine/models.py:151 msgid "Machine Config" @@ -5304,834 +4903,712 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" -msgstr "Precio Total" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "Estado del pedido" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Referencia del pedido" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" -msgstr "No se encontró ninguna orden de compra coincidente" +msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" -msgstr "Orden" +msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" -msgstr "Orden de compra" +msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" -msgstr "Orden de devolución" +msgstr "" #: order/models.py:90 msgid "Total price for this order" -msgstr "Precio total para este pedido" +msgstr "" #: order/models.py:95 order/serializers.py:71 msgid "Order Currency" -msgstr "Moneda de pedido" +msgstr "" #: order/models.py:98 order/serializers.py:72 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)" +msgstr "" #: order/models.py:246 msgid "Contact does not match selected company" -msgstr "El contacto no coincide con la empresa seleccionada" +msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" -msgstr "Descripción del pedido (opcional)" +msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" -msgstr "Seleccione el código del proyecto para este pedido" +msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" -msgstr "Enlace a Url externa" +msgstr "" -#: order/models.py:310 +#: order/models.py:299 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." +msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" -msgstr "Creado por" +msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" -msgstr "Usuario o grupo responsable de este pedido" +msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" -msgstr "Punto de contacto para este pedido" +msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" -msgstr "Dirección de la empresa para este pedido" +msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" -msgstr "Referencia del pedido" +msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" -msgstr "Estado de la orden de compra" +msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" -msgstr "Empresa de la cual se están encargando los artículos" +msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" -msgstr "Referencia del proveedor" +msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" -msgstr "Código de referencia de pedido del proveedor" +msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" -msgstr "recibido por" +msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" -msgstr "Fecha de emisión" +msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" -msgstr "Fecha de expedición del pedido" +msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" -msgstr "La fecha de pedido fue completada" +msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" -msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" +msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" -msgstr "La cantidad debe ser un número positivo" +msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" -msgstr "Empresa a la que se venden los artículos" - -#: order/models.py:1003 -msgid "Sales order status" msgstr "" -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " -msgstr "Referencia del cliente " +msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" -msgstr "Código de referencia de pedido del cliente" +msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" -msgstr "Fecha de envío" +msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" -msgstr "enviado por" - -#: order/models.py:1077 -msgid "Order is already complete" msgstr "" -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" -msgstr "Sólo una orden abierta puede ser marcada como completa" +msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "El pedido no se puede completar porque hay envíos incompletos" +msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" -msgstr "El pedido no se puede completar porque hay partidas incompletas" +msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" -msgstr "Cantidad del artículo" +msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" -msgstr "Referencia de partida" +msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" -msgstr "Notas de partida" +msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 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)" +msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" -msgstr "Descripción de partida (opcional)" +msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" -msgstr "Contexto" +msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" -msgstr "Contexto adicional para esta línea" +msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" -msgstr "Precio unitario" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" -msgstr "La parte del proveedor debe coincidir con el proveedor" +msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" -msgstr "eliminado" +msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" -msgstr "Parte del proveedor" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +msgstr "" + +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" -msgstr "Recibido" +msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" -msgstr "Número de artículos recibidos" +msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" -msgstr "Precio de Compra" +msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" -msgstr "Precio de compra unitario" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "¿Dónde quiere el comprador almacenar este objeto?" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:1616 -msgid "Sales Order Line Item" +#: order/models.py:1434 +msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" -msgstr "Una parte virtual no puede ser asignada a un pedido de venta" +msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 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" +msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" -msgstr "Precio de Venta" +msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" -msgstr "Precio de venta unitario" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Enviado" +msgstr "" -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" -msgstr "Cantidad enviada" - -#: order/models.py:1751 -msgid "Sales Order Shipment" msgstr "" -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" -msgstr "Fecha del envío" +msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" -msgstr "Fecha de entrega" +msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" -msgstr "Fecha de entrega del envío" +msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" -msgstr "Revisado por" +msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" -msgstr "Usuario que revisó este envío" +msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" -msgstr "Envío" +msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" -msgstr "Número de envío" +msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" -msgstr "Número de Seguimiento" +msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" -msgstr "Información de seguimiento del envío" +msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" -msgstr "Número de factura" +msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" -msgstr "Número de referencia para la factura asociada" +msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" -msgstr "El envío ya ha sido enviado" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "El envío no tiene artículos de stock asignados" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:1941 -msgid "Sales Order Allocation" +#: order/models.py:1721 +msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" -msgstr "El artículo de stock no ha sido asignado" +msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 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" +msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" -msgstr "No se puede asignar stock a una línea sin una parte" +msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "La cantidad de asignación no puede exceder la cantidad de stock" +msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" -msgstr "La cantidad debe ser 1 para el stock serializado" +msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" -msgstr "La orden de venta no coincide con el envío" +msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" -msgstr "El envío no coincide con el pedido de venta" +msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" -msgstr "Línea" +msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" -msgstr "Referencia del envío del pedido de venta" +msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" -msgstr "Ítem" +msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" -msgstr "Seleccionar artículo de stock para asignar" +msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" -msgstr "Especificar la cantidad de asignación de stock" +msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" -msgstr "Referencia de la orden de devolución" +msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" -msgstr "Empresa de la cual se están devolviendo los artículos" +msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" -msgstr "Estado de la orden de devolución" - -#: order/models.py:2362 -msgid "Return Order Line Item" msgstr "" -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" -msgstr "Sólo los artículos serializados pueden ser asignados a una orden de devolución" +msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" -msgstr "Seleccionar el artículo a devolver del cliente" +msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" -msgstr "Fecha de recepción" +msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" -msgstr "La fecha en la que se recibió este artículo de devolución" +msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "Resultado" +msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" -msgstr "Salida para esta partida" - -#: order/models.py:2418 -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:2428 -msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:86 -msgid "Completed Lines" +#: order/models.py:2242 +msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Nombre del proveedor" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" -msgstr "El pedido no puede ser cancelado" +msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" -msgstr "Permitir cerrar el pedido con partidas incompletas" +msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" -msgstr "El pedido tiene partidas incompletas" +msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" -msgstr "El pedido no está abierto" +msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" -msgstr "Moneda del precio de compra" +msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Número de parte interna" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" -msgstr "Debe especificar la parte del proveedor" +msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" -msgstr "La orden de compra debe especificarse" +msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" -msgstr "El proveedor debe coincidir con la orden de compra" +msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" -msgstr "La orden de compra debe coincidir con el proveedor" +msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" -msgstr "Partida" +msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" -msgstr "La partida no coincide con la orden de compra" +msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" -msgstr "Seleccione la ubicación de destino para los artículos recibidos" +msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 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:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "Introduzca números de serie para artículos de almacén entrantes" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "Código de barras" +msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" -msgstr "Código de barras escaneado" +msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" -msgstr "Código de barras en uso" +msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" -msgstr "Debe proporcionarse una cantidad entera para las partes rastreables" +msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" -msgstr "Se deben proporcionar las partidas" +msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" -msgstr "Se requiere ubicación de destino" +msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" -msgstr "Los valores del código de barras deben ser únicos" +msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" -msgstr "Moneda del precio de venta" +msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" -msgstr "No se proporcionaron detalles de envío" +msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" -msgstr "La partida no está asociada con este pedido" +msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" -msgstr "La cantidad debe ser positiva" +msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" -msgstr "Introduzca números de serie para asignar" +msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" -msgstr "El envío ya ha sido enviado" +msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" -msgstr "El envío no está asociado con este pedido" +msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" -msgstr "No se han encontrado coincidencias para los siguientes números de serie" +msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" -msgstr "Los siguientes números de serie ya están asignados" +msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" -msgstr "Partida de orden de devolución" +msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" -msgstr "La partida no coincide con la orden de devolución" +msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" -msgstr "La partida ya ha sido recibida" +msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 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" +msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" -msgstr "Moneda de precio de línea" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Perdida" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Devuelto" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "En progreso" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Devolución" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Reparación" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Reemplazo" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Reembolso" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Rechazo" +msgstr "" #: order/tasks.py:25 msgid "Overdue Purchase Order" -msgstr "Orden de compra atrasada" +msgstr "" #: order/tasks.py:30 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "La orden de compra {po} está atrasada" +msgstr "" #: order/tasks.py:75 msgid "Overdue Sales Order" -msgstr "Orden de venta atrasada" +msgstr "" #: order/tasks.py:80 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "La orden de venta {so} está atrasada" +msgstr "" #: order/templates/order/order_base.html:51 msgid "Print purchase order report" -msgstr "Imprimir informe de orden de compra" +msgstr "" #: order/templates/order/order_base.html:53 #: order/templates/order/return_order_base.html:62 #: order/templates/order/sales_order_base.html:62 msgid "Export order to file" -msgstr "Exportar pedido a archivo" +msgstr "" #: order/templates/order/order_base.html:59 #: order/templates/order/return_order_base.html:72 #: order/templates/order/sales_order_base.html:71 msgid "Order actions" -msgstr "Acciones de pedido" +msgstr "" #: order/templates/order/order_base.html:64 #: order/templates/order/return_order_base.html:76 #: order/templates/order/sales_order_base.html:75 msgid "Edit order" -msgstr "Editar pedido" +msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Duplicar orden" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" -msgstr "Cancelar orden" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" -msgstr "Emitir pedido" +msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" -msgstr "Marcar pedido como completado" +msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" -msgstr "Completar pedido" +msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" -msgstr "Miniatura de la parte del proveedor" +msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" -msgstr "Descripción del pedido" +msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" -msgstr "No hay información disponible sobre el proveedor" +msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" -msgstr "Partidas completadas" +msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" -msgstr "Incompleto" +msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" -msgstr "Emitido" +msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" -msgstr "Costo total" +msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" -msgstr "No se ha podido calcular el costo total" +msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6140,14 +5617,14 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:9 #: templates/patterns/wizard/match_fields.html:8 msgid "Missing selections for the following required columns" -msgstr "Faltan selecciones para las siguientes columnas requeridas" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:20 #: part/templates/part/import_wizard/ajax_match_fields.html:20 #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "Se han encontrado selecciones duplicadas, vea a continuación. Arreglarlas y vuelva a intentar enviarlas." +msgstr "" #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -6155,28 +5632,28 @@ msgstr "Se han encontrado selecciones duplicadas, vea a continuación. Arreglarl #: part/templates/part/import_wizard/match_references.html:21 #: templates/patterns/wizard/match_fields.html:28 msgid "Submit Selections" -msgstr "Enviar selecciones" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:35 #: part/templates/part/import_wizard/ajax_match_fields.html:28 #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "Campos de archivo" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 #: part/templates/part/import_wizard/match_fields.html:42 #: templates/patterns/wizard/match_fields.html:41 msgid "Remove column" -msgstr "Eliminar columna" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:60 #: part/templates/part/import_wizard/ajax_match_fields.html:53 #: part/templates/part/import_wizard/match_fields.html:60 #: templates/patterns/wizard/match_fields.html:59 msgid "Duplicate selection" -msgstr "Duplicar selección" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:71 #: order/templates/order/order_wizard/match_parts.html:52 @@ -6184,44 +5661,44 @@ msgstr "Duplicar selección" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" -msgstr "Eliminar fila" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:12 #: part/templates/part/import_wizard/ajax_match_references.html:12 #: part/templates/part/import_wizard/match_references.html:12 msgid "Errors exist in the submitted data" -msgstr "Existen errores en los datos enviados" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:28 #: part/templates/part/import_wizard/ajax_match_references.html:21 #: part/templates/part/import_wizard/match_references.html:28 msgid "Row" -msgstr "Fila" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:29 msgid "Select Supplier Part" -msgstr "Seleccionar Parte de Proveedor" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" -msgstr "Volver a Pedidos" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "Subir archivo para orden de compra" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "El pedido ya ha sido procesado. Los archivos no se pueden cargar." +msgstr "" #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -6229,1570 +5706,1440 @@ msgstr "El pedido ya ha sido procesado. Los archivos no se pueden cargar." #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "Paso %(step)s de %(count)s" +msgstr "" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "Stock Recibido" +msgstr "" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" -msgstr "Comprar artículos de orden" +msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "Añadir partida" +msgstr "" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "Recibir partidas" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "Líneas Adicionales" +msgstr "" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "Añadir línea adicional" +msgstr "" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "Articulos Recibidos" +msgstr "" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 #: order/templates/order/sales_order_detail.html:139 msgid "Order Notes" -msgstr "Notas del pedido" +msgstr "" #: order/templates/order/return_order_base.html:18 #: order/templates/order/sales_order_base.html:18 msgid "Customer logo thumbnail" -msgstr "Miniatura del logo del cliente" +msgstr "" #: order/templates/order/return_order_base.html:60 msgid "Print return order report" -msgstr "Imprimir informe de orden de devolución" +msgstr "" #: order/templates/order/return_order_base.html:64 #: order/templates/order/sales_order_base.html:64 msgid "Print packing list" -msgstr "Imprimir lista de empaquetado" +msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" -msgstr "Referencia del cliente" +msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" -msgstr "Costo Total" +msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" #: order/templates/order/return_order_sidebar.html:5 msgid "Order Details" -msgstr "Detalles del pedido" +msgstr "" #: order/templates/order/sales_order_base.html:60 msgid "Print sales order report" -msgstr "Imprimir informe de orden de venta" +msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" -msgstr "Enviar artículos" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" -msgstr "Ordenes de venta completas" +msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" -msgstr "Esta orden de venta no ha sido completamente asignada" +msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" -msgstr "Envíos completados" +msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "Artículos de Pedidos de Venta" +msgstr "" #: order/templates/order/sales_order_detail.html:67 #: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 msgid "Pending Shipments" -msgstr "Envíos pendientes" +msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" -msgstr "Acciones" +msgstr "" #: order/templates/order/sales_order_detail.html:80 msgid "New Shipment" -msgstr "Nuevo Envío" +msgstr "" #: order/views.py:120 msgid "Match Supplier Parts" -msgstr "Coincidir partes de proveedor" +msgstr "" #: order/views.py:406 msgid "Sales order not found" -msgstr "Orden de venta no encontrada" +msgstr "" #: order/views.py:412 msgid "Price not found" -msgstr "Precio no encontrado" +msgstr "" #: order/views.py:415 #, python-brace-format msgid "Updated {part} unit-price to {price}" -msgstr "Actualizado el precio unitario de {part} a {price}" +msgstr "" #: order/views.py:421 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "Actualizado el precio unitario de {part} a {price} y la cantidad a {qty}" +msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" -msgstr "Revisión" +msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" -msgstr "Palabras claves" +msgstr "" #: part/admin.py:60 msgid "Part Image" -msgstr "Imagen de parte" +msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" -msgstr "ID de Categoría" +msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" -msgstr "Nombre de categoría" +msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" -msgstr "ID de ubicación predeterminada" +msgstr "" #: part/admin.py:76 msgid "Default Supplier ID" -msgstr "ID de proveedor predeterminado" +msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" -msgstr "Variante de" +msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" -msgstr "Stock mínimo" +msgstr "" #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "Usado en" +msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" -msgstr "En construcción" +msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" -msgstr "Costo mínimo" +msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" -msgstr "Costo máximo" +msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" -msgstr "Identificador de la clase o especie padre" +msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" -msgstr "Nombre del padre" +msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" -msgstr "Ruta de Categoría" +msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" -msgstr "Partes" +msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" -msgstr "Nivel de BOM" +msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" -msgstr "ID de artículo de BOM" +msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" -msgstr "IPN del padre" +msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" -msgstr "Precio mínimo" +msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" -msgstr "Precio máximo" +msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" -msgstr "Orden de compra entrante" +msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" -msgstr "Orden de venta saliente" +msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "Validación de Lista de Materiales" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "Esta opción debe ser seleccionada" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" -msgstr "Categoría" - -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" msgstr "" -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" -msgstr "Ubicación Predeterminada" +msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" -msgstr "Inventario Total" +msgstr "" #: part/forms.py:49 msgid "Input quantity for price calculation" -msgstr "Cantidad de entrada para el cálculo del precio" +msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" -msgstr "Categoría de parte" +msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" -msgstr "Categorías de parte" +msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" -msgstr "Ubicación predeterminada para partes de esta categoría" +msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" -msgstr "Estructural" +msgstr "" -#: part/models.py:115 +#: part/models.py:109 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." +msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" -msgstr "Palabras clave predeterminadas" +msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" -msgstr "Palabras clave por defecto para partes en esta categoría" +msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" -msgstr "Icono" - -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 -msgid "Icon (optional)" -msgstr "Icono (opcional)" - -#: part/models.py:178 -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:519 -msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" +#: part/models.py:126 stock/models.py:149 +msgid "Icon (optional)" msgstr "" -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" +#: part/models.py:148 +msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" -msgstr "Opción no válida para la parte principal" +msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" -msgstr "Ya existe un artículo de almacén con este número de serie" +msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" -msgstr "IPN duplicado no permitido en la configuración de partes" - -#: part/models.py:926 -msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." -msgstr "Parte con este nombre, IPN y revisión ya existe." +msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" -msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" +msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" -msgstr "Nombre de la parte" +msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" -msgstr "Es plantilla" +msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" -msgstr "¿Es esta parte una parte de la plantilla?" +msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" -msgstr "¿Es esta parte una variante de otra parte?" +msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" -msgstr "Descripción de parte (opcional)" +msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" -msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" +msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" -msgstr "Categoría de parte" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "Revisión de parte o número de versión" +msgstr "" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" -msgstr "¿Dónde se almacena este artículo normalmente?" +msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" -msgstr "Proveedor por defecto" +msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" -msgstr "Parte de proveedor predeterminada" +msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" -msgstr "Expiración por defecto" +msgstr "" -#: part/models.py:1130 +#: part/models.py:992 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" +msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" -msgstr "Nivel mínimo de stock permitido" +msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" -msgstr "Unidades de medida para esta parte" +msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" -msgstr "¿Se puede construir esta parte a partir de otras partes?" +msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" -msgstr "¿Se puede utilizar esta parte para construir otras partes?" +msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" -msgstr "¿Esta parte tiene seguimiento de objetos únicos?" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" -msgstr "¿Se puede comprar esta parte a proveedores externos?" +msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" -msgstr "¿Se puede vender esta parte a los clientes?" - -#: part/models.py:1189 -msgid "Is this part active?" -msgstr "¿Está activa esta parte?" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" msgstr "" -#: part/models.py:1195 -msgid "Locked parts cannot be edited" +#: part/models.py:1045 +msgid "Is this part active?" msgstr "" -#: part/models.py:1201 +#: part/models.py:1051 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?" +msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" -msgstr "Suma de verificación de BOM" +msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" -msgstr "Suma de verificación de BOM almacenada" +msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" -msgstr "BOM comprobado por" +msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" -msgstr "Fecha BOM comprobada" +msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" -msgstr "Creación de Usuario" +msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" -msgstr "Último inventario" +msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" -msgstr "Vender múltiples" +msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" -msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" +msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" -msgstr "Costo mínimo de BOM" +msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" -msgstr "Costo mínimo de partes de componentes" +msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" -msgstr "Costo máximo de BOM" +msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" -msgstr "Costo máximo de partes de componentes" +msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" -msgstr "Costo mínimo de compra" +msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" -msgstr "Costo histórico mínimo de compra" +msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" -msgstr "Costo máximo de compra" +msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" -msgstr "Costo histórico máximo de compra" +msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" -msgstr "Precio interno mínimo" +msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" -msgstr "Costo mínimo basado en precios reducidos internos" +msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" -msgstr "Precio interno máximo" +msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" -msgstr "Costo máximo basado en precios reducidos internos" +msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" -msgstr "Precio mínimo de proveedor" +msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" -msgstr "Precio mínimo de la parte de proveedores externos" +msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" -msgstr "Precio máximo de proveedor" +msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" -msgstr "Precio máximo de la parte de proveedores externos" +msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" -msgstr "Costo mínimo de variante" +msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" -msgstr "Costo mínimo calculado de las partes variantes" +msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" -msgstr "Costo máximo de variante" +msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" -msgstr "Costo máximo calculado de las partes variantes" +msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" -msgstr "Anular el costo mínimo" +msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" -msgstr "Costo mínimo general calculado" +msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" -msgstr "Precio de venta mínimo" +msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" -msgstr "Precio de venta mínimo basado en precios reducidos" +msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" -msgstr "Precio de venta máximo" +msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" -msgstr "Precio de venta máximo basado en precios reducidos" +msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" -msgstr "Costo de venta mínimo" +msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" -msgstr "Precio de venta mínimo histórico" +msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" -msgstr "Costo de Venta Máximo" +msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" -msgstr "Número de artículos" +msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" -msgstr "Fecha" +msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" -msgstr "Notas adicionales" +msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" -msgstr "Costo de Stock Mínimo" +msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" -msgstr "Costo mínimo estimado del stock disponible" +msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" -msgstr "Informe" +msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" -msgstr "Número de partes" +msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" -msgstr "Las plantillas de prueba sólo pueden ser creadas para partes rastreables" +msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" -msgstr "Nombre de prueba" +msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" -msgstr "Introduzca un nombre para la prueba" +msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" -msgstr "Descripción de prueba" +msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" -msgstr "Introduce la descripción para esta prueba" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Habilitado" +msgstr "" -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" -msgstr "Requerido" +msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" -msgstr "¿Es necesario pasar esta prueba?" +msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" -msgstr "Requiere valor" +msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 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?" +msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" -msgstr "Adjunto obligatorio" - -#: part/models.py:3642 -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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Opciones" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3681 -msgid "Part Parameter Template" +#: part/models.py:3513 +msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" -msgstr "El nombre de parámetro en la plantilla tiene que ser único" +msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" -msgstr "Nombre de Parámetro" +msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" -msgstr "Casilla de verificación" +msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" -msgstr "¿Es este parámetro una casilla de verificación?" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "Opciones válidas para este parámetro (separados por comas)" +msgstr "" -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" -msgstr "Opción inválida para el valor del parámetro" +msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" -msgstr "Parte principal" +msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" -msgstr "Plantilla de parámetro" +msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "Valor del parámetro" +#: part/models.py:3778 +msgid "Data" +msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" -msgstr "Valor predeterminado" +msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" -msgstr "Valor de parámetro por defecto" +msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" -msgstr "ID de parte o nombre de parte" +msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" -msgstr "Valor de ID de parte única" +msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" -msgstr "Valor IPN de parte" +msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" -msgstr "Nivel" - -#: part/models.py:4104 -msgid "BOM level" -msgstr "Nivel de BOM" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" +#: part/models.py:3924 +msgid "BOM level" msgstr "" -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" -msgstr "Seleccionar parte principal" +msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" -msgstr "Sub parte" +msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" -msgstr "Seleccionar parte a utilizar en BOM" +msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" -msgstr "Cantidad del artículo en BOM" +msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" -msgstr "Este artículo BOM es opcional" +msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 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)" +msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" -msgstr "Exceso" +msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "Cantidad estimada de desperdicio de construcción (absoluta o porcentaje)" +msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" -msgstr "Referencia de artículo de BOM" +msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" -msgstr "Notas del artículo de BOM" +msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" -msgstr "Suma de verificación" +msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" -msgstr "Suma de verificación de línea de BOM" +msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" -msgstr "Validado" +msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" -msgstr "Este artículo de BOM ha sido validado" +msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "Este artículo BOM es heredado por BOMs para partes variantes" +msgstr "" + +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" -#: part/models.py:4314 +#: part/models.py:4096 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" +msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" -msgstr "La cantidad debe ser un valor entero para las partes rastreables" +msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" -msgstr "Debe especificar la subparte" +msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" -msgstr "Ítem de BOM sustituto" +msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" -msgstr "La parte sustituta no puede ser la misma que la parte principal" +msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" -msgstr "Artículo BOM superior" +msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" -msgstr "Sustituir parte" +msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" -msgstr "Parte 1" +msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" -msgstr "Parte 2" +msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" -msgstr "Seleccionar parte relacionada" +msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "Categoría principal de parte" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" -msgstr "Subcategorías" +msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" -msgstr "Moneda de compra de ítem de stock" +msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" -msgstr "Parte original" +msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" -msgstr "Seleccione la parte original a duplicar" +msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" -msgstr "Copiar Imagen" +msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" -msgstr "Copiar imagen desde la parte original" +msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" -msgstr "Copiar BOM" +msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" -msgstr "Copiar la factura de materiales de la parte original" +msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" -msgstr "Copiar Parámetros" +msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" -msgstr "Copiar datos del parámetro de la parte original" +msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" -msgstr "Copiar Notas" +msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" -msgstr "Cantidad Inicial de Stock" +msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" -msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" +msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" -msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" +msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" -msgstr "Número de parte del fabricante" +msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" -msgstr "La empresa seleccionada no es un proveedor válido" +msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" -msgstr "La empresa seleccionada no es un fabricante válido" +msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" -msgstr "Duplicar Parte" +msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" -msgstr "Stock Inicial" +msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" -msgstr "Crear Parte con cantidad inicial de stock" +msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" -msgstr "Información del proveedor" +msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" -msgstr "Añadir información inicial del proveedor para esta parte" +msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" -msgstr "Copiar Parámetros de Categoría" +msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" -msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" +msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" -msgstr "Imagen Existente" +msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" -msgstr "El archivo de imagen no existe" +msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" -msgstr "Generar informe" +msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" -msgstr "Actualizar partes" +msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" -msgstr "Anular el valor calculado para precio mínimo" +msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" -msgstr "Precio mínimo de moneda" +msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" -msgstr "Precio máximo de moneda" +msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" -msgstr "Actualizar" +msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 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:1432 -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:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" msgstr "" -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" +#: part/serializers.py:1347 +msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Puede construir" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" -msgstr "Seleccionar parte de la que copiar BOM" +msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" -msgstr "Eliminar Datos Existentes" +msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" -msgstr "Eliminar artículos BOM existentes antes de copiar" +msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" -msgstr "Incluye Heredado" +msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" -msgstr "Incluye artículos BOM que son heredados de partes con plantillas" +msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" -msgstr "Omitir filas no válidas" +msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" -msgstr "Activar esta opción para omitir filas inválidas" +msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" -msgstr "Copiar partes sustitutas" +msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" -msgstr "Limpiar BOM Existente" +msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" -msgstr "Varios resultados encontrados" +msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" -msgstr "No se encontraron partes coincidentes" +msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" -msgstr "La parte no está designada como componente" +msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" -msgstr "Cantidad no proporcionada" +msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" -msgstr "Cantidad no válida" +msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" -msgstr "Se requiere al menos un artículo BOM" +msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" -msgstr "Cantidad Total" +msgstr "" #: part/stocktake.py:225 msgid "Total Cost Min" -msgstr "Costo total mínimo" +msgstr "" #: part/stocktake.py:226 msgid "Total Cost Max" -msgstr "Costo total máximo" +msgstr "" #: part/stocktake.py:284 msgid "Stocktake Report Available" @@ -7804,16 +7151,16 @@ msgstr "" #: part/tasks.py:37 msgid "Low stock notification" -msgstr "Notificación por bajo stock" +msgstr "" #: part/tasks.py:39 #, 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" +msgstr "" #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." -msgstr "No tienes permiso para editar la lista de materiales." +msgstr "" #: part/templates/part/bom.html:15 msgid "The BOM this part has been changed, and must be validated" @@ -7828,95 +7175,95 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" -msgstr "Estás suscrito a las notificaciones de esta categoría" +msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" -msgstr "Suscribirse a las notificaciones de esta categoría" +msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" -msgstr "Acciones de categoría" +msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" -msgstr "Editar categoría" +msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" -msgstr "Editar Categoría" +msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" -msgstr "Eliminar categoría" +msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" -msgstr "Eliminar Categoría" +msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" -msgstr "Categoría de partes de nivel superior" +msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" -msgstr "Partes (incluyendo subcategorías)" +msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" -msgstr "Crear nueva parte" +msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" -msgstr "Nueva Parte" +msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" -msgstr "Parámetros de Parte" +msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" -msgstr "Crear nueva categoría de partes" +msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" -msgstr "Nueva Categoría" +msgstr "" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "Importar Partes" +msgstr "" #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "Hacer una copia de la parte '%(full_name)s'." +msgstr "" #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 msgid "Possible Matching Parts" -msgstr "Posibles Partes coincidentes" +msgstr "" #: part/templates/part/copy_part.html:15 #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" -msgstr "La nueva parte puede ser un duplicado de estas partes existentes" +msgstr "" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "%(full_name)s - %(desc)s (%(match_per)s%% coincidencia)" +msgstr "" #: part/templates/part/detail.html:20 msgid "Part Stock" -msgstr "Stock de parte" +msgstr "" #: part/templates/part/detail.html:44 msgid "Refresh scheduling data" @@ -7925,141 +7272,137 @@ msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 #: templates/js/translated/tables.js:552 msgid "Refresh" -msgstr "Actualizar" +msgstr "" #: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" -msgstr "Verificación de Inventario" +msgstr "" #: part/templates/part/detail.html:83 msgid "Part Test Templates" -msgstr "Plantillas de prueba de parte" +msgstr "" #: part/templates/part/detail.html:88 msgid "Add Test Template" -msgstr "Añadir Plantilla de Prueba" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" msgstr "" -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" -msgstr "Asignaciones de órdenes de venta" +msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" -msgstr "Notas de parte" +msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" -msgstr "Variantes de Parte" +msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" -msgstr "Crear nueva variante" +msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" -msgstr "Nueva Variante" +msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" -msgstr "Añadir nuevo parámetro" +msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "Partes relacionadas" +msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" -msgstr "Añadir Relacionado" +msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "Lista de Materiales" +msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" -msgstr "Exportar acciones" +msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" -msgstr "Exportar BOM" +msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" -msgstr "Imprimir informe BOM" +msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" -msgstr "Acciones BOM" +msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" -msgstr "Subir BOM" +msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" -msgstr "Validar BOM" +msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" -msgstr "Añadir artículo al BOM" +msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" -msgstr "Ensamblajes" +msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" -msgstr "Construcción de partes" +msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" -msgstr "Construir adjudicaciones de pedidos" +msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" -msgstr "Proveedores de partes" +msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" -msgstr "Fabricantes de partes" +msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 msgid "Insufficient privileges." -msgstr "Privilegios insuficientes." +msgstr "" #: part/templates/part/import_wizard/part_upload.html:8 msgid "Return to Parts" -msgstr "Volver a los artículos" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:13 msgid "Import Parts from File" -msgstr "Importar artículos desde archivo" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" @@ -8071,99 +7414,99 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:33 msgid "Part Import Template" -msgstr "Plantilla de importación de parte" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:89 msgid "Download Part Import Template" -msgstr "Descargar plantilla de importación de parte" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" -msgstr "Formato" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" -msgstr "Seleccionar formato de archivo" +msgstr "" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "Listado de artículos" +msgstr "" #: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 msgid "You are subscribed to notifications for this part" -msgstr "Estás suscrito a las notificaciones de este artículo" +msgstr "" #: part/templates/part/part_base.html:33 msgid "Subscribe to notifications for this part" -msgstr "Suscríbete a las notificaciones de este artículo" +msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" -msgstr "Imprimir etiqueta" +msgstr "" #: part/templates/part/part_base.html:58 msgid "Show pricing information" -msgstr "Mostrar información de precios" +msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" -msgstr "Acciones de stock" +msgstr "" #: part/templates/part/part_base.html:70 msgid "Count part stock" -msgstr "Contar stock de partes" +msgstr "" #: part/templates/part/part_base.html:76 msgid "Transfer part stock" -msgstr "Transferir stock de partes" +msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" -msgstr "Acciones para partes" +msgstr "" #: part/templates/part/part_base.html:94 msgid "Duplicate part" -msgstr "Duplicar parte" +msgstr "" #: part/templates/part/part_base.html:97 msgid "Edit part" -msgstr "Editar parte" +msgstr "" #: part/templates/part/part_base.html:100 msgid "Delete part" -msgstr "Eliminar parte" +msgstr "" #: part/templates/part/part_base.html:119 msgid "Part is a template part (variants can be made from this part)" -msgstr "La parte es una parte de plantilla (las variantes se pueden hacer a partir de esta parte)" +msgstr "" #: part/templates/part/part_base.html:123 msgid "Part can be assembled from other parts" -msgstr "La parte puede ser ensamblada desde otras partes" +msgstr "" #: part/templates/part/part_base.html:127 msgid "Part can be used in assemblies" -msgstr "La parte puede ser usada en ensamblajes" +msgstr "" #: part/templates/part/part_base.html:131 msgid "Part stock is tracked by serial number" -msgstr "El stock de esta parte está rastreado por número de serie" +msgstr "" #: part/templates/part/part_base.html:135 msgid "Part can be purchased from external suppliers" -msgstr "La parte puede ser comprada de proveedores externos" +msgstr "" #: part/templates/part/part_base.html:139 msgid "Part can be sold to customers" -msgstr "La parte puede ser vendida a clientes" +msgstr "" #: part/templates/part/part_base.html:145 msgid "Part is not active" @@ -8171,12 +7514,12 @@ msgstr "" #: part/templates/part/part_base.html:153 msgid "Part is virtual (not a physical part)" -msgstr "La parte es virtual (no una parte física)" +msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" -msgstr "Mostrar Detalles de Parte" +msgstr "" #: part/templates/part/part_base.html:218 #: stock/templates/stock/item_base.html:388 @@ -8188,134 +7531,138 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" -msgstr "Nivel mínimo de stock" +msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" -msgstr "Rango de precios" +msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" -msgstr "Último número de serie" +msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" -msgstr "Buscar número de serie" +msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" -msgstr "Vincular código de barras a parte" +msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" -msgstr "Calcular" +msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" -msgstr "Eliminar imagen asociada de esta parte" +msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" -msgstr "No se encontraron imágenes coincidentes" +msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" -msgstr "Ocultar Detalles de la Parte" +msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 #: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 msgid "Supplier Pricing" -msgstr "Precios del Proveedor" +msgstr "" #: part/templates/part/part_pricing.html:26 #: part/templates/part/part_pricing.html:52 #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "Costo unitario" +msgstr "" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" -msgstr "Ningún precio de proveedor disponible" +msgstr "" #: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 #: part/templates/part/prices.html:250 msgid "BOM Pricing" -msgstr "Precios BOM" +msgstr "" #: part/templates/part/part_pricing.html:66 msgid "Unit Purchase Price" -msgstr "Precio de Compra Unitario" +msgstr "" #: part/templates/part/part_pricing.html:72 msgid "Total Purchase Price" -msgstr "Precio total de compra" +msgstr "" #: part/templates/part/part_pricing.html:83 msgid "No BOM pricing available" -msgstr "No hay precios BOM disponibles" +msgstr "" #: part/templates/part/part_pricing.html:92 msgid "Internal Price" -msgstr "Precio Interno" +msgstr "" #: part/templates/part/part_pricing.html:123 msgid "No pricing information is available for this part." -msgstr "No hay información de precios disponible para esta parte." +msgstr "" #: part/templates/part/part_scheduling.html:14 msgid "Scheduled Quantity" -msgstr "Cantidad programada" +msgstr "" #: part/templates/part/part_sidebar.html:11 msgid "Variants" -msgstr "Variantes" +msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" -msgstr "Inventario" +msgstr "" #: part/templates/part/part_sidebar.html:30 #: templates/InvenTree/settings/sidebar.html:39 msgid "Pricing" -msgstr "Precios" +msgstr "" #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" -msgstr "Programación" +msgstr "" #: part/templates/part/part_sidebar.html:54 msgid "Test Templates" -msgstr "Plantillas de Prueba" +msgstr "" #: part/templates/part/part_thumb.html:11 msgid "Select from existing images" -msgstr "Seleccionar de imágenes existentes" +msgstr "" #: part/templates/part/prices.html:11 msgid "Pricing Overview" -msgstr "Vista general de precios" +msgstr "" #: part/templates/part/prices.html:14 msgid "Refresh Part Pricing" -msgstr "Actualizar precio de partes" +msgstr "" #: part/templates/part/prices.html:17 msgid "Override Part Pricing" @@ -8324,43 +7671,43 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" -msgstr "Editar" +msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" -msgstr "Última actualización" +msgstr "" #: part/templates/part/prices.html:37 part/templates/part/prices.html:127 msgid "Price Category" -msgstr "Categoría de precio" +msgstr "" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "Mínimo" +msgstr "" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "Máximo" +msgstr "" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" -msgstr "Precio Interno" +msgstr "" #: part/templates/part/prices.html:64 part/templates/part/prices.html:206 msgid "Purchase History" -msgstr "Historial de compras" +msgstr "" #: part/templates/part/prices.html:98 part/templates/part/prices.html:274 msgid "Variant Pricing" -msgstr "Precios variantes" +msgstr "" #: part/templates/part/prices.html:106 msgid "Pricing Overrides" @@ -8368,11 +7715,11 @@ msgstr "" #: part/templates/part/prices.html:113 msgid "Overall Pricing" -msgstr "Precios globales" +msgstr "" #: part/templates/part/prices.html:149 part/templates/part/prices.html:326 msgid "Sale History" -msgstr "Historial de ventas" +msgstr "" #: part/templates/part/prices.html:157 msgid "Sale price data is not available for this part" @@ -8387,11 +7734,11 @@ msgstr "" #: part/templates/part/prices.html:275 part/templates/part/prices.html:298 #: part/templates/part/prices.html:327 msgid "Jump to overview" -msgstr "Ir a la vista general" +msgstr "" #: part/templates/part/prices.html:180 msgid "Add Internal Price Break" -msgstr "Añadir salto de precio interno" +msgstr "" #: part/templates/part/prices.html:297 msgid "Sale Pricing" @@ -8406,56 +7753,56 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" -msgstr "Sin Stock" +msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 msgid "Low Stock" -msgstr "Bajo Stock" +msgstr "" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "Volver al BOM" +msgstr "" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "Cargar Lista de Materiales" +msgstr "" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "Requisitos de subida BOM" +msgstr "" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "Subir archivo BOM" +msgstr "" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "Enviar datos BOM" +msgstr "" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "Requisitos para subir BOM" +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "El archivo BOM debe contener las columnas con nombre requeridos como se indica en el " +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "Plantilla de subida BOM" +msgstr "" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "Cada parte debe existir en la base de datos" +msgstr "" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "Crear nueva variante de parte" +msgstr "" #: part/templates/part/variant_part.html:10 msgid "Create a new variant part from this template" @@ -8463,7 +7810,7 @@ msgstr "" #: part/views.py:111 msgid "Match References" -msgstr "Coincidir Referencias" +msgstr "" #: part/views.py:275 #, python-brace-format @@ -8472,134 +7819,126 @@ msgstr "" #: part/views.py:425 msgid "Select Part Image" -msgstr "Seleccionar Imagen de Parte" +msgstr "" #: part/views.py:448 msgid "Updated part image" -msgstr "Imagen de parte actualizada" +msgstr "" #: part/views.py:451 msgid "Part image not found" -msgstr "Imagen de parte no encontrada" +msgstr "" #: part/views.py:545 msgid "Part Pricing" -msgstr "Precio de parte" +msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" #: plugin/base/action/api.py:32 msgid "No action specified" -msgstr "No se especificó ninguna acción" +msgstr "" #: plugin/base/action/api.py:41 msgid "No matching action found" -msgstr "No se encontró ninguna acción coincidente" +msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" -msgstr "No se encontró ninguna coincidencia para los datos del código de barras" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "Coincidencia encontrada para datos de códigos de barras" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" -msgstr "El código de barras coincide con artículo existente" +msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,158 +7946,126 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" -msgstr "Impresión de etiquetas fallida" +msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" -msgstr "Códigos de barras de InvenTree" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" -msgstr "Proporciona soporte nativo para códigos de barras" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 msgid "InvenTree contributors" -msgstr "Contribuidores de InvenTree" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" -msgstr "Notificaciones de InvenTree" +msgstr "" #: plugin/builtin/integration/core_notifications.py:36 msgid "Integrated outgoing notification methods" -msgstr "Métodos de notificaciones salientes integrados" +msgstr "" #: plugin/builtin/integration/core_notifications.py:41 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "Habilitar notificaciones por correo electrónico" +msgstr "" #: plugin/builtin/integration/core_notifications.py:42 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "Permitir el envío de correos electrónicos para notificaciones de eventos" +msgstr "" #: plugin/builtin/integration/core_notifications.py:47 msgid "Enable slack notifications" -msgstr "Activar notificaciones de slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:49 msgid "Allow sending of slack channel messages for event notifications" -msgstr "Permitir el envío de mensajes por canal de slack para notificaciones de eventos" +msgstr "" #: plugin/builtin/integration/core_notifications.py:55 msgid "Slack incoming webhook url" -msgstr "URL de webhook entrante de Slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:56 msgid "URL that is used to send messages to a slack channel" -msgstr "URL que se utiliza para enviar mensajes a un canal de slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:164 msgid "Open link" -msgstr "Abrir enlace" +msgstr "" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" @@ -8768,23 +8075,21 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" -msgstr "Impresora de etiquetas PDF de InvenTree" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" -msgstr "Proporciona soporte nativo para imprimir etiquetas PDF" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" -msgstr "Modo de depuración" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "Activar modo de depuración - devuelve código HTML en lugar de PDF" +msgstr "" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,115 +8240,114 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" -msgstr "Configuración del complemento" +msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" -msgstr "Configuraciones del Plug-in" +msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" -msgstr "Clave" +msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" -msgstr "Clave del complemento" +msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" -msgstr "Nombre del complemento" +msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" -msgstr "Nombre de Paquete" +msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" -msgstr "Está activo el complemento" +msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" -msgstr "Instalado" +msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" -msgstr "Complemento de ejemplo" +msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" -msgstr "Complemento integrado" +msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "Complemento" +msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" -msgstr "Método" +msgstr "" #: plugin/plugin.py:270 msgid "No author found" -msgstr "No se encontró autor" +msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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}" +msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "El complemento requiere al menos la versión {v}" +msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "El complemento requiere como máximo la versión {v}" +msgstr "" #: plugin/samples/integration/sample.py:52 msgid "Enable PO" -msgstr "Habilitar PO" +msgstr "" #: plugin/samples/integration/sample.py:53 msgid "Enable PO functionality in InvenTree interface" -msgstr "Habilitar la funcionalidad PO en la interfaz de InvenTree" +msgstr "" #: plugin/samples/integration/sample.py:58 msgid "API Key" -msgstr "Clave API" +msgstr "" #: plugin/samples/integration/sample.py:59 msgid "Key required for accessing external API" -msgstr "Clave necesaria para acceder a la API externa" +msgstr "" #: plugin/samples/integration/sample.py:63 msgid "Numerical" -msgstr "Numérico" +msgstr "" #: plugin/samples/integration/sample.py:64 msgid "A numerical setting" -msgstr "Una configuración numérica" +msgstr "" #: plugin/samples/integration/sample.py:69 msgid "Choice Setting" -msgstr "Configuración de Elección" +msgstr "" #: plugin/samples/integration/sample.py:70 msgid "A setting with multiple choices" -msgstr "Un ajuste con múltiples opciones" +msgstr "" #: plugin/samples/integration/sample_currency_exchange.py:15 msgid "Sample currency exchange plugin" @@ -9055,21 +8359,21 @@ msgstr "" #: plugin/serializers.py:81 msgid "Source URL" -msgstr "URL de origen" +msgstr "" #: plugin/serializers.py:83 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "Fuente del paquete - puede ser un registro personalizado o una ruta VCS" +msgstr "" #: plugin/serializers.py:92 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "Nombre del paquete Plug-in - también puede contener un indicador de versión" +msgstr "" #: plugin/serializers.py:99 #: templates/InvenTree/settings/plugin_settings.html:42 #: templates/js/translated/plugin.js:86 msgid "Version" -msgstr "Versión" +msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." @@ -9077,1254 +8381,969 @@ msgstr "" #: plugin/serializers.py:106 msgid "Confirm plugin installation" -msgstr "Confirmar instalación del complemento" +msgstr "" #: plugin/serializers.py:108 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "Esto instalará este plug-in en la instancia actual. La instancia entrará en mantenimiento." +msgstr "" #: plugin/serializers.py:121 msgid "Installation not confirmed" -msgstr "Instalación no confirmada" +msgstr "" #: plugin/serializers.py:123 msgid "Either packagename of URL must be provided" -msgstr "Debe proporcionar cualquier nombre de paquete de la URL" +msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" -msgstr "Activar complemento" +msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" -msgstr "Activar este complemento" +msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" -msgstr "No se han proporcionado objetos válidos a la plantilla" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" msgstr "" -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" -msgstr "Carta" - -#: report/models.py:118 -msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" -msgstr "Nombre de la plantilla" - -#: report/models.py:156 -msgid "Template description" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Patrón de Nombre de archivo" - -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:204 +msgid "Page size for PDF reports" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "Filtros" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:210 +msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:302 -msgid "Page size for PDF reports" -msgstr "Tamaño de página para reportes PDF" - -#: report/models.py:308 -msgid "Render report in landscape orientation" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Ancho [mm]" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Ancho de la etiqueta, especificado en mm" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Altura [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Altura de la etiqueta, especificada en mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "Progreso" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" -msgstr "Fragmento" +msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" -msgstr "Archivo fragmento de informe" +msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" -msgstr "Descripción de archivo de fragmento" - -#: report/models.py:528 -msgid "Asset" -msgstr "Activo" - -#: report/models.py:529 -msgid "Report asset file" -msgstr "Reportar archivo de activos" - -#: report/models.py:536 -msgid "Asset file description" -msgstr "Descripción del archivo de activos" - -#: report/serializers.py:91 -msgid "Select report template" msgstr "" -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" +#: report/models.py:714 +msgid "Asset file with this name already exists" msgstr "" -#: report/serializers.py:132 -msgid "Select label template" +#: report/models.py:722 +msgid "Asset" msgstr "" -#: report/serializers.py:140 -msgid "Printing Plugin" +#: report/models.py:723 +msgid "Report asset file" msgstr "" -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" +#: report/models.py:730 +msgid "Asset file description" msgstr "" -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "Código QR" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "Código QR" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "Materiales necesarios" +msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" -msgstr "Requerido para" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" -msgstr "El proveedor ha sido eliminado" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" -msgstr "Precio Unitario" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" -msgstr "Partida extra" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "Artículo Stock Informe de prueba" +msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "Resultados de la Prueba" +msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" -msgstr "Prueba" +msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" -msgstr "Resultado" +msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "Pasada" +msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" -msgstr "Fallo" +msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" -msgstr "Ningún resultado (requerido)" +msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" -msgstr "Sin resultados" +msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" -msgstr "Elementos instalados" +msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" -msgstr "ID de Ubicación" +msgstr "" + +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" -msgstr "Ruta de Ubicación" +msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" -msgstr "ID del artículo de almacén" +msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" -msgstr "Código de estado" +msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" -msgstr "ID Parte del Proveedor" - -#: stock/admin.py:184 -msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" -msgstr "ID de proveedor" +msgstr "" + +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" -msgstr "ID de cliente" +msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" -msgstr "Instalado en" +msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" -msgstr "ID de construcción" +msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" -msgstr "ID de orden de venta" +msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" -msgstr "ID de orden de compra" +msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" -msgstr "Revisión necesaria" +msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" -msgstr "Fecha de Expiración" - -#: stock/api.py:310 -msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" +#: stock/api.py:284 +msgid "Filter by location depth" msgstr "" -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" -msgstr "Ubicación externa" +msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" -msgstr "Desactualizado" +msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" -msgstr "Cantidad requerida" +msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" -msgstr "Debe suministrarse una parte válida" +msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" -msgstr "Ubicación de Stock" +msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" -msgstr "Ubicaciones de Stock" +msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" -msgstr "Propietario" +msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" -msgstr "Seleccionar Propietario" +msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" -msgstr "Externo" +msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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" +msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 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" +msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" -msgstr "El objeto no puede pertenecer a sí mismo" +msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 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" +msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 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" +msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" -msgstr "Artículo de stock padre" +msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" -msgstr "Parte base" +msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" -msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" +msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" -msgstr "¿Dónde se encuentra este artículo de stock?" +msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" -msgstr "Empaquetar este artículo de stock se almacena en" +msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" -msgstr "¿Está este artículo instalado en otro artículo?" +msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" -msgstr "Número de serie para este artículo" +msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" -msgstr "Código de lote para este artículo de stock" +msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" -msgstr "Cantidad de Stock" +msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" -msgstr "Build de origen" +msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" -msgstr "Build para este item de stock" +msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" -msgstr "Consumido por" +msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" -msgstr "Orden de compra de origen" +msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" -msgstr "Orden de compra para este artículo de stock" +msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" -msgstr "Orden de venta de destino" +msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 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" +msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" -msgstr "Eliminar al agotar" +msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" -msgstr "Eliminar este artículo de stock cuando se agoten las existencias" +msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" -msgstr "Precio de compra único en el momento de la compra" +msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" -msgstr "Convertido a parte" +msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" -msgstr "La parte no está establecida como rastreable" +msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" -msgstr "Cantidad debe ser un entero" +msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" -msgstr "Los números de serie deben ser una lista de enteros" +msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" -msgstr "La cantidad no coincide con los números de serie" +msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" -msgstr "Números de serie ya existen" +msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" -msgstr "Artículo de stock ha sido asignado a un pedido de venta" +msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" -msgstr "Artículo de stock está instalado en otro artículo" +msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" -msgstr "Artículo de stock contiene otros artículos" +msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" -msgstr "Artículo de stock ha sido asignado a un cliente" +msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" -msgstr "El artículo de stock está en producción" +msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" -msgstr "Stock serializado no puede ser combinado" +msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" -msgstr "Artículos de Stock Duplicados" +msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" -msgstr "Los artículos de stock deben referirse a la misma parte" +msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" -msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" +msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" -msgstr "Los códigos de estado del stock deben coincidir" +msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" -msgstr "Notas de entrada" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" -msgstr "Debe proporcionarse un valor para esta prueba" +msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" -msgstr "El archivo adjunto debe ser subido para esta prueba" - -#: stock/models.py:2459 -msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" -msgstr "Resultado de la prueba" +msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" -msgstr "Valor de salida de prueba" +msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" -msgstr "Adjunto de resultados de prueba" +msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" -msgstr "Notas de prueba" +msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 -msgid "Serial number is too large" -msgstr "El número de serie es demasiado grande" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Elemento padre" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 -msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" - -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Expirado" +msgstr "" -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Elementos secundarios" +#: stock/serializers.py:119 +msgid "Template ID or test name must be provided" +msgstr "" -#: stock/serializers.py:606 -msgid "Tracking Items" +#: stock/serializers.py:151 +msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:612 -msgid "Purchase price of this stock item, per unit or pack" +#: stock/serializers.py:184 +msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" +#: stock/serializers.py:282 +msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:637 -msgid "Maximum Pricing" +#: stock/serializers.py:402 +msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" -msgstr "Introduzca el número de artículos de stock para serializar" +msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" +msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" -msgstr "Introduzca números de serie para nuevos artículos" +msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" -msgstr "Ubicación de stock de destino" +msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" -msgstr "Campo de nota opcional" +msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" -msgstr "Los números de serie no se pueden asignar a esta parte" +msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" -msgstr "Añadir nota de transacción (opcional)" +msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" -msgstr "Sub-ubicación" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" -msgstr "La parte debe ser vendible" +msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" -msgstr "El artículo está asignado a una orden de venta" +msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" -msgstr "El artículo está asignado a una orden de creación" +msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" -msgstr "Cliente para asignar artículos de stock" +msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" -msgstr "La empresa seleccionada no es un cliente" +msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" -msgstr "Notas de asignación de stock" +msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" -msgstr "Debe proporcionarse una lista de artículos de stock" +msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" -msgstr "Notas de fusión de stock" +msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" -msgstr "Permitir proveedores no coincidentes" +msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" +msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" -msgstr "Permitir estado no coincidente" +msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" -msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" +msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" -msgstr "Debe proporcionar al menos dos artículos de stock" +msgstr "" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 msgid "No Change" msgstr "" -#: stock/serializers.py:1551 +#: stock/serializers.py:1322 msgid "StockItem primary key value" -msgstr "Valor de clave primaria de Stock" +msgstr "" -#: stock/serializers.py:1570 +#: stock/serializers.py:1341 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1598 +#: stock/serializers.py:1369 msgid "Stock transaction notes" -msgstr "Notas de transacción de stock" - -#: stock/status_codes.py:11 -msgid "OK" msgstr "" -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Atención necesaria" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Dañado" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Destruido" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Rechazado" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "En cuarentena" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Entrada antigua de rastreo de stock" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Artículo de stock creado" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Artículo de almacén editado" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Número de serie asignado" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stock contado" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Stock añadido manualmente" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Stock eliminado manualmente" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Ubicación cambiada" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Existencia actualizada" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Instalado en el ensamblaje" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Retirado del ensamblaje" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Artículo del componente instalado" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Elemento de componente eliminado" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Separar del artículo principal" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Dividir artículo secundario" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Artículos de stock combinados" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Convertir a variante" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Trabajo de ensamblaje creado" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Construir orden de salida completado" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Orden de ensamble rechazada" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Consumido por orden de construcción" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Enviado contra orden de venta" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Recibido contra la orden de compra" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Devuelto contra orden de devolución" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Enviar al cliente" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Devolución del cliente" - #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" -msgstr "Información de Seguimiento de Stock" +msgstr "" #: stock/templates/stock/item.html:63 msgid "Child Stock Items" -msgstr "Elementos de Stock Hijos" +msgstr "" #: stock/templates/stock/item.html:72 msgid "This stock item does not have any child items" -msgstr "Este artículo de stock no tiene ningún artículo secundario" +msgstr "" #: stock/templates/stock/item.html:81 #: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" -msgstr "Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 msgid "Test Report" -msgstr "Informe de Prueba" +msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" -msgstr "Eliminar Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:93 msgid "Add Test Data" -msgstr "Añadir Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:125 msgid "Stock Item Notes" -msgstr "Notas del artículo de stock" +msgstr "" #: stock/templates/stock/item.html:140 msgid "Installed Stock Items" -msgstr "Elementos de Stock instalados" +msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" -msgstr "Instalar artículo de stock" +msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10334,100 +9353,104 @@ msgstr "" #: stock/templates/stock/item_base.html:51 msgid "Scan to Location" -msgstr "Escanear a la ubicación" +msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" -msgstr "Acciones de impresión" +msgstr "" #: stock/templates/stock/item_base.html:75 msgid "Stock adjustment actions" -msgstr "Acciones de ajuste de stock" +msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" -msgstr "Contar stock" +msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" -msgstr "Añadir stock" +msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" -msgstr "Eliminar stock" +msgstr "" #: stock/templates/stock/item_base.html:85 msgid "Serialize stock" -msgstr "Serializar stock" +msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" -msgstr "Transferir stock" +msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" -msgstr "Asignar a cliente" +msgstr "" #: stock/templates/stock/item_base.html:94 msgid "Return to stock" -msgstr "Regresar al stock" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall stock item" -msgstr "Desinstalar artículo de stock" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall" -msgstr "Desinstalar" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install stock item" -msgstr "Instalar artículo de stock" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install" -msgstr "Instalar" +msgstr "" #: stock/templates/stock/item_base.html:115 msgid "Convert to variant" -msgstr "Convertir a variante" +msgstr "" #: stock/templates/stock/item_base.html:118 msgid "Duplicate stock item" -msgstr "Duplicar artículo" +msgstr "" #: stock/templates/stock/item_base.html:120 msgid "Edit stock item" -msgstr "Editar artículo de almacén" +msgstr "" #: stock/templates/stock/item_base.html:123 msgid "Delete stock item" -msgstr "Eliminar artículo de stock" +msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" -msgstr "Construcción o Armado" +msgstr "" + +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" -msgstr "Ningún fabricante establecido" +msgstr "" #: stock/templates/stock/item_base.html:251 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "No estás en la lista de propietarios de este artículo. Este artículo de stock no puede ser editado." +msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" -msgstr "Solo lectura" +msgstr "" #: stock/templates/stock/item_base.html:265 msgid "This stock item is unavailable" @@ -10435,19 +9458,19 @@ msgstr "" #: stock/templates/stock/item_base.html:271 msgid "This stock item is in production and cannot be edited." -msgstr "Este artículo de stock está en producción y no puede ser editado." +msgstr "" #: stock/templates/stock/item_base.html:272 msgid "Edit the stock item from the build view." -msgstr "Editar el artículo de stock desde la vista de construcción." +msgstr "" #: stock/templates/stock/item_base.html:287 msgid "This stock item is allocated to Sales Order" -msgstr "Este artículo de stock está asignado a la orden de venta" +msgstr "" #: stock/templates/stock/item_base.html:295 msgid "This stock item is allocated to Build Order" -msgstr "Este artículo de stock está asignado al orden de construcción" +msgstr "" #: stock/templates/stock/item_base.html:311 msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" @@ -10455,217 +9478,226 @@ msgstr "" #: stock/templates/stock/item_base.html:317 msgid "previous page" -msgstr "página anterior" +msgstr "" #: stock/templates/stock/item_base.html:317 msgid "Navigate to previous serial number" -msgstr "Navegar al número de serie anterior" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "next page" -msgstr "página siguiente" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "Navigate to next serial number" -msgstr "Navegar al siguiente número de serie" +msgstr "" + +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" -msgstr "Ubicación no establecida" +msgstr "" #: stock/templates/stock/item_base.html:413 msgid "Tests" -msgstr "Pruebas" +msgstr "" #: stock/templates/stock/item_base.html:419 msgid "This stock item has not passed all required tests" -msgstr "Este artículo de stock no ha pasado todas las pruebas requeridas" +msgstr "" #: stock/templates/stock/item_base.html:437 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "Este ítem expiró el %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "Este ítem expira el %(item.expiry_date)s" +msgstr "" #: stock/templates/stock/item_base.html:455 msgid "No stocktake performed" -msgstr "Ningún inventario realizado" +msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." -msgstr "Seleccione una de las variantes de parte listadas a continuación." +msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" -msgstr "Advertencia" +msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" -msgstr "Esta acción no se puede deshacer fácilmente" +msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" #: stock/templates/stock/item_serialize.html:5 msgid "Create serialized items from this stock item." -msgstr "Crear artículos serializados a partir de este artículo de stock." +msgstr "" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "Seleccione la cantidad para serializar y números de serie únicos." +msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" -msgstr "Escanear en contenedor" +msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" -msgstr "Acciones de ubicación" +msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" -msgstr "Editar ubicación" +msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" -msgstr "Eliminar ubicación" +msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" -msgstr "Ubicación de stock superior" +msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" -msgstr "Propietario de la ubicación" +msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "No estás en la lista de propietarios de esta ubicación. Esta ubicación de stock no puede ser editada." - -#: stock/templates/stock/location.html:173 -msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" -msgstr "Crear nueva ubicación de stock" +msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" -msgstr "Nueva Ubicación" +msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." -msgstr "Cargando..." +msgstr "" #: stock/templates/stock/stock_sidebar.html:5 msgid "Stock Tracking" -msgstr "Seguimiento de Stock" +msgstr "" #: stock/templates/stock/stock_sidebar.html:8 msgid "Allocations" -msgstr "Asignaciones" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "Permiso Denegado" +msgstr "" #: templates/403.html:15 msgid "You do not have permission to view this page." -msgstr "No tiene permisos para ver esta página." +msgstr "" #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "Falla de autenticación" +msgstr "" #: templates/403_csrf.html:14 msgid "You have been logged out from InvenTree." -msgstr "Has cerrado sesión en InvenTree." +msgstr "" #: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 #: templates/navbar.html:150 msgid "Login" -msgstr "Iniciar sesión" +msgstr "" #: templates/404.html:6 templates/404.html:12 msgid "Page Not Found" -msgstr "Página No Encontrada" +msgstr "" #: templates/404.html:15 msgid "The requested page does not exist" -msgstr "La página solicitada no existe" +msgstr "" #: templates/500.html:6 templates/500.html:12 msgid "Internal Server Error" -msgstr "Error Interno Del Servidor" +msgstr "" #: templates/500.html:15 #, python-format @@ -10674,19 +9706,19 @@ msgstr "" #: templates/500.html:16 msgid "Refer to the error log in the admin interface for further details" -msgstr "Consulte el registro de errores en la interfaz de administración para más detalles" +msgstr "" #: templates/503.html:11 templates/503.html:33 msgid "Site is in Maintenance" -msgstr "El Sitio está en Mantenimiento" +msgstr "" #: templates/503.html:39 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "El sitio está actualmente en mantenimiento y debería estar listo pronto!" +msgstr "" #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "Índice" +msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" @@ -10758,29 +9790,29 @@ msgstr "" #: templates/InvenTree/notifications/history.html:9 msgid "Notification History" -msgstr "Historial de notificaciones" +msgstr "" #: templates/InvenTree/notifications/history.html:13 #: templates/InvenTree/notifications/history.html:14 #: templates/InvenTree/notifications/notifications.html:75 msgid "Delete Notifications" -msgstr "Eliminar notificaciones" +msgstr "" #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" -msgstr "Notificaciones pendientes" +msgstr "" #: templates/InvenTree/notifications/inbox.html:13 #: templates/InvenTree/notifications/inbox.html:14 msgid "Mark all as read" -msgstr "Marcar todos como leidos" +msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 #: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 msgid "Notifications" -msgstr "Notificaciones" +msgstr "" #: templates/InvenTree/notifications/notifications.html:38 msgid "No unread notifications found" @@ -10792,7 +9824,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:65 msgid "Delete all read notifications" -msgstr "Borrar todas las notificaciones leídas" +msgstr "" #: templates/InvenTree/notifications/notifications.html:89 #: templates/js/translated/notification.js:85 @@ -10801,67 +9833,67 @@ msgstr "" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" -msgstr "Bandeja de Entrada" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:10 msgid "History" -msgstr "Historial" +msgstr "" #: templates/InvenTree/search.html:8 msgid "Search Results" -msgstr "Resultados de Búsqueda" +msgstr "" #: templates/InvenTree/settings/barcode.html:8 msgid "Barcode Settings" -msgstr "Ajustes de Código de Barras" +msgstr "" #: templates/InvenTree/settings/build.html:8 msgid "Build Order Settings" -msgstr "Configuración de Pedido de Trabajo" +msgstr "" #: templates/InvenTree/settings/category.html:7 msgid "Category Settings" -msgstr "Ajustes de Categoría" +msgstr "" #: templates/InvenTree/settings/global.html:8 msgid "Server Settings" -msgstr "Configuración del Servidor" +msgstr "" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 msgid "Label Settings" -msgstr "Ajustes de Etiqueta" +msgstr "" #: templates/InvenTree/settings/login.html:8 msgid "Login Settings" -msgstr "Configuración de Inicio de Sesión" +msgstr "" #: templates/InvenTree/settings/login.html:15 msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "Registrarse" +msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" -msgstr "Inicio de sesión único" +msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 msgid "Settings" -msgstr "Ajustes" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "Direcciones URL" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "La URL base para este plugin es %(base)s." +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" @@ -10869,7 +9901,7 @@ msgstr "" #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "Abrir en una pestaña nueva" +msgstr "" #: templates/InvenTree/settings/notifications.html:9 #: templates/InvenTree/settings/user_notifications.html:9 @@ -10882,19 +9914,19 @@ msgstr "" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" -msgstr "Ajustes de Parte" +msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" -msgstr "Importar Parte" +msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" -msgstr "Importar Parte" +msgstr "" #: templates/InvenTree/settings/part_parameters.html:20 msgid "Part Parameter Templates" -msgstr "Plantillas de Parámetros de Partes" +msgstr "" #: templates/InvenTree/settings/part_stocktake.html:7 msgid "Stocktake Settings" @@ -10911,102 +9943,102 @@ msgstr "" #: templates/InvenTree/settings/physical_units.html:12 msgid "Add Unit" -msgstr "Añadir unidad" +msgstr "" #: templates/InvenTree/settings/plugin.html:9 #: templates/InvenTree/settings/sidebar.html:64 msgid "Plugin Settings" -msgstr "Ajustes del complemento" +msgstr "" #: templates/InvenTree/settings/plugin.html:15 msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "Cambiar la configuración de abajo requiere reiniciar inmediatamente el servidor. No lo cambie mientras esté en uso activo." +msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" -msgstr "Complementos" +msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" -msgstr "Instalar complemento" +msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" -msgstr "Recargar Plugins" +msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" -msgstr "Los complementos externos no están habilitados para esta instalación de InvenTree" +msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" -msgstr "Pila de error de complementos" +msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" -msgstr "Etapa" +msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" -msgstr "Mensaje" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" -msgstr "Información de Plugin" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" -msgstr "no se proporcionó información de versión" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:61 msgid "License" -msgstr "Licencia" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:70 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "La información del código es extraída del último git commit para este plugin. Puede que no refleje los números de versión oficiales o la información, pero sí el código actual en ejecución." +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:76 msgid "Package information" -msgstr "Información del paquete" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:82 msgid "Installation method" -msgstr "Método de instalación" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:85 msgid "This plugin was installed as a package" -msgstr "Este plugin fue instalado como un paquete" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:87 msgid "This plugin was found in a local server path" -msgstr "Este complemento fue encontrado en una ruta del servidor local" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:93 msgid "Installation path" -msgstr "Ruta de instalación" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" -msgstr "Integrado" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:101 msgid "This is a builtin plugin which cannot be disabled" -msgstr "Este es un complemento incorporado que no puede ser desactivado" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" -msgstr "Muestra" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:108 msgid "This is a sample plugin" @@ -11014,65 +10046,65 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:113 msgid "Commit Author" -msgstr "Autor del Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:117 #: templates/about.html:36 msgid "Commit Date" -msgstr "Fecha del Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:121 #: templates/about.html:29 msgid "Commit Hash" -msgstr "Hash de Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:125 msgid "Commit Message" -msgstr "Mensaje de Commit" +msgstr "" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" -msgstr "Ajustes de Orden de Compra" +msgstr "" #: templates/InvenTree/settings/pricing.html:7 msgid "Pricing Settings" -msgstr "Configuración de Precios" +msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" -msgstr "Tipos de Cambio" +msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" -msgstr "Actualizar Ahora" +msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" -msgstr "Última Actualización" +msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" -msgstr "Nunca" +msgstr "" #: templates/InvenTree/settings/project_codes.html:8 msgid "Project Code Settings" -msgstr "Configuración del código de proyecto" +msgstr "" #: templates/InvenTree/settings/project_codes.html:21 #: templates/InvenTree/settings/sidebar.html:33 msgid "Project Codes" -msgstr "Códigos del proyecto" +msgstr "" #: templates/InvenTree/settings/project_codes.html:25 #: templates/InvenTree/settings/settings_staff_js.html:216 msgid "New Project Code" -msgstr "Nuevo código de proyecto" +msgstr "" #: templates/InvenTree/settings/report.html:8 #: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" -msgstr "Ajustes del Informe" +msgstr "" #: templates/InvenTree/settings/returns.html:7 msgid "Return Order Settings" @@ -11080,11 +10112,11 @@ msgstr "" #: templates/InvenTree/settings/setting.html:31 msgid "No value set" -msgstr "Ningún valor establecido" +msgstr "" #: templates/InvenTree/settings/setting.html:46 msgid "Edit setting" -msgstr "Editar ajustes" +msgstr "" #: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" @@ -11107,11 +10139,11 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" -msgstr "Eliminar" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:95 msgid "Edit Custom Unit" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,151 +10194,163 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" #: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" -msgstr "Configuración del Usuario" +msgstr "" #: templates/InvenTree/settings/sidebar.html:9 msgid "Account" -msgstr "Cuenta" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" -msgstr "Mostrar" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "Página de Inicio" +msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" -msgstr "Buscar" +msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:43 msgid "Reporting" -msgstr "Informando" +msgstr "" #: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" -msgstr "Configuración Global" +msgstr "" #: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 msgid "Server" -msgstr "Servidor" +msgstr "" #: templates/InvenTree/settings/sidebar.html:41 msgid "Labels" -msgstr "Etiquetas" +msgstr "" #: templates/InvenTree/settings/sidebar.html:45 msgid "Categories" -msgstr "Categorías" +msgstr "" #: templates/InvenTree/settings/so.html:7 msgid "Sales Order Settings" -msgstr "Configuración de orden de venta" +msgstr "" #: templates/InvenTree/settings/stock.html:7 msgid "Stock Settings" -msgstr "Configuración de Stock" +msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" #: templates/InvenTree/settings/user.html:13 msgid "Account Settings" -msgstr "Configuración de la Cuenta" +msgstr "" #: templates/InvenTree/settings/user.html:19 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 msgid "Change Password" -msgstr "Cambiar Contraseña" +msgstr "" + +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" -msgstr "Las siguientes direcciones de correo electrónico están asociadas con tu cuenta:" +msgstr "" #: templates/InvenTree/settings/user.html:76 msgid "Verified" -msgstr "Verificado" +msgstr "" #: templates/InvenTree/settings/user.html:78 msgid "Unverified" -msgstr "Sin verificar" +msgstr "" #: templates/InvenTree/settings/user.html:80 #: templates/js/translated/company.js:957 msgid "Primary" -msgstr "Principal" +msgstr "" #: templates/InvenTree/settings/user.html:86 msgid "Make Primary" -msgstr "Hacer Principal" +msgstr "" #: templates/InvenTree/settings/user.html:87 msgid "Re-send Verification" -msgstr "Reenviar verificación" +msgstr "" #: templates/InvenTree/settings/user.html:96 msgid "Warning:" -msgstr "Advertencia:" +msgstr "" #: templates/InvenTree/settings/user.html:97 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "Actualmente no tiene ninguna dirección de correo electrónico configurada. Realmente deberías añadir una dirección de correo electrónico para que puedas recibir notificaciones, restablecer tu contraseña, etc." +msgstr "" #: templates/InvenTree/settings/user.html:105 msgid "Add Email Address" -msgstr "Añadir correo electrónico" +msgstr "" #: templates/InvenTree/settings/user.html:110 msgid "Add Email" -msgstr "Agregar Email" +msgstr "" #: templates/InvenTree/settings/user.html:120 msgid "Multifactor" @@ -11314,7 +10358,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:125 msgid "You have these factors available:" -msgstr "Tienes estos factores disponibles:" +msgstr "" #: templates/InvenTree/settings/user.html:135 msgid "TOTP" @@ -11322,110 +10366,110 @@ msgstr "" #: templates/InvenTree/settings/user.html:141 msgid "Static" -msgstr "Estático" +msgstr "" #: templates/InvenTree/settings/user.html:150 msgid "Multifactor authentication is not configured for your account" -msgstr "La autenticación multifactor no está configurada para su cuenta" +msgstr "" #: templates/InvenTree/settings/user.html:157 msgid "Change factors" -msgstr "Cambiar factores" +msgstr "" #: templates/InvenTree/settings/user.html:158 msgid "Setup multifactor" -msgstr "Configurar factor múltiple" +msgstr "" #: templates/InvenTree/settings/user.html:160 msgid "Remove multifactor" -msgstr "Remover factor múltiple" +msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" -msgstr "Sesiones Activas" +msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" -msgstr "Cerrar sesiones activas (excepto esta)" +msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" -msgstr "Cerrar Sesiones Activas" +msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" -msgstr "desconocido en desconocido" +msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" -msgstr "desconocido" +msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" -msgstr "Dirección IP" +msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" -msgstr "Dispositivo" +msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" -msgstr "Última Actividad" +msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" -msgstr "%(time)s atrás (esta sesión)" +msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" -msgstr "%(time)s atrás" +msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" -msgstr "Ajuste de Visualización" +msgstr "" #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" -msgstr "Configuración del Tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:39 msgid "Select theme" -msgstr "Seleccionar tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:50 msgid "Set Theme" -msgstr "Establecer tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:58 msgid "Language Settings" -msgstr "Configuración de Idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:67 msgid "Select language" -msgstr "Seleccionar idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:83 #, python-format msgid "%(lang_translated)s%% translated" -msgstr "%(lang_translated)s%% traducido" +msgstr "" #: templates/InvenTree/settings/user_display.html:85 msgid "No translations available" -msgstr "No hay traducciones disponibles" +msgstr "" #: templates/InvenTree/settings/user_display.html:92 msgid "Set Language" -msgstr "Definir Idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" -msgstr "Algunos idiomas no están completos" +msgstr "" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficient" @@ -11433,67 +10477,67 @@ msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "and hidden." -msgstr "y oculto." +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "Show them too" -msgstr "Mostrar también" +msgstr "" #: templates/InvenTree/settings/user_display.html:106 msgid "Help the translation efforts!" -msgstr "¡Ayuda a los esfuerzos de traducción!" +msgstr "" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "La aplicación web es traducida por una comunidad de voluntarios a través de crowdin. Tus contribuciones serán bienvenidas." +msgstr "" #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "Proyecto de traducción de InvenTree" +msgstr "" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" -msgstr "Ajustes de página de inicio" +msgstr "" #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" -msgstr "Ajustes de Búsqueda" +msgstr "" #: templates/InvenTree/settings/user_sso.html:9 msgid "Single Sign On Accounts" -msgstr "Cuentas de inicio de sesión único" +msgstr "" #: templates/InvenTree/settings/user_sso.html:16 msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "Puede iniciar sesión en su cuenta utilizando cualquiera de las siguientes cuentas de terceros:" +msgstr "" #: templates/InvenTree/settings/user_sso.html:52 msgid "There are no social network accounts connected to this account." -msgstr "No hay cuentas de redes sociales conectadas a esta cuenta." +msgstr "" #: templates/InvenTree/settings/user_sso.html:58 msgid "Add SSO Account" -msgstr "Añadir cuenta SSO" +msgstr "" #: templates/InvenTree/settings/user_sso.html:67 msgid "Single Sign On is not enabled for this server" -msgstr "El inicio de sesión único no está habilitado para este servidor" +msgstr "" #: templates/about.html:9 msgid "InvenTree Version" -msgstr "Versión de InvenTree" +msgstr "" #: templates/about.html:14 msgid "Development Version" -msgstr "Versión de Desarrollo" +msgstr "" #: templates/about.html:17 msgid "Up to Date" -msgstr "Actualizado" +msgstr "" #: templates/about.html:19 msgid "Update Available" -msgstr "Actualización Disponible" +msgstr "" #: templates/about.html:43 msgid "Commit Branch" @@ -11501,143 +10545,143 @@ msgstr "" #: templates/about.html:49 msgid "InvenTree Documentation" -msgstr "Documentación de InvenTree" +msgstr "" #: templates/about.html:54 msgid "API Version" -msgstr "Versión API" +msgstr "" #: templates/about.html:59 msgid "Python Version" -msgstr "Versión de Python" +msgstr "" #: templates/about.html:64 msgid "Django Version" -msgstr "Versión de Django" +msgstr "" #: templates/about.html:69 msgid "View Code on GitHub" -msgstr "Ver código en GitHub" +msgstr "" #: templates/about.html:74 msgid "Credits" -msgstr "Créditos" +msgstr "" #: templates/about.html:79 msgid "Mobile App" -msgstr "Aplicación Móvil" +msgstr "" #: templates/about.html:84 msgid "Submit Bug Report" -msgstr "Enviar Informe de Error" +msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" -msgstr "copiar al portapapeles" +msgstr "" #: templates/about.html:91 msgid "copy version information" -msgstr "copiar información de versión" +msgstr "" #: templates/account/base.html:66 templates/navbar.html:17 msgid "InvenTree logo" -msgstr "Logo de InvenTree" +msgstr "" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:9 msgid "Confirm Email Address" -msgstr "Confirmar Email" +msgstr "" #: templates/account/email_confirm.html:15 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "Confirme que %(email)s es una dirección de correo electrónico para el usuario %(user_display)s." +msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" -msgstr "Confirmar" +msgstr "" #: templates/account/email_confirm.html:29 #, python-format msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "Este enlace de confirmación de correo electrónico ha caducado o no es válido. Por favor, envíe un nuevo correo electrónico de solicitud de confirmación." +msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" -msgstr "Ingresar" +msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" -msgstr "¿No es un miembro?" +msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" -msgstr "Registrarse" +msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" -msgstr "¿Ha olvidado la contraseña?" +msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" -msgstr "o iniciar sesión con" +msgstr "" #: templates/account/logout.html:5 templates/account/logout.html:8 #: templates/account/logout.html:20 msgid "Sign Out" -msgstr "Cerrar Sesión" +msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "¿Está seguro de que desea salir?" +msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "Volver al sitio" +msgstr "" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "Restablecer Contraseña" +msgstr "" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "¿Olvidó su contraseña? Introduzca su dirección de correo electrónico a continuación y le enviaremos un correo electrónico que le permita restablecerla." +msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "Reestablecer mi Contraseña" +msgstr "" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "Esta función está actualmente deshabilitada. Por favor, póngase en contacto con un administrador." +msgstr "" #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "Token Incorrecto" +msgstr "" #: templates/account/password_reset_from_key.html:11 #, python-format msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "El enlace de restablecimiento de contraseña no era válido, posiblemente porque ya ha sido utilizado. Por favor, solicite un nuevo restablecimiento de contraseña." +msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "Cambiar contraseña" +msgstr "" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." -msgstr "Se ha cambiado la contraseña." +msgstr "" #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "¿Ya tienes una cuenta? Entonces inicia sesión." +msgstr "" #: templates/account/signup.html:28 msgid "Use a SSO-provider for signup" @@ -11660,23 +10704,23 @@ msgstr "" #: templates/admin_button.html:8 msgid "View in administration panel" -msgstr "Ver en el panel de administración" +msgstr "" #: templates/allauth_2fa/authenticate.html:5 msgid "Two-Factor Authentication" -msgstr "Autenticación de dos factores" +msgstr "" #: templates/allauth_2fa/authenticate.html:13 msgid "Authenticate" -msgstr "Autenticar" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:6 msgid "Two-Factor Authentication Backup Tokens" -msgstr "Tokens de autenticación de doble factor" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:17 msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "Se han generado tokens de copia de seguridad, pero no se revelan aquí por razones de seguridad. Pulse el botón de abajo para generar nuevos." +msgstr "" #: templates/allauth_2fa/backup_tokens.html:20 msgid "No backup tokens are available. Press the button below to generate some." @@ -11684,71 +10728,67 @@ msgstr "" #: templates/allauth_2fa/backup_tokens.html:28 msgid "Generate Tokens" -msgstr "Generar tokens" +msgstr "" #: templates/allauth_2fa/remove.html:6 msgid "Disable Two-Factor Authentication" -msgstr "Deshabilitar autenticación de dos factores" +msgstr "" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "¿Está seguro?" +msgstr "" #: templates/allauth_2fa/remove.html:17 msgid "Disable 2FA" -msgstr "Desactivar 2FA" +msgstr "" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "Configurar Autenticación de Dos Factores" +msgstr "" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "Paso 1" +msgstr "" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "Escanea el código QR de abajo con un generador de tokens de tu elección (por ejemplo Google Authenticator)." - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " msgstr "" -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "Paso 2" +msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "Ingrese un token generado por la aplicación:" +msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" -msgstr "Verificar" +msgstr "" #: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 msgid "Add Link" -msgstr "Agregar Enlace" +msgstr "" #: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 msgid "Add Attachment" -msgstr "Añadir archivo adjunto" +msgstr "" #: templates/barcode_data.html:5 msgid "Barcode Identifier" -msgstr "Identificador de Código de Barras" +msgstr "" #: templates/base.html:103 msgid "Server Restart Required" -msgstr "Reinicio del Servidor Requerido" +msgstr "" #: templates/base.html:106 msgid "A configuration option has been changed which requires a server restart" -msgstr "Se ha cambiado una opción de configuración que requiere reiniciar el servidor" +msgstr "" #: templates/base.html:106 templates/base.html:116 msgid "Contact your system administrator for further information" -msgstr "Póngase en contacto con su administrador para más información" +msgstr "" #: templates/base.html:113 msgid "Pending Database Migrations" @@ -11771,45 +10811,45 @@ msgstr "" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "Se requiere stock para el siguiente orden de trabajo" +msgstr "" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "Orden de trabajo %(build)s - creando %(quantity)s x %(part)s" +msgstr "" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "Haga clic en el siguiente enlace para ver esta orden de trabajo" +msgstr "" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "Las siguientes partes están bajas en stock requerido" +msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" -msgstr "Cantidad requerida" +msgstr "" #: templates/email/build_order_required_stock.html:38 #: templates/email/low_stock_notification.html:30 msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "Estás recibiendo este correo electrónico porque estás suscrito a las notificaciones de esta parte " +msgstr "" #: templates/email/low_stock_notification.html:9 msgid "Click on the following link to view this part" -msgstr "Haga clic en el siguiente enlace para ver esta parte" +msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" -msgstr "Cantidad Mínima" +msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" -msgstr "Escanear código de barras" +msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,12 +11077,12 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" -msgstr "Cerrar" +msgstr "" #: templates/js/translated/bom.js:306 msgid "Download BOM Template" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" -msgstr "Seleccionar" +msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12665,19 +11673,19 @@ msgstr "" #: templates/js/translated/company.js:360 msgid "Delete Supplier Parts" -msgstr "Eliminar Partes de Proveedor" +msgstr "" #: templates/js/translated/company.js:466 msgid "Add new Company" -msgstr "Añadir nueva Empresa" +msgstr "" #: templates/js/translated/company.js:546 msgid "Parts Supplied" -msgstr "Partes Suministradas" +msgstr "" #: templates/js/translated/company.js:555 msgid "Parts Manufactured" -msgstr "Partes Fabricadas" +msgstr "" #: templates/js/translated/company.js:570 msgid "No company information found" @@ -12685,7 +11693,7 @@ msgstr "" #: templates/js/translated/company.js:619 msgid "Create New Contact" -msgstr "Crear Nuevo Contacto" +msgstr "" #: templates/js/translated/company.js:635 #: templates/js/translated/company.js:758 @@ -12719,137 +11727,137 @@ msgstr "" #: templates/js/translated/company.js:762 msgid "Delete Contact" -msgstr "Eliminar Contacto" +msgstr "" #: templates/js/translated/company.js:859 msgid "Create New Address" -msgstr "Crear Nueva Dirección" +msgstr "" #: templates/js/translated/company.js:874 #: templates/js/translated/company.js:1035 msgid "Edit Address" -msgstr "Editar Dirección" +msgstr "" #: templates/js/translated/company.js:909 msgid "All selected addresses will be deleted" -msgstr "Todos las direcciones seleccionadas serán eliminadas" +msgstr "" #: templates/js/translated/company.js:923 msgid "Delete Addresses" -msgstr "Eliminar Direcciones" +msgstr "" #: templates/js/translated/company.js:950 msgid "No addresses found" -msgstr "No se encontraron direcciones" +msgstr "" #: templates/js/translated/company.js:989 msgid "Postal city" -msgstr "Ciudad postal" +msgstr "" #: templates/js/translated/company.js:995 msgid "State/province" -msgstr "Estado/provincia" +msgstr "" #: templates/js/translated/company.js:1007 msgid "Courier notes" -msgstr "Notas del mensajero" +msgstr "" #: templates/js/translated/company.js:1013 msgid "Internal notes" -msgstr "Notas internas" +msgstr "" #: templates/js/translated/company.js:1039 msgid "Delete Address" -msgstr "Eliminar Dirección" +msgstr "" #: templates/js/translated/company.js:1112 msgid "All selected manufacturer parts will be deleted" -msgstr "Se eliminarán todas las partes del fabricante seleccionadas" +msgstr "" #: templates/js/translated/company.js:1127 msgid "Delete Manufacturer Parts" -msgstr "Eliminar Partes del Fabricante" +msgstr "" #: templates/js/translated/company.js:1161 msgid "All selected parameters will be deleted" -msgstr "Todos los parámetros seleccionados serán eliminados" +msgstr "" #: templates/js/translated/company.js:1175 msgid "Delete Parameters" -msgstr "Eliminar Parámetros" +msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" -msgstr "Ordenar Partes" +msgstr "" #: templates/js/translated/company.js:1208 msgid "Delete manufacturer parts" -msgstr "Eliminar partes del fabricante" +msgstr "" #: templates/js/translated/company.js:1240 msgid "Manufacturer part actions" -msgstr "Acciones para partes del fabricante" +msgstr "" #: templates/js/translated/company.js:1259 msgid "No manufacturer parts found" -msgstr "No se encontraron partes del fabricante" +msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" -msgstr "Plantilla de parte" +msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" -msgstr "Parte ensamblada" +msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" -msgstr "No se encontraron parámetros" +msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" -msgstr "Editar parámetro" +msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" -msgstr "Eliminar parámetro" +msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" -msgstr "Editar Parámetro" +msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" -msgstr "Eliminar Parámetro" +msgstr "" #: templates/js/translated/company.js:1496 msgid "Delete supplier parts" -msgstr "Eliminar piezas del proveedor" +msgstr "" #: templates/js/translated/company.js:1546 msgid "No supplier parts found" -msgstr "No se encontraron partes de proveedor" +msgstr "" #: templates/js/translated/company.js:1664 msgid "Base Units" -msgstr "Unidades base" +msgstr "" #: templates/js/translated/company.js:1694 msgid "Availability" -msgstr "Disponibilidad" +msgstr "" #: templates/js/translated/company.js:1725 msgid "Edit supplier part" -msgstr "Editar parte del proveedor" +msgstr "" #: templates/js/translated/company.js:1726 msgid "Delete supplier part" -msgstr "Eliminar parte del proveedor" +msgstr "" #: templates/js/translated/company.js:1779 #: templates/js/translated/pricing.js:694 @@ -12867,7 +11875,7 @@ msgstr "" #: templates/js/translated/company.js:1833 msgid "Last updated" -msgstr "Última actualización" +msgstr "" #: templates/js/translated/company.js:1840 msgid "Edit price break" @@ -12877,194 +11885,230 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" -msgstr "verdadero" +msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" -msgstr "falso" +msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" -msgstr "Seleccionar filtro" +msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" -msgstr "Imprimir Etiquetas" +msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" -msgstr "Imprimir reportes" +msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" -msgstr "Descargar tabla de datos" +msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" -msgstr "Recargar tabla de datos" +msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" -msgstr "Añadir un nuevo filtro" +msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" -msgstr "Limpiar todos los filtros" +msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" -msgstr "Crear filtro" +msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" -msgstr "Acción Prohibida" +msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" -msgstr "Operación de creación no permitida" +msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" -msgstr "Existen errores en el formulario" +msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 -msgid "Clear input" +#: templates/js/translated/forms.js:2489 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:3091 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:3091 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:3103 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:77 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:80 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:93 +msgid "True" +msgstr "" + +#: templates/js/translated/helpers.js:94 +msgid "False" +msgstr "" + +#: templates/js/translated/index.js:104 +msgid "No parts required for builds" +msgstr "" + +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +msgid "Select Items" msgstr "" -#: templates/js/translated/forms.js:3134 -msgid "File Column" +#: templates/js/translated/label.js:54 +msgid "No items selected for printing" msgstr "" -#: templates/js/translated/forms.js:3134 -msgid "Field Name" +#: templates/js/translated/label.js:72 +msgid "No Labels Found" msgstr "" -#: templates/js/translated/forms.js:3146 -msgid "Select Columns" +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" msgstr "" -#: templates/js/translated/helpers.js:80 -msgid "YES" +#: templates/js/translated/label.js:97 +msgid "selected" msgstr "" -#: templates/js/translated/helpers.js:83 -msgid "NO" +#: templates/js/translated/label.js:133 +msgid "Printing Options" msgstr "" -#: templates/js/translated/helpers.js:96 -msgid "True" +#: templates/js/translated/label.js:148 +msgid "Print label" msgstr "" -#: templates/js/translated/helpers.js:97 -msgid "False" +#: templates/js/translated/label.js:148 +msgid "Print labels" msgstr "" -#: templates/js/translated/index.js:104 -msgid "No parts required for builds" +#: templates/js/translated/label.js:149 +msgid "Print" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 -msgid "Select Items" +#: templates/js/translated/label.js:155 +msgid "Select label template" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 -msgid "No items selected for printing" +#: templates/js/translated/label.js:168 +msgid "Select plugin" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" -msgstr "Enviar" +msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13100,406 +12144,402 @@ msgstr "" #: templates/js/translated/notification.js:296 templates/notifications.html:12 msgid "Notifications will load here" -msgstr "Las notificaciones cargarán aquí" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" msgstr "" -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" -msgstr "Editar Línea" +msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" -msgstr "Eliminar Línea" +msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" -msgstr "No se encontraron artículos de línea" +msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" -msgstr "Duplicar línea" +msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" -msgstr "Editar línea" +msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" -msgstr "Eliminar línea" +msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" -msgstr "Atributos de Parte" +msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" -msgstr "Opciones de Creación de Parte" +msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" -msgstr "Opciones de Duplicación de Parte" +msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" -msgstr "Añadir Categoría de Parte" +msgstr "" + +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" -msgstr "Crear Categoría de Parte" +msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" -msgstr "Crear nueva categoría después de esta" +msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" -msgstr "Categoría de parte creada" +msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" -msgstr "Editar Categoría de Parte" +msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" -msgstr "¿Estás seguro de que deseas eliminar esta categoría?" +msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" -msgstr "Mover a la categoría principal" +msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" -msgstr "Eliminar Categoría de Parte" +msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" -msgstr "Acción para partes en esta categoría" +msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" -msgstr "Acción para categorías secundarias" +msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "Crear Parte" +msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "Crear otra parte después de esta" +msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "Parte creada exitosamente" +msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "Editar Parte" +msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "Parte editada" +msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" -msgstr "Stock bajo" +msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" -msgstr "No hay stock disponible" +msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" -msgstr "partes" +msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" -msgstr "Sin categoría" +msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" -msgstr "Mostrar como lista" +msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" -msgstr "Mostrar como cuadrícula" +msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" -msgstr "No se encontraron subcategorías" +msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" -msgstr "Mostrar como árbol" +msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" -msgstr "Cargar subcategorías" +msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" -msgstr "Categoría suscrita" +msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" -msgstr "No hay plantillas de prueba que coincidan con la consulta" +msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" -msgstr "resultados" +msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" -msgstr "Esta prueba está definida para una parte principal" +msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" -msgstr "Editar plantilla de resultado de prueba" +msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" -msgstr "Eliminar plantilla de resultados de prueba" +msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" -msgstr "Sin fecha especificada" +msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" -msgstr "Fecha especificada es en el pasado" +msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" -msgstr "Especulativo" +msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" -msgstr "No hay información de planificación disponible para esta parte" +msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" -msgstr "Cantidad de Stock Programadas" +msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" -msgstr "Cantidad Máxima" +msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13521,35 +12561,35 @@ msgstr "" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "Desactivar Plugin" +msgstr "" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 msgid "Enable Plugin" -msgstr "Activar Plugin" +msgstr "" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "El plugin fue instalado" +msgstr "" #: templates/js/translated/plugin.js:177 msgid "Are you sure you want to enable this plugin?" -msgstr "¿Estás seguro de que deseas activar este plugin?" +msgstr "" #: templates/js/translated/plugin.js:181 msgid "Are you sure you want to disable this plugin?" -msgstr "¿Estás seguro de que deseas desactivar este plugin?" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Enable" -msgstr "Activar" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Disable" -msgstr "Desactivar" +msgstr "" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "Plugin actualizado" +msgstr "" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14094,7 +13121,7 @@ msgstr "" #: templates/js/translated/search.js:292 templates/search.html:25 msgid "Enter search query" -msgstr "Ingresar consulta de búsqueda" +msgstr "" #: templates/js/translated/search.js:342 msgid "result" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "Mover" +msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" -msgstr "Añadir" +msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "Editar resultado de prueba" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "Eliminar resultado de prueba" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,25 +13933,29 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" #: templates/navbar.html:45 msgid "Buy" -msgstr "Comprar" +msgstr "" #: templates/navbar.html:57 msgid "Sell" -msgstr "Vender" +msgstr "" #: templates/navbar.html:121 msgid "Show Notifications" -msgstr "Mostrar notificaciones" +msgstr "" #: templates/navbar.html:124 msgid "New Notifications" -msgstr "Notificaciones nuevas" +msgstr "" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" @@ -14950,99 +13963,83 @@ msgstr "" #: templates/navbar.html:148 msgid "Logout" -msgstr "Cerrar sesión" +msgstr "" #: templates/notes_buttons.html:6 templates/notes_buttons.html:7 msgid "Save" -msgstr "Guardar" +msgstr "" #: templates/notifications.html:9 msgid "Show all notifications and history" -msgstr "Mostrar todas las notificaciones y el historial" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" msgstr "" #: templates/qr_code.html:11 msgid "QR data not provided" -msgstr "Datos QR no proporcionados" +msgstr "" #: templates/registration/logged_out.html:7 msgid "You were logged out successfully." -msgstr "Se ha cerrado la sesión correctamente." +msgstr "" #: templates/registration/logged_out.html:9 msgid "Log in again" -msgstr "Volver a ingresar" +msgstr "" #: templates/search.html:9 msgid "Show full search results" -msgstr "Mostrar resultados completos de búsqueda" +msgstr "" #: templates/search.html:12 msgid "Clear search" -msgstr "Borrar búsqueda" +msgstr "" #: templates/search.html:15 msgid "Close search menu" -msgstr "Cerrar menú de búsqueda" +msgstr "" #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" -msgstr "Fallo al iniciar sesión en la red social" +msgstr "" #: templates/socialaccount/authentication_error.html:8 msgid "Account Login Failure" -msgstr "Error al iniciar sesión en la cuenta" +msgstr "" #: templates/socialaccount/authentication_error.html:11 msgid "An error occurred while attempting to login via your social network account." -msgstr "Se ha producido un error al intentar iniciar sesión a través de su cuenta de red social." +msgstr "" #: templates/socialaccount/authentication_error.html:13 msgid "Contact your system administrator for further information." -msgstr "Póngase en contacto con su administrador para más información." +msgstr "" #: templates/socialaccount/login.html:13 #, python-format msgid "Connect %(provider)s" -msgstr "Conectar a %(provider)s" +msgstr "" #: templates/socialaccount/login.html:15 #, python-format msgid "You are about to connect a new third party account from %(provider)s." -msgstr "Estás a punto de conectar una nueva cuenta de terceros desde %(provider)s." +msgstr "" #: templates/socialaccount/login.html:17 #, python-format msgid "Sign In Via %(provider)s" -msgstr "Iniciar sesión vía %(provider)s" +msgstr "" #: templates/socialaccount/login.html:19 #, python-format msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "Estás a punto de iniciar sesión usando una cuenta de terceros de %(provider)s." +msgstr "" #: templates/socialaccount/login.html:24 msgid "Continue" -msgstr "Continuar" +msgstr "" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" -msgstr "Proveedor SSO inválido" +msgstr "" #: templates/socialaccount/login.html:31 msgid "The selected SSO provider is invalid, or has not been correctly configured" @@ -15067,75 +14064,67 @@ msgstr "" #: templates/stats.html:13 msgid "Instance Name" -msgstr "Nombre de Instancia" +msgstr "" #: templates/stats.html:18 msgid "Database" -msgstr "Base de datos" +msgstr "" #: templates/stats.html:26 msgid "Server is running in debug mode" -msgstr "El servidor se está ejecutando en modo depuración" +msgstr "" #: templates/stats.html:33 msgid "Docker Mode" -msgstr "Modo Docker" +msgstr "" #: templates/stats.html:34 msgid "Server is deployed using docker" -msgstr "El servidor está desplegado usando docker" +msgstr "" #: templates/stats.html:39 msgid "Plugin Support" -msgstr "Soporte para Plugins" +msgstr "" #: templates/stats.html:43 msgid "Plugin support enabled" -msgstr "Soporte de plugins habilitado" +msgstr "" #: templates/stats.html:45 msgid "Plugin support disabled" -msgstr "Soporte de plugins desactivado" +msgstr "" #: templates/stats.html:52 msgid "Server status" -msgstr "Estado del servidor" +msgstr "" #: templates/stats.html:55 msgid "Healthy" -msgstr "Saludable" +msgstr "" #: templates/stats.html:57 msgid "Issues detected" -msgstr "Problemas detectados" +msgstr "" #: templates/stats.html:64 msgid "Background Worker" -msgstr "Trabajador en segundo plano" +msgstr "" #: templates/stats.html:67 msgid "Background worker not running" -msgstr "Trabajador en segundo plano no ejecutado" +msgstr "" #: templates/stats.html:75 msgid "Email Settings" -msgstr "Configuración de Email" +msgstr "" #: templates/stats.html:78 msgid "Email settings not configured" -msgstr "Configuración de correo no configurada" - -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" msgstr "" #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "Sí" +msgstr "" #: templates/yesnolabel.html:6 msgid "No" @@ -15143,11 +14132,11 @@ msgstr "" #: users/admin.py:104 msgid "Users" -msgstr "Usuarios" +msgstr "" #: users/admin.py:105 msgid "Select which users are assigned to this group" -msgstr "Seleccione qué usuarios están asignados a este grupo" +msgstr "" #: users/admin.py:249 msgid "The following users are members of multiple groups" @@ -15155,15 +14144,15 @@ msgstr "" #: users/admin.py:283 msgid "Personal info" -msgstr "Información personal" +msgstr "" #: users/admin.py:285 msgid "Permissions" -msgstr "Permisos" +msgstr "" #: users/admin.py:288 msgid "Important dates" -msgstr "Fechas importantes" +msgstr "" #: users/authentication.py:29 users/models.py:138 msgid "Token has been revoked" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" -msgstr "Permiso establecido" +msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" -msgstr "Grupo" +msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" -msgstr "Vista" +msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" -msgstr "Permiso para ver artículos" +msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" -msgstr "Permiso para añadir artículos" +msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" -msgstr "Cambiar" +msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" -msgstr "Permisos para editar artículos" +msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" -msgstr "Permiso para eliminar artículos" +msgstr "" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index c9947d68693f..f40d3d6c40a6 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -1,705 +1,917 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: inventree\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" -"Last-Translator: \n" -"Language-Team: Spanish, Mexico\n" -"Language: es_MX\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: es-MX\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" -msgstr "Endpoint de API no encontrado" +msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" -msgstr "El usuario no tiene permiso para ver este modelo" +msgstr "" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "Unidad proporcionada no válida ({unit})" +msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" -msgstr "Ningún valor proporcionado" +msgstr "" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "No se pudo convertir {original} a {unit}" +msgstr "" #: InvenTree/conversion.py:206 msgid "Invalid quantity supplied" -msgstr "La cantidad suministrada es inválida" +msgstr "" #: InvenTree/conversion.py:220 #, python-brace-format msgid "Invalid quantity supplied ({exc})" -msgstr "La cantidad suministrada es inválida ({exc})" +msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "Detalles del error pueden encontrarse en el panel de administración" +msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" -msgstr "Ingrese la fecha" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +msgstr "" + +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" -msgstr "Notas" +msgstr "" #: InvenTree/format.py:164 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "El valor '{name}' no aparece en formato de patrón" +msgstr "" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " -msgstr "El valor proporcionado no coincide con el patrón requerido: " +msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" -msgstr "Ingresa tu contraseña" +msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" -msgstr "Ingrese su nueva contraseña" +msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" -msgstr "Confirma la contraseña" +msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" -msgstr "Confirma la nueva contraseña" +msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" -msgstr "Contraseña anterior" +msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" -msgstr "Email (de nuevo)" +msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" -msgstr "Confirmación de correo electrónico" +msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." -msgstr "El correo electrónico debe coincidir." - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "El registro ha sido desactivado." +msgstr "" -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." -msgstr "La dirección de correo electrónico principal proporcionada no es válida." +msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." -msgstr "El dominio de correo electrónico proporcionado no está aprobado." +msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." -msgstr "El registro ha sido desactivado." +msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" -msgstr "Cantidad proporcionada no válida" +msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" -msgstr "No se ha proporcionado un número de serie" +msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" -msgstr "Número de serie duplicado" +msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" -msgstr "Rango de grupo inválido: {group}" +msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "El rango del grupo {group} supera la cantidad permitida ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" -msgstr "Secuencia de grupo inválida: {group}" +msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" -msgstr "No se encontraron números de serie" +msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "Los números de serie únicos ({len(serials)}) deben coincidir con la cantidad ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" -msgstr "Elimine etiquetas HTML de este valor" +msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" -msgstr "Error de conexión" +msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" -msgstr "El servidor respondió con un código de estado no válido" +msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" -msgstr "Se ha producido una excepción" +msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" -msgstr "El servidor respondió con un valor de longitud de contenido inválido" +msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" -msgstr "El tamaño de la imagen es demasiado grande" +msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" -msgstr "La imagen descargada exedió el tamaño máximo" +msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" -msgstr "El servidor remoto devolvió una respuesta vacía" +msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" -msgstr "La URL proporcionada no es un archivo de imagen válido" +msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Árabe" - -#: InvenTree/locales.py:19 msgid "Bulgarian" -msgstr "Búlgaro" +msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" -msgstr "Checo" +msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" -msgstr "Danés" +msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" -msgstr "Alemán" +msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" -msgstr "Griego" +msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" -msgstr "Inglés" +msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" -msgstr "Español" +msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" -msgstr "Español (México)" - -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estonia" +msgstr "" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" -msgstr "Farsi / Persa" +msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" -msgstr "Finlandés" +msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" -msgstr "Francés" +msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" -msgstr "Hebreo" +msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" -msgstr "Húngaro" +msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" -msgstr "Italiano" +msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" -msgstr "Japonés" +msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" -msgstr "Coreano" +msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Letón" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" -msgstr "Holandés" +msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" -msgstr "Noruego" +msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" -msgstr "Polaco" +msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" -msgstr "Portugués" +msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" -msgstr "Portugués (Brasileño)" - -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumano" +msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" -msgstr "Ruso" +msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" -msgstr "Eslovaco" +msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" -msgstr "Esloveno" +msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" -msgstr "Serbio" +msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" -msgstr "Sueco" +msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" -msgstr "Tailandés" +msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" -msgstr "Turco" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ucraniano" +msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" -msgstr "Vietnamita" +msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" -msgstr "Chino (Simplificado)" +msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" -msgstr "Chino (Tradicional)" +msgstr "" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Iniciar sesión en la aplicación" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Correo electrónico" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "Error al ejecutar la validación del plugin" +msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Los metadatos deben ser un objeto diccionario de python" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "Metadatos del complemento" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "Campo de metadatos JSON, para uso por complementos externos" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" -msgstr "Patrón con formato incorrecto" +msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" -msgstr "Clave de formato especificado desconocida" +msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" -msgstr "Falta la clave de formato necesaria" +msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" -msgstr "El campo de servidor no puede estar vacío" +msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" -msgstr "La referencia debe coincidir con el patrón requerido" +msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" -msgstr "El número de referencia es demasiado grande" +msgstr "" + +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" -msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" +msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" -msgstr "Selección no válida" +msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "Nombre" +msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "Descripción" +msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" -msgstr "Descripción (opcional)" +msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" -msgstr "Ruta" +msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" -msgstr "Notas (opcional)" +msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" -msgstr "Datos de código de barras" +msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" -msgstr "Datos de código de barras de terceros" +msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" -msgstr "Hash del Código de barras" +msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" -msgstr "Hash único de datos de código de barras" +msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" -msgstr "Código de barras existente encontrado" +msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" -msgstr "Error de servidor" +msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." -msgstr "Se ha registrado un error por el servidor." +msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" -msgstr "Debe ser un número válido" +msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "Moneda" +msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" -msgstr "Seleccionar moneda de las opciones disponibles" +msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nombre de usuario" +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." +msgstr "" + +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" +msgstr "" + +#: InvenTree/serializers.py:472 +msgid "Your account has been created." +msgstr "" + +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:596 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:597 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:614 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:620 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:641 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:644 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:757 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:760 +msgid "No data columns supplied" +msgstr "" + +#: InvenTree/serializers.py:827 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:836 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:859 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:860 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:878 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1161 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:70 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:73 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Nombre" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Nombre de usuario" +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Apellido" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Apellido del usuario" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Dirección de email del usuario" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Personal" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Tiene permisos de personal este usuario" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Superusuario" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Este usuario es un superusuario" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Activo" +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Esta cuenta de usuario está activa" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "No tiene permiso para cambiar este cargo de usuario." +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "Solo los superusuarios pueden crear nuevos usuarios" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "Su cuenta ha sido creada." +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" -#: InvenTree/serializers.py:496 -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" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "Bienvenido a InvenTree" +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" -#: InvenTree/serializers.py:561 -msgid "Invalid value" -msgstr "Valor inválido" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 -msgid "Data File" -msgstr "Archivo de datos" +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" -#: InvenTree/serializers.py:582 -msgid "Select data file for upload" -msgstr "Seleccione el archivo para subir" +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" -#: InvenTree/serializers.py:599 -msgid "Unsupported file type" -msgstr "Tipo de archivo no soportado" +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" -#: InvenTree/serializers.py:605 -msgid "File is too large" -msgstr "El archivo es demasiado grande" +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" -#: InvenTree/serializers.py:626 -msgid "No columns found in file" -msgstr "No hay columnas en el archivo" +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" -#: InvenTree/serializers.py:629 -msgid "No data rows found in file" -msgstr "No hay filas de datos en el archivo" +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/serializers.py:742 -msgid "No data rows provided" -msgstr "No se proporcionaron filas de datos" +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" -#: InvenTree/serializers.py:745 -msgid "No data columns supplied" -msgstr "No hay columnas de datos para suministrar" +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" -#: InvenTree/serializers.py:812 -#, python-brace-format -msgid "Missing required column: '{name}'" -msgstr "Falta la columna requerida: '{name}'" +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" -#: InvenTree/serializers.py:821 -#, python-brace-format -msgid "Duplicate column: '{col}'" -msgstr "Columna duplicada: '{col}'" +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" -#: InvenTree/serializers.py:861 -msgid "Remote Image" -msgstr "Imagen remota" +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "URL de imagen remota" +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "La descarga de imágenes desde la URL remota no está habilitada" +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" +#: InvenTree/status_codes.py:191 +msgid "Replace" msgstr "" -#: InvenTree/status.py:70 -msgid "Email backend not configured" +#: InvenTree/status_codes.py:194 +msgid "Refund" msgstr "" -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" +#: InvenTree/status_codes.py:197 +msgid "Reject" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +939,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1005,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1722,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1734,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1745,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1758,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1782,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1912,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1925,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1950,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1959,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1987,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2016,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2034,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2060,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2102,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3737,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3753,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3851,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4258,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4294,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4317,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4335,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4356,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4384,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4397,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4411,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4434,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4506,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4521,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4531,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4540,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4576,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4597,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4630,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4644,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4668,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4716,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4883,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4904,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4981,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" - -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5529,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5662,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5709,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5730,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5778,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5814,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5852,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5882,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5918,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5934,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5946,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6113,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7176,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7280,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7294,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7423,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7447,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7457,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7469,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7518,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7532,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7630,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7672,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7754,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7834,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7846,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7947,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8030,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8076,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8100,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8128,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8144,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8241,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8303,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8396,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" - -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9320,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9336,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9357,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9367,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9386,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9432,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9449,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9493,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9515,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9529,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9574,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9663,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9873,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9917,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9955,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10027,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10037,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10071,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10140,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10163,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10182,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10195,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10251,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10286,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10300,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10385,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10577,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10599,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10608,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10641,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10755,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10828,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10842,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10862,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10894,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10930,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10983,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11078,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11197,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11217,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11272,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11280,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11417,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11788,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11805,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11886,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12006,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12119,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12147,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12666,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12679,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12737,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12754,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12917,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12979,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13136,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13934,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13974,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14123,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14195,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po deleted file mode 100644 index 37bc37dc0029..000000000000 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ /dev/null @@ -1,15239 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: inventree\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" -"Last-Translator: \n" -"Language-Team: Estonian\n" -"Language: et_EE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: et\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" - -#: InvenTree/api.py:269 -msgid "API endpoint not found" -msgstr "" - -#: InvenTree/api.py:502 -msgid "User does not have permission to view this model" -msgstr "Teil ei ole selle lehe vaatamiseks luba" - -#: InvenTree/conversion.py:160 -#, python-brace-format -msgid "Invalid unit provided ({unit})" -msgstr "" - -#: InvenTree/conversion.py:177 -msgid "No value provided" -msgstr "" - -#: InvenTree/conversion.py:204 -#, python-brace-format -msgid "Could not convert {original} to {unit}" -msgstr "" - -#: InvenTree/conversion.py:206 -msgid "Invalid quantity supplied" -msgstr "" - -#: InvenTree/conversion.py:220 -#, python-brace-format -msgid "Invalid quantity supplied ({exc})" -msgstr "" - -#: InvenTree/exceptions.py:108 -msgid "Error details can be found in the admin panel" -msgstr "" - -#: InvenTree/fields.py:136 -msgid "Enter date" -msgstr "" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 -#: order/templates/order/return_order_sidebar.html:9 -#: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 -msgid "Notes" -msgstr "Märkmed" - -#: InvenTree/format.py:164 -#, python-brace-format -msgid "Value '{name}' does not appear in pattern format" -msgstr "" - -#: InvenTree/format.py:175 -msgid "Provided value does not match required pattern: " -msgstr "" - -#: InvenTree/forms.py:129 -msgid "Enter password" -msgstr "Salasõna" - -#: InvenTree/forms.py:130 -msgid "Enter new password" -msgstr "Sisesta uus parool" - -#: InvenTree/forms.py:139 -msgid "Confirm password" -msgstr "Kinnitage parool" - -#: InvenTree/forms.py:140 -msgid "Confirm new password" -msgstr "Kinnita uut parooli" - -#: InvenTree/forms.py:144 -msgid "Old password" -msgstr "Vana parool" - -#: InvenTree/forms.py:183 -msgid "Email (again)" -msgstr "Meili (uuesti)" - -#: InvenTree/forms.py:187 -msgid "Email address confirmation" -msgstr "E-posti aadressi kinnitus" - -#: InvenTree/forms.py:210 -msgid "You must type the same email each time." -msgstr "" - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 -msgid "The provided primary email address is not valid." -msgstr "" - -#: InvenTree/forms.py:274 -msgid "The provided email domain is not approved." -msgstr "" - -#: InvenTree/forms.py:403 -msgid "Registration is disabled." -msgstr "Registreerimine on ajutiselt väljalülitatud." - -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 -msgid "Invalid quantity provided" -msgstr "" - -#: InvenTree/helpers.py:499 -msgid "Empty serial number string" -msgstr "" - -#: InvenTree/helpers.py:528 -msgid "Duplicate serial" -msgstr "" - -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 -#, python-brace-format -msgid "Invalid group range: {group}" -msgstr "" - -#: InvenTree/helpers.py:591 -#, python-brace-format -msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 -#, python-brace-format -msgid "Invalid group sequence: {group}" -msgstr "" - -#: InvenTree/helpers.py:657 -msgid "No serial numbers found" -msgstr "" - -#: InvenTree/helpers.py:662 -msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:780 -msgid "Remove HTML tags from this value" -msgstr "" - -#: InvenTree/helpers_model.py:133 -msgid "Connection error" -msgstr "Ühenduse viga" - -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 -msgid "Server responded with invalid status code" -msgstr "" - -#: InvenTree/helpers_model.py:141 -msgid "Exception occurred" -msgstr "Esines tõrge" - -#: InvenTree/helpers_model.py:151 -msgid "Server responded with invalid Content-Length value" -msgstr "" - -#: InvenTree/helpers_model.py:154 -msgid "Image size is too large" -msgstr "" - -#: InvenTree/helpers_model.py:166 -msgid "Image download exceeded maximum size" -msgstr "" - -#: InvenTree/helpers_model.py:171 -msgid "Remote server returned empty response" -msgstr "" - -#: InvenTree/helpers_model.py:179 -msgid "Supplied URL is not a valid image file" -msgstr "" - -#: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Araabia" - -#: InvenTree/locales.py:19 -msgid "Bulgarian" -msgstr "Bulgaaria keel" - -#: InvenTree/locales.py:20 -msgid "Czech" -msgstr "Tšehhi" - -#: InvenTree/locales.py:21 -msgid "Danish" -msgstr "Taani" - -#: InvenTree/locales.py:22 -msgid "German" -msgstr "Saksa keel" - -#: InvenTree/locales.py:23 -msgid "Greek" -msgstr "Kreeka keel" - -#: InvenTree/locales.py:24 -msgid "English" -msgstr "Inglise keel" - -#: InvenTree/locales.py:25 -msgid "Spanish" -msgstr "Hispaania keel" - -#: InvenTree/locales.py:26 -msgid "Spanish (Mexican)" -msgstr "" - -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Eesti" - -#: InvenTree/locales.py:28 -msgid "Farsi / Persian" -msgstr "" - -#: InvenTree/locales.py:29 -msgid "Finnish" -msgstr "" - -#: InvenTree/locales.py:30 -msgid "French" -msgstr "" - -#: InvenTree/locales.py:31 -msgid "Hebrew" -msgstr "" - -#: InvenTree/locales.py:32 -msgid "Hindi" -msgstr "" - -#: InvenTree/locales.py:33 -msgid "Hungarian" -msgstr "" - -#: InvenTree/locales.py:34 -msgid "Italian" -msgstr "" - -#: InvenTree/locales.py:35 -msgid "Japanese" -msgstr "" - -#: InvenTree/locales.py:36 -msgid "Korean" -msgstr "" - -#: InvenTree/locales.py:37 -msgid "Latvian" -msgstr "" - -#: InvenTree/locales.py:38 -msgid "Dutch" -msgstr "" - -#: InvenTree/locales.py:39 -msgid "Norwegian" -msgstr "" - -#: InvenTree/locales.py:40 -msgid "Polish" -msgstr "" - -#: InvenTree/locales.py:41 -msgid "Portuguese" -msgstr "" - -#: InvenTree/locales.py:42 -msgid "Portuguese (Brazilian)" -msgstr "" - -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 -msgid "Russian" -msgstr "" - -#: InvenTree/locales.py:45 -msgid "Slovak" -msgstr "" - -#: InvenTree/locales.py:46 -msgid "Slovenian" -msgstr "" - -#: InvenTree/locales.py:47 -msgid "Serbian" -msgstr "" - -#: InvenTree/locales.py:48 -msgid "Swedish" -msgstr "" - -#: InvenTree/locales.py:49 -msgid "Thai" -msgstr "Tai keel" - -#: InvenTree/locales.py:50 -msgid "Turkish" -msgstr "Türgi keel" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukraina keel" - -#: InvenTree/locales.py:52 -msgid "Vietnamese" -msgstr "" - -#: InvenTree/locales.py:53 -msgid "Chinese (Simplified)" -msgstr "" - -#: InvenTree/locales.py:54 -msgid "Chinese (Traditional)" -msgstr "" - -#: InvenTree/magic_login.py:28 -#, python-brace-format -msgid "[{site_name}] Log in to the app" -msgstr "" - -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 -#: templates/InvenTree/settings/user.html:49 -#: templates/js/translated/company.js:677 -msgid "Email" -msgstr "" - -#: InvenTree/models.py:103 -msgid "Error running plugin validation" -msgstr "" - -#: InvenTree/models.py:172 -msgid "Metadata must be a python dict object" -msgstr "" - -#: InvenTree/models.py:178 -msgid "Plugin Metadata" -msgstr "" - -#: InvenTree/models.py:179 -msgid "JSON metadata field, for use by external plugins" -msgstr "" - -#: InvenTree/models.py:409 -msgid "Improperly formatted pattern" -msgstr "" - -#: InvenTree/models.py:416 -msgid "Unknown format key specified" -msgstr "" - -#: InvenTree/models.py:422 -msgid "Missing required format key" -msgstr "" - -#: InvenTree/models.py:433 -msgid "Reference field cannot be empty" -msgstr "" - -#: InvenTree/models.py:441 -msgid "Reference must match required pattern" -msgstr "" - -#: InvenTree/models.py:472 -msgid "Reference number is too large" -msgstr "" - -#: InvenTree/models.py:723 -msgid "Duplicate names cannot exist under the same parent" -msgstr "" - -#: InvenTree/models.py:740 -msgid "Invalid choice" -msgstr "" - -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 -#: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 -#: templates/InvenTree/settings/plugin_settings.html:22 -#: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 -#: templates/js/translated/company.js:676 -#: templates/js/translated/company.js:724 -#: templates/js/translated/company.js:913 -#: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 -msgid "Name" -msgstr "" - -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 -#: company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 -#: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 -#: templates/InvenTree/settings/notifications.html:19 -#: templates/InvenTree/settings/plugin_settings.html:27 -#: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 -#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 -#: templates/js/translated/company.js:1330 -#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 -#: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 -msgid "Description" -msgstr "" - -#: InvenTree/models.py:777 stock/models.py:84 -msgid "Description (optional)" -msgstr "" - -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 -msgid "Path" -msgstr "" - -#: InvenTree/models.py:929 -msgid "Markdown notes (optional)" -msgstr "" - -#: InvenTree/models.py:960 -msgid "Barcode Data" -msgstr "" - -#: InvenTree/models.py:961 -msgid "Third party barcode data" -msgstr "" - -#: InvenTree/models.py:967 -msgid "Barcode Hash" -msgstr "" - -#: InvenTree/models.py:968 -msgid "Unique hash of barcode data" -msgstr "" - -#: InvenTree/models.py:1035 -msgid "Existing barcode found" -msgstr "" - -#: InvenTree/models.py:1078 -msgid "Server Error" -msgstr "" - -#: InvenTree/models.py:1079 -msgid "An error has been logged by the server." -msgstr "" - -#: InvenTree/serializers.py:63 part/models.py:4387 -msgid "Must be a valid number" -msgstr "" - -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 -#: templates/InvenTree/settings/settings_staff_js.html:44 -#: templates/currency_data.html:5 -msgid "Currency" -msgstr "Valuuta" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Eesnimi" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Perekonnanimi" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "" - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "" - -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" -msgstr "" - -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "" - -#: InvenTree/serializers.py:561 -msgid "Invalid value" -msgstr "" - -#: InvenTree/serializers.py:581 importer/models.py:63 -msgid "Data File" -msgstr "" - -#: InvenTree/serializers.py:582 -msgid "Select data file for upload" -msgstr "" - -#: InvenTree/serializers.py:599 -msgid "Unsupported file type" -msgstr "" - -#: InvenTree/serializers.py:605 -msgid "File is too large" -msgstr "" - -#: InvenTree/serializers.py:626 -msgid "No columns found in file" -msgstr "" - -#: InvenTree/serializers.py:629 -msgid "No data rows found in file" -msgstr "" - -#: InvenTree/serializers.py:742 -msgid "No data rows provided" -msgstr "" - -#: InvenTree/serializers.py:745 -msgid "No data columns supplied" -msgstr "" - -#: InvenTree/serializers.py:812 -#, python-brace-format -msgid "Missing required column: '{name}'" -msgstr "" - -#: InvenTree/serializers.py:821 -#, python-brace-format -msgid "Duplicate column: '{col}'" -msgstr "" - -#: InvenTree/serializers.py:861 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" -msgstr "" - -#: InvenTree/status.py:70 -msgid "Email backend not configured" -msgstr "" - -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" -msgstr "" - -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" -msgstr "Tundmatu andmebaas" - -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" -msgstr "" - -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" -msgstr "" - -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" -msgstr "" - -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" -msgstr "" - -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" -msgstr "" - -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" -msgstr "" - -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" -msgstr "Määra parool" - -#: InvenTree/views.py:434 -msgid "Password fields must match" -msgstr "" - -#: InvenTree/views.py:442 -msgid "Wrong password provided" -msgstr "Esitatud vale parool" - -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" -msgstr "" - -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" -msgstr "" - -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "" - -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" -msgstr "" - -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" -msgstr "" - -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" -msgstr "" - -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" -msgstr "" - -#: build/models.py:180 -msgid "Build order part cannot be changed" -msgstr "" - -#: build/models.py:241 -msgid "Build Order Reference" -msgstr "" - -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 -#: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 -#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 -msgid "Reference" -msgstr "Tootekood" - -#: build/models.py:253 -msgid "Brief description of the build (optional)" -msgstr "" - -#: build/models.py:262 -msgid "BuildOrder to which this build is allocated" -msgstr "" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 -#: part/templates/part/part_app_base.html:8 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/upload_bom.html:52 -#: report/templates/report/inventree_bill_of_materials_report.html:110 -#: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 -#: templates/email/build_order_completed.html:17 -#: templates/email/build_order_required_stock.html:17 -#: templates/email/low_stock_notification.html:15 -#: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 -#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 -#: templates/js/translated/company.js:1116 -#: templates/js/translated/company.js:1271 -#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 -#: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 -#: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 -msgid "Part" -msgstr "" - -#: build/models.py:275 -msgid "Select part to build" -msgstr "" - -#: build/models.py:280 -msgid "Sales Order Reference" -msgstr "" - -#: build/models.py:284 -msgid "SalesOrder to which this build is allocated" -msgstr "" - -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 -msgid "Source Location" -msgstr "" - -#: build/models.py:293 -msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" - -#: build/models.py:298 -msgid "Destination Location" -msgstr "" - -#: build/models.py:302 -msgid "Select location where the completed items will be stored" -msgstr "" - -#: build/models.py:306 -msgid "Build Quantity" -msgstr "" - -#: build/models.py:309 -msgid "Number of stock items to build" -msgstr "" - -#: build/models.py:313 -msgid "Completed items" -msgstr "" - -#: build/models.py:315 -msgid "Number of stock items which have been completed" -msgstr "" - -#: build/models.py:319 -msgid "Build Status" -msgstr "" - -#: build/models.py:323 -msgid "Build status code" -msgstr "" - -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 -msgid "Batch Code" -msgstr "" - -#: build/models.py:336 build/serializers.py:303 -msgid "Batch code for this build output" -msgstr "" - -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 -msgid "Creation Date" -msgstr "" - -#: build/models.py:343 -msgid "Target completion date" -msgstr "" - -#: build/models.py:344 -msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" - -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 -msgid "Completion Date" -msgstr "" - -#: build/models.py:353 -msgid "completed by" -msgstr "" - -#: build/models.py:361 templates/js/translated/build.js:2379 -msgid "Issued by" -msgstr "" - -#: build/models.py:362 -msgid "User who issued this build order" -msgstr "" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 -#: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 -msgid "Responsible" -msgstr "" - -#: build/models.py:371 -msgid "User or group responsible for this build order" -msgstr "" - -#: build/models.py:376 build/templates/build/detail.html:108 -#: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 -#: stock/templates/stock/item_base.html:200 -#: templates/js/translated/company.js:1019 -msgid "External Link" -msgstr "" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 -msgid "Build Priority" -msgstr "" - -#: build/models.py:384 -msgid "Priority of this build order" -msgstr "" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 -#: templates/project_code_data.html:6 -msgid "Project Code" -msgstr "" - -#: build/models.py:392 -msgid "Project code for this build order" -msgstr "" - -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 -#, python-brace-format -msgid "Build order {build} has been completed" -msgstr "" - -#: build/models.py:679 -msgid "A build order has been completed" -msgstr "" - -#: build/models.py:967 build/models.py:1055 -msgid "No build output specified" -msgstr "" - -#: build/models.py:970 -msgid "Build output is already completed" -msgstr "" - -#: build/models.py:973 -msgid "Build output does not match Build Order" -msgstr "" - -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 -msgid "Quantity must be greater than zero" -msgstr "" - -#: build/models.py:1064 build/serializers.py:240 -msgid "Quantity cannot be greater than the output quantity" -msgstr "" - -#: build/models.py:1124 build/serializers.py:563 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 -msgid "Build object" -msgstr "" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 -#: part/templates/part/part_pricing.html:16 -#: part/templates/part/upload_bom.html:53 -#: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 -#: stock/templates/stock/item_base.html:287 -#: stock/templates/stock/item_base.html:295 -#: stock/templates/stock/item_base.html:342 -#: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 -#: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 -#: templates/js/translated/pricing.js:381 -#: templates/js/translated/pricing.js:474 -#: templates/js/translated/pricing.js:522 -#: templates/js/translated/pricing.js:616 -#: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 -#: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 -msgid "Quantity" -msgstr "" - -#: build/models.py:1505 -msgid "Required quantity for build order" -msgstr "" - -#: build/models.py:1585 -msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" - -#: build/models.py:1594 -#, python-brace-format -msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" - -#: build/models.py:1604 order/models.py:1992 -msgid "Stock item is over-allocated" -msgstr "" - -#: build/models.py:1610 order/models.py:1995 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1616 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1675 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 -#: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 -#: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 -msgid "Stock Item" -msgstr "" - -#: build/models.py:1748 -msgid "Source stock item" -msgstr "" - -#: build/models.py:1761 -msgid "Stock quantity to allocate to build" -msgstr "" - -#: build/models.py:1769 -msgid "Install into" -msgstr "" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 -msgid "Build Output" -msgstr "" - -#: build/serializers.py:184 -msgid "Build output does not match the parent build" -msgstr "" - -#: build/serializers.py:188 -msgid "Output part does not match BuildOrder part" -msgstr "" - -#: build/serializers.py:192 -msgid "This build output has already been completed" -msgstr "" - -#: build/serializers.py:203 -msgid "This build output is not fully allocated" -msgstr "" - -#: build/serializers.py:223 build/serializers.py:270 -msgid "Enter quantity for build output" -msgstr "" - -#: build/serializers.py:291 -msgid "Integer quantity required for trackable parts" -msgstr "" - -#: build/serializers.py:294 -msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" - -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 -msgid "Serial Numbers" -msgstr "" - -#: build/serializers.py:310 -msgid "Enter serial numbers for build outputs" -msgstr "" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:331 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:457 -msgid "Stock location for scrapped outputs" -msgstr "" - -#: build/serializers.py:463 -msgid "Discard Allocations" -msgstr "" - -#: build/serializers.py:464 -msgid "Discard any stock allocations for scrapped outputs" -msgstr "" - -#: build/serializers.py:469 -msgid "Reason for scrapping build output(s)" -msgstr "" - -#: build/serializers.py:529 -msgid "Location for completed build outputs" -msgstr "" - -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 -msgid "Status" -msgstr "" - -#: build/serializers.py:541 -msgid "Accept Incomplete Allocation" -msgstr "" - -#: build/serializers.py:542 -msgid "Complete outputs if stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" - -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" - -#: build/serializers.py:661 -msgid "Remove Incomplete Outputs" -msgstr "" - -#: build/serializers.py:662 -msgid "Delete any build outputs which have not been completed" -msgstr "" - -#: build/serializers.py:689 -msgid "Not permitted" -msgstr "" - -#: build/serializers.py:690 -msgid "Accept as consumed by this build order" -msgstr "" - -#: build/serializers.py:691 -msgid "Deallocate before completing this build order" -msgstr "" - -#: build/serializers.py:721 -msgid "Overallocated Stock" -msgstr "" - -#: build/serializers.py:723 -msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" - -#: build/serializers.py:733 -msgid "Some stock items have been overallocated" -msgstr "" - -#: build/serializers.py:738 -msgid "Accept Unallocated" -msgstr "" - -#: build/serializers.py:739 -msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" - -#: build/serializers.py:749 templates/js/translated/build.js:316 -msgid "Required stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 -msgid "Accept Incomplete" -msgstr "" - -#: build/serializers.py:755 -msgid "Accept that the required number of build outputs have not been completed" -msgstr "" - -#: build/serializers.py:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 -msgid "Build order has incomplete outputs" -msgstr "" - -#: build/serializers.py:818 -msgid "Build Line" -msgstr "" - -#: build/serializers.py:828 -msgid "Build output" -msgstr "" - -#: build/serializers.py:836 -msgid "Build output must point to the same build" -msgstr "" - -#: build/serializers.py:872 -msgid "Build Line Item" -msgstr "" - -#: build/serializers.py:886 -msgid "bom_item.part must point to the same part as the build order" -msgstr "" - -#: build/serializers.py:901 stock/serializers.py:1294 -msgid "Item must be in stock" -msgstr "" - -#: build/serializers.py:949 order/serializers.py:1351 -#, python-brace-format -msgid "Available quantity ({q}) exceeded" -msgstr "" - -#: build/serializers.py:955 -msgid "Build output must be specified for allocation of tracked parts" -msgstr "" - -#: build/serializers.py:962 -msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" - -#: build/serializers.py:986 order/serializers.py:1610 -msgid "Allocation items must be provided" -msgstr "" - -#: build/serializers.py:1049 -msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" - -#: build/serializers.py:1057 -msgid "Exclude Location" -msgstr "" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "" - -#: build/serializers.py:1064 -msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" - -#: build/serializers.py:1069 -msgid "Substitute Stock" -msgstr "" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "Tarnija osa number" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Osa ID" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Seerianumber" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Ootel" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Katkestatud" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Valmis" - -#: build/tasks.py:184 -msgid "Stock required for build order" -msgstr "" - -#: build/tasks.py:201 -msgid "Overdue Build Order" -msgstr "" - -#: build/tasks.py:206 -#, python-brace-format -msgid "Build order {bo} is now overdue" -msgstr "" - -#: build/templates/build/build_base.html:18 -msgid "Part thumbnail" -msgstr "" - -#: build/templates/build/build_base.html:38 -#: company/templates/company/supplier_part.html:35 -#: order/templates/order/order_base.html:29 -#: order/templates/order/return_order_base.html:38 -#: order/templates/order/sales_order_base.html:38 -#: part/templates/part/part_base.html:41 -#: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 -msgid "Barcode actions" -msgstr "" - -#: build/templates/build/build_base.html:42 -#: company/templates/company/supplier_part.html:39 -#: order/templates/order/order_base.html:33 -#: order/templates/order/return_order_base.html:42 -#: order/templates/order/sales_order_base.html:42 -#: part/templates/part/part_base.html:44 -#: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: build/templates/build/build_base.html:45 -#: company/templates/company/supplier_part.html:41 -#: order/templates/order/order_base.html:36 -#: order/templates/order/return_order_base.html:45 -#: order/templates/order/sales_order_base.html:45 -#: part/templates/part/part_base.html:47 -#: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 -msgid "Unlink Barcode" -msgstr "" - -#: build/templates/build/build_base.html:47 -#: company/templates/company/supplier_part.html:43 -#: order/templates/order/order_base.html:38 -#: order/templates/order/return_order_base.html:47 -#: order/templates/order/sales_order_base.html:47 -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 -msgid "Link Barcode" -msgstr "" - -#: build/templates/build/build_base.html:56 -#: order/templates/order/order_base.html:46 -#: order/templates/order/return_order_base.html:55 -#: order/templates/order/sales_order_base.html:55 -msgid "Print actions" -msgstr "" - -#: build/templates/build/build_base.html:60 -msgid "Print build order report" -msgstr "" - -#: build/templates/build/build_base.html:67 -msgid "Build actions" -msgstr "" - -#: build/templates/build/build_base.html:71 -msgid "Edit Build" -msgstr "" - -#: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" - -#: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" - -#: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 -msgid "Delete Build" -msgstr "" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 -msgid "Complete Build" -msgstr "" - -#: build/templates/build/build_base.html:115 -msgid "Build Description" -msgstr "" - -#: build/templates/build/build_base.html:125 -msgid "No build outputs have been created for this build order" -msgstr "" - -#: build/templates/build/build_base.html:132 -msgid "Build Order is ready to mark as completed" -msgstr "" - -#: build/templates/build/build_base.html:137 -msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" - -#: build/templates/build/build_base.html:142 -msgid "Required build quantity has not yet been completed" -msgstr "" - -#: build/templates/build/build_base.html:147 -msgid "Stock has not been fully allocated to this Build Order" -msgstr "" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 -msgid "Target Date" -msgstr "" - -#: build/templates/build/build_base.html:173 -#, python-format -msgid "This build was due on %(target)s" -msgstr "" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 -msgid "Overdue" -msgstr "" - -#: build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 -msgid "Completed Outputs" -msgstr "" - -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 -#: order/templates/order/sales_order_base.html:9 -#: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 -#: stock/templates/stock/item_base.html:369 -#: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 -msgid "Sales Order" -msgstr "" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 -msgid "Delete Build Order" -msgstr "" - -#: build/templates/build/build_base.html:312 -msgid "Build Order QR Code" -msgstr "" - -#: build/templates/build/build_base.html:324 -msgid "Link Barcode to Build Order" -msgstr "" - -#: build/templates/build/detail.html:15 -msgid "Build Details" -msgstr "" - -#: build/templates/build/detail.html:38 -msgid "Stock Source" -msgstr "" - -#: build/templates/build/detail.html:43 -msgid "Stock can be taken from any available location." -msgstr "" - -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 -msgid "Destination" -msgstr "" - -#: build/templates/build/detail.html:56 -msgid "Destination location not specified" -msgstr "" - -#: build/templates/build/detail.html:73 -msgid "Allocated Parts" -msgstr "" - -#: build/templates/build/detail.html:80 stock/admin.py:162 -#: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 -msgid "Batch" -msgstr "" - -#: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 -msgid "Created" -msgstr "Loodud" - -#: build/templates/build/detail.html:144 -msgid "No target date set" -msgstr "" - -#: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 -msgid "Completed" -msgstr "" - -#: build/templates/build/detail.html:153 -msgid "Build not complete" -msgstr "" - -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 -msgid "Child Build Orders" -msgstr "" - -#: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" - -#: build/templates/build/detail.html:181 -msgid "Deallocate stock" -msgstr "" - -#: build/templates/build/detail.html:182 -msgid "Deallocate Stock" -msgstr "" - -#: build/templates/build/detail.html:184 -msgid "Automatically allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:185 -msgid "Auto Allocate" -msgstr "" - -#: build/templates/build/detail.html:187 -msgid "Manually allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:188 -msgid "Allocate Stock" -msgstr "" - -#: build/templates/build/detail.html:191 -msgid "Order required parts" -msgstr "" - -#: build/templates/build/detail.html:192 -#: templates/js/translated/purchase_order.js:795 -msgid "Order Parts" -msgstr "" - -#: build/templates/build/detail.html:205 -msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" - -#: build/templates/build/detail.html:215 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:219 -msgid "Create new build output" -msgstr "" - -#: build/templates/build/detail.html:220 -msgid "New Build Output" -msgstr "" - -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 -msgid "Consumed Stock" -msgstr "" - -#: build/templates/build/detail.html:261 -msgid "Completed Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 -#: company/templates/company/detail.html:229 -#: company/templates/company/manufacturer_part.html:141 -#: company/templates/company/manufacturer_part_sidebar.html:9 -#: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - -#: common/files.py:63 -#, python-brace-format -msgid "Unsupported file format: {fmt}" -msgstr "" - -#: common/files.py:65 -msgid "Error reading file (invalid encoding)" -msgstr "" - -#: common/files.py:70 -msgid "Error reading file (invalid format)" -msgstr "" - -#: common/files.py:72 -msgid "Error reading file (incorrect dimension)" -msgstr "" - -#: common/files.py:74 -msgid "Error reading file (data could be corrupted)" -msgstr "" - -#: common/forms.py:12 -msgid "File" -msgstr "" - -#: common/forms.py:12 -msgid "Select file to upload" -msgstr "" - -#: common/forms.py:25 -msgid "{name.title()} File" -msgstr "" - -#: common/forms.py:26 -#, python-brace-format -msgid "Select {name} file to upload" -msgstr "" - -#: common/models.py:86 -msgid "Updated" -msgstr "" - -#: common/models.py:87 -msgid "Timestamp of last update" -msgstr "" - -#: common/models.py:120 -msgid "Site URL is locked by configuration" -msgstr "" - -#: common/models.py:150 -msgid "Unique project code" -msgstr "" - -#: common/models.py:157 -msgid "Project description" -msgstr "" - -#: common/models.py:166 -msgid "User or group responsible for this project" -msgstr "" - -#: common/models.py:783 -msgid "Settings key (must be unique - case insensitive)" -msgstr "" - -#: common/models.py:787 -msgid "Settings value" -msgstr "" - -#: common/models.py:839 -msgid "Chosen value is not a valid option" -msgstr "" - -#: common/models.py:855 -msgid "Value must be a boolean value" -msgstr "" - -#: common/models.py:863 -msgid "Value must be an integer value" -msgstr "" - -#: common/models.py:900 -msgid "Key string must be unique" -msgstr "" - -#: common/models.py:1132 -msgid "No group" -msgstr "Grupp puudub" - -#: common/models.py:1231 -msgid "Restart required" -msgstr "Taaskäivitamine on vajalik" - -#: common/models.py:1233 -msgid "A setting has been changed which requires a server restart" -msgstr "" - -#: common/models.py:1240 -msgid "Pending migrations" -msgstr "" - -#: common/models.py:1241 -msgid "Number of pending database migrations" -msgstr "" - -#: common/models.py:1246 -msgid "Server Instance Name" -msgstr "" - -#: common/models.py:1248 -msgid "String descriptor for the server instance" -msgstr "" - -#: common/models.py:1252 -msgid "Use instance name" -msgstr "" - -#: common/models.py:1253 -msgid "Use the instance name in the title-bar" -msgstr "" - -#: common/models.py:1258 -msgid "Restrict showing `about`" -msgstr "" - -#: common/models.py:1259 -msgid "Show the `about` modal only to superusers" -msgstr "" - -#: common/models.py:1264 company/models.py:111 company/models.py:112 -msgid "Company name" -msgstr "" - -#: common/models.py:1265 -msgid "Internal company name" -msgstr "" - -#: common/models.py:1269 -msgid "Base URL" -msgstr "" - -#: common/models.py:1270 -msgid "Base URL for server instance" -msgstr "" - -#: common/models.py:1276 -msgid "Default Currency" -msgstr "" - -#: common/models.py:1277 -msgid "Select base currency for pricing calculations" -msgstr "" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 -msgid "Currency Update Interval" -msgstr "" - -#: common/models.py:1292 -msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" - -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 -msgid "days" -msgstr "" - -#: common/models.py:1299 -msgid "Currency Update Plugin" -msgstr "" - -#: common/models.py:1300 -msgid "Currency update plugin to use" -msgstr "" - -#: common/models.py:1305 -msgid "Download from URL" -msgstr "" - -#: common/models.py:1307 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/models.py:1313 -msgid "Download Size Limit" -msgstr "" - -#: common/models.py:1314 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/models.py:1320 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:1322 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" - -#: common/models.py:1327 -msgid "Strict URL Validation" -msgstr "" - -#: common/models.py:1328 -msgid "Require schema specification when validating URLs" -msgstr "" - -#: common/models.py:1333 -msgid "Require confirm" -msgstr "" - -#: common/models.py:1334 -msgid "Require explicit user confirmation for certain action." -msgstr "" - -#: common/models.py:1339 -msgid "Tree Depth" -msgstr "" - -#: common/models.py:1341 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" - -#: common/models.py:1347 -msgid "Update Check Interval" -msgstr "" - -#: common/models.py:1348 -msgid "How often to check for updates (set to zero to disable)" -msgstr "" - -#: common/models.py:1354 -msgid "Automatic Backup" -msgstr "Automaatne varundus" - -#: common/models.py:1355 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:1360 -msgid "Auto Backup Interval" -msgstr "" - -#: common/models.py:1361 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:1367 -msgid "Task Deletion Interval" -msgstr "" - -#: common/models.py:1369 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1376 -msgid "Error Log Deletion Interval" -msgstr "" - -#: common/models.py:1378 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1385 -msgid "Notification Deletion Interval" -msgstr "" - -#: common/models.py:1387 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 -msgid "Barcode Support" -msgstr "Vöötkoodi tugi" - -#: common/models.py:1395 -msgid "Enable barcode scanner support in the web interface" -msgstr "" - -#: common/models.py:1400 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1401 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1407 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 -msgid "Part Revisions" -msgstr "" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "" - -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1444 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1447 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1448 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1453 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1454 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1459 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1460 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1465 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1466 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1471 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1472 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1477 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1478 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 -msgid "Template" -msgstr "" - -#: common/models.py:1484 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1490 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 -msgid "Component" -msgstr "" - -#: common/models.py:1496 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1502 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 -msgid "Salable" -msgstr "" - -#: common/models.py:1508 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1514 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 -#: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 -msgid "Virtual" -msgstr "" - -#: common/models.py:1520 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1525 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1526 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1531 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1532 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1537 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1538 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1543 templates/js/translated/part.js:108 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1545 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1551 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1552 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1558 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1559 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1564 -msgid "Enforce Parameter Units" -msgstr "" - -#: common/models.py:1566 -msgid "If units are provided, parameter values must match the specified units" -msgstr "" - -#: common/models.py:1572 -msgid "Minimum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1574 -msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1585 -msgid "Maximum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1587 -msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1598 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1600 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1606 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1608 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1614 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1616 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1622 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1624 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1631 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1632 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1637 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1639 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1645 -msgid "Pricing Rebuild Interval" -msgstr "" - -#: common/models.py:1647 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1654 -msgid "Internal Prices" -msgstr "" - -#: common/models.py:1655 -msgid "Enable internal prices for parts" -msgstr "" - -#: common/models.py:1660 -msgid "Internal Price Override" -msgstr "" - -#: common/models.py:1662 -msgid "If available, internal prices override price range calculations" -msgstr "" - -#: common/models.py:1668 -msgid "Enable label printing" -msgstr "" - -#: common/models.py:1669 -msgid "Enable label printing from the web interface" -msgstr "" - -#: common/models.py:1674 -msgid "Label Image DPI" -msgstr "" - -#: common/models.py:1676 -msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" - -#: common/models.py:1682 -msgid "Enable Reports" -msgstr "" - -#: common/models.py:1683 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1688 templates/stats.html:25 -msgid "Debug Mode" -msgstr "" - -#: common/models.py:1689 -msgid "Generate reports in debug mode (HTML output)" -msgstr "" - -#: common/models.py:1694 -msgid "Log Report Errors" -msgstr "" - -#: common/models.py:1695 -msgid "Log errors which occur when generating reports" -msgstr "" - -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 -msgid "Page Size" -msgstr "" - -#: common/models.py:1701 -msgid "Default page size for PDF reports" -msgstr "" - -#: common/models.py:1706 -msgid "Enable Test Reports" -msgstr "" - -#: common/models.py:1707 -msgid "Enable generation of test reports" -msgstr "" - -#: common/models.py:1712 -msgid "Attach Test Reports" -msgstr "" - -#: common/models.py:1714 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "" - -#: common/models.py:1720 -msgid "Globally Unique Serials" -msgstr "" - -#: common/models.py:1721 -msgid "Serial numbers for stock items must be globally unique" -msgstr "" - -#: common/models.py:1726 -msgid "Autofill Serial Numbers" -msgstr "" - -#: common/models.py:1727 -msgid "Autofill serial numbers in forms" -msgstr "" - -#: common/models.py:1732 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1734 -msgid "Determines default behavior when a stock item is depleted" -msgstr "" - -#: common/models.py:1740 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1742 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1747 -msgid "Stock Expiry" -msgstr "" - -#: common/models.py:1748 -msgid "Enable stock expiry functionality" -msgstr "" - -#: common/models.py:1753 -msgid "Sell Expired Stock" -msgstr "" - -#: common/models.py:1754 -msgid "Allow sale of expired stock" -msgstr "" - -#: common/models.py:1759 -msgid "Stock Stale Time" -msgstr "" - -#: common/models.py:1761 -msgid "Number of days stock items are considered stale before expiring" -msgstr "" - -#: common/models.py:1768 -msgid "Build Expired Stock" -msgstr "" - -#: common/models.py:1769 -msgid "Allow building with expired stock" -msgstr "" - -#: common/models.py:1774 -msgid "Stock Ownership Control" -msgstr "" - -#: common/models.py:1775 -msgid "Enable ownership control over stock locations and items" -msgstr "" - -#: common/models.py:1780 -msgid "Stock Location Default Icon" -msgstr "" - -#: common/models.py:1781 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1786 -msgid "Show Installed Stock Items" -msgstr "" - -#: common/models.py:1787 -msgid "Display installed stock items in stock tables" -msgstr "" - -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 -msgid "Build Order Reference Pattern" -msgstr "" - -#: common/models.py:1810 -msgid "Required pattern for generating Build Order reference field" -msgstr "" - -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/models.py:1852 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" - -#: common/models.py:1858 -msgid "Enable Return Orders" -msgstr "" - -#: common/models.py:1859 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1864 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1866 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1878 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1880 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1886 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1888 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1900 -msgid "Sales Order Default Shipment" -msgstr "" - -#: common/models.py:1901 -msgid "Enable creation of default shipment with sales orders" -msgstr "" - -#: common/models.py:1906 -msgid "Edit Completed Sales Orders" -msgstr "" - -#: common/models.py:1908 -msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 -msgid "Purchase Order Reference Pattern" -msgstr "" - -#: common/models.py:1924 -msgid "Required pattern for generating Purchase Order reference field" -msgstr "" - -#: common/models.py:1936 -msgid "Edit Completed Purchase Orders" -msgstr "" - -#: common/models.py:1938 -msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1944 -msgid "Auto Complete Purchase Orders" -msgstr "" - -#: common/models.py:1946 -msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" - -#: common/models.py:1953 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1954 -msgid "Enable password forgot function on the login pages" -msgstr "" - -#: common/models.py:1959 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1960 -msgid "Enable self-registration for users on the login pages" -msgstr "" - -#: common/models.py:1965 -msgid "Enable SSO" -msgstr "" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "" - -#: common/models.py:1973 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" - -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 -msgid "Email required" -msgstr "" - -#: common/models.py:2012 -msgid "Require user to supply mail on signup" -msgstr "" - -#: common/models.py:2017 -msgid "Auto-fill SSO users" -msgstr "" - -#: common/models.py:2019 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" - -#: common/models.py:2025 -msgid "Mail twice" -msgstr "" - -#: common/models.py:2026 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:2031 -msgid "Password twice" -msgstr "" - -#: common/models.py:2032 -msgid "On signup ask users twice for their password" -msgstr "" - -#: common/models.py:2037 -msgid "Allowed domains" -msgstr "" - -#: common/models.py:2039 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" - -#: common/models.py:2045 -msgid "Group on signup" -msgstr "" - -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" - -#: common/models.py:2053 -msgid "Enforce MFA" -msgstr "" - -#: common/models.py:2054 -msgid "Users must use multifactor security." -msgstr "" - -#: common/models.py:2059 -msgid "Check plugins on startup" -msgstr "" - -#: common/models.py:2061 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:2069 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:2070 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:2076 -msgid "Enable URL integration" -msgstr "" - -#: common/models.py:2077 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:2083 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:2084 -msgid "Enable plugins to integrate into navigation" -msgstr "" - -#: common/models.py:2090 -msgid "Enable app integration" -msgstr "" - -#: common/models.py:2091 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:2097 -msgid "Enable schedule integration" -msgstr "" - -#: common/models.py:2098 -msgid "Enable plugins to run scheduled tasks" -msgstr "" - -#: common/models.py:2104 -msgid "Enable event integration" -msgstr "" - -#: common/models.py:2105 -msgid "Enable plugins to respond to internal events" -msgstr "" - -#: common/models.py:2111 -msgid "Enable project codes" -msgstr "" - -#: common/models.py:2112 -msgid "Enable project codes for tracking projects" -msgstr "" - -#: common/models.py:2117 -msgid "Stocktake Functionality" -msgstr "" - -#: common/models.py:2119 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "" - -#: common/models.py:2125 -msgid "Exclude External Locations" -msgstr "" - -#: common/models.py:2127 -msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" - -#: common/models.py:2133 -msgid "Automatic Stocktake Period" -msgstr "" - -#: common/models.py:2135 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "" - -#: common/models.py:2141 -msgid "Report Deletion Interval" -msgstr "" - -#: common/models.py:2143 -msgid "Stocktake reports will be deleted after specified number of days" -msgstr "" - -#: common/models.py:2150 -msgid "Display Users full names" -msgstr "" - -#: common/models.py:2151 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/models.py:2156 -msgid "Enable Test Station Data" -msgstr "" - -#: common/models.py:2157 -msgid "Enable test station data collection for test results" -msgstr "" - -#: common/models.py:2169 common/models.py:2549 -msgid "Settings key (must be unique - case insensitive" -msgstr "" - -#: common/models.py:2212 -msgid "Hide inactive parts" -msgstr "" - -#: common/models.py:2214 -msgid "Hide inactive parts in results displayed on the homepage" -msgstr "" - -#: common/models.py:2220 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2221 -msgid "Show subscribed parts on the homepage" -msgstr "" - -#: common/models.py:2226 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:2227 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:2232 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:2233 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:2238 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2239 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:2244 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:2245 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:2250 -msgid "Show low stock" -msgstr "" - -#: common/models.py:2251 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2256 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2257 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2262 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2263 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2268 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2269 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2274 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2275 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2280 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2281 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2286 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2287 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2292 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2293 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2298 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2299 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2304 -msgid "Show outstanding SOs" -msgstr "" - -#: common/models.py:2305 -msgid "Show outstanding SOs on the homepage" -msgstr "" - -#: common/models.py:2310 -msgid "Show overdue SOs" -msgstr "" - -#: common/models.py:2311 -msgid "Show overdue SOs on the homepage" -msgstr "" - -#: common/models.py:2316 -msgid "Show pending SO shipments" -msgstr "" - -#: common/models.py:2317 -msgid "Show pending SO shipments on the homepage" -msgstr "" - -#: common/models.py:2322 -msgid "Show News" -msgstr "" - -#: common/models.py:2323 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:2328 -msgid "Inline label display" -msgstr "" - -#: common/models.py:2330 -msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2336 -msgid "Default label printer" -msgstr "" - -#: common/models.py:2338 -msgid "Configure which label printer should be selected by default" -msgstr "" - -#: common/models.py:2344 -msgid "Inline report display" -msgstr "" - -#: common/models.py:2346 -msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2352 -msgid "Search Parts" -msgstr "" - -#: common/models.py:2353 -msgid "Display parts in search preview window" -msgstr "" - -#: common/models.py:2358 -msgid "Search Supplier Parts" -msgstr "" - -#: common/models.py:2359 -msgid "Display supplier parts in search preview window" -msgstr "" - -#: common/models.py:2364 -msgid "Search Manufacturer Parts" -msgstr "" - -#: common/models.py:2365 -msgid "Display manufacturer parts in search preview window" -msgstr "" - -#: common/models.py:2370 -msgid "Hide Inactive Parts" -msgstr "" - -#: common/models.py:2371 -msgid "Excluded inactive parts from search preview window" -msgstr "" - -#: common/models.py:2376 -msgid "Search Categories" -msgstr "" - -#: common/models.py:2377 -msgid "Display part categories in search preview window" -msgstr "" - -#: common/models.py:2382 -msgid "Search Stock" -msgstr "" - -#: common/models.py:2383 -msgid "Display stock items in search preview window" -msgstr "" - -#: common/models.py:2388 -msgid "Hide Unavailable Stock Items" -msgstr "" - -#: common/models.py:2390 -msgid "Exclude stock items which are not available from the search preview window" -msgstr "" - -#: common/models.py:2396 -msgid "Search Locations" -msgstr "" - -#: common/models.py:2397 -msgid "Display stock locations in search preview window" -msgstr "" - -#: common/models.py:2402 -msgid "Search Companies" -msgstr "" - -#: common/models.py:2403 -msgid "Display companies in search preview window" -msgstr "" - -#: common/models.py:2408 -msgid "Search Build Orders" -msgstr "" - -#: common/models.py:2409 -msgid "Display build orders in search preview window" -msgstr "" - -#: common/models.py:2414 -msgid "Search Purchase Orders" -msgstr "" - -#: common/models.py:2415 -msgid "Display purchase orders in search preview window" -msgstr "" - -#: common/models.py:2420 -msgid "Exclude Inactive Purchase Orders" -msgstr "" - -#: common/models.py:2422 -msgid "Exclude inactive purchase orders from search preview window" -msgstr "" - -#: common/models.py:2428 -msgid "Search Sales Orders" -msgstr "" - -#: common/models.py:2429 -msgid "Display sales orders in search preview window" -msgstr "" - -#: common/models.py:2434 -msgid "Exclude Inactive Sales Orders" -msgstr "" - -#: common/models.py:2436 -msgid "Exclude inactive sales orders from search preview window" -msgstr "" - -#: common/models.py:2442 -msgid "Search Return Orders" -msgstr "" - -#: common/models.py:2443 -msgid "Display return orders in search preview window" -msgstr "" - -#: common/models.py:2448 -msgid "Exclude Inactive Return Orders" -msgstr "" - -#: common/models.py:2450 -msgid "Exclude inactive return orders from search preview window" -msgstr "" - -#: common/models.py:2456 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:2458 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:2464 -msgid "Regex Search" -msgstr "" - -#: common/models.py:2465 -msgid "Enable regular expressions in search queries" -msgstr "" - -#: common/models.py:2470 -msgid "Whole Word Search" -msgstr "" - -#: common/models.py:2471 -msgid "Search queries return results for whole word matches" -msgstr "" - -#: common/models.py:2476 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:2477 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2482 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:2483 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2488 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:2489 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:2494 -msgid "Date Format" -msgstr "" - -#: common/models.py:2495 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:2508 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:2509 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:2514 part/templates/part/detail.html:62 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:2516 -msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "" - -#: common/models.py:2522 -msgid "Table String Length" -msgstr "" - -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" -msgstr "" - -#: common/models.py:2530 -msgid "Receive error reports" -msgstr "" - -#: common/models.py:2531 -msgid "Receive notifications for system errors" -msgstr "" - -#: common/models.py:2536 -msgid "Last used printing machines" -msgstr "" - -#: common/models.py:2537 -msgid "Save the last used printing machines for a user" -msgstr "" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 -msgid "Price break quantity" -msgstr "" - -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 -#: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 -msgid "Price" -msgstr "" - -#: common/models.py:2588 -msgid "Unit price at specified quantity" -msgstr "" - -#: common/models.py:2692 common/models.py:2877 -msgid "Endpoint" -msgstr "" - -#: common/models.py:2693 -msgid "Endpoint at which this webhook is received" -msgstr "" - -#: common/models.py:2703 -msgid "Name for this webhook" -msgstr "" - -#: common/models.py:2707 -msgid "Is this webhook active" -msgstr "" - -#: common/models.py:2723 users/models.py:159 -msgid "Token" -msgstr "" - -#: common/models.py:2724 -msgid "Token for access" -msgstr "" - -#: common/models.py:2732 -msgid "Secret" -msgstr "" - -#: common/models.py:2733 -msgid "Shared secret for HMAC" -msgstr "" - -#: common/models.py:2841 -msgid "Message ID" -msgstr "" - -#: common/models.py:2842 -msgid "Unique identifier for this message" -msgstr "" - -#: common/models.py:2850 -msgid "Host" -msgstr "" - -#: common/models.py:2851 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:2859 -msgid "Header" -msgstr "" - -#: common/models.py:2860 -msgid "Header of this message" -msgstr "" - -#: common/models.py:2867 -msgid "Body" -msgstr "" - -#: common/models.py:2868 -msgid "Body of this message" -msgstr "" - -#: common/models.py:2878 -msgid "Endpoint on which this message was received" -msgstr "" - -#: common/models.py:2883 -msgid "Worked on" -msgstr "" - -#: common/models.py:2884 -msgid "Was the work on this message finished?" -msgstr "" - -#: common/models.py:3010 -msgid "Id" -msgstr "" - -#: common/models.py:3012 templates/js/translated/company.js:965 -#: templates/js/translated/news.js:44 -msgid "Title" -msgstr "" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 -msgid "Published" -msgstr "" - -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 -#: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 -msgid "Author" -msgstr "" - -#: common/models.py:3020 templates/js/translated/news.js:52 -msgid "Summary" -msgstr "" - -#: common/models.py:3023 -msgid "Read" -msgstr "" - -#: common/models.py:3023 -msgid "Was this news item read?" -msgstr "" - -#: common/models.py:3040 company/models.py:159 part/models.py:1067 -#: report/templates/report/inventree_bill_of_materials_report.html:126 -#: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report.html:35 -#: stock/templates/stock/item_base.html:133 templates/503.html:31 -#: templates/hover_image.html:7 templates/hover_image.html:9 -#: templates/modals.html:6 -msgid "Image" -msgstr "" - -#: common/models.py:3040 -msgid "Image file" -msgstr "" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 -msgid "Unit name must be a valid identifier" -msgstr "" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - -#: common/notifications.py:314 -#, python-brace-format -msgid "New {verbose_name}" -msgstr "" - -#: common/notifications.py:316 -msgid "A new order has been created and assigned to you" -msgstr "" - -#: common/notifications.py:322 -#, python-brace-format -msgid "{verbose_name} canceled" -msgstr "" - -#: common/notifications.py:324 -msgid "A order that is assigned to you was canceled" -msgstr "" - -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 -msgid "Items Received" -msgstr "" - -#: common/notifications.py:332 -msgid "Items have been received against a purchase order" -msgstr "" - -#: common/notifications.py:339 -msgid "Items have been received against a return order" -msgstr "" - -#: common/notifications.py:457 -msgid "Error raised by plugin" -msgstr "" - -#: common/serializers.py:375 -msgid "Is Running" -msgstr "" - -#: common/serializers.py:381 -msgid "Pending Tasks" -msgstr "" - -#: common/serializers.py:387 -msgid "Scheduled Tasks" -msgstr "" - -#: common/serializers.py:393 -msgid "Failed Tasks" -msgstr "" - -#: common/serializers.py:408 -msgid "Task ID" -msgstr "" - -#: common/serializers.py:408 -msgid "Unique task ID" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock time" -msgstr "" - -#: common/serializers.py:412 -msgid "Task name" -msgstr "" - -#: common/serializers.py:414 -msgid "Function" -msgstr "" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:118 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 -#: templates/patterns/wizard/upload.html:37 -msgid "Upload File" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:119 -#: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 -#: templates/patterns/wizard/match_fields.html:51 -msgid "Match Fields" -msgstr "" - -#: common/views.py:84 -msgid "Match Items" -msgstr "" - -#: common/views.py:401 -msgid "Fields matching failed" -msgstr "" - -#: common/views.py:464 -msgid "Parts imported" -msgstr "" - -#: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 -#: order/templates/order/order_wizard/match_parts.html:19 -#: order/templates/order/order_wizard/po_upload.html:49 -#: part/templates/part/import_wizard/match_fields.html:27 -#: part/templates/part/import_wizard/match_references.html:19 -#: part/templates/part/import_wizard/part_upload.html:56 -#: templates/patterns/wizard/match_fields.html:26 -#: templates/patterns/wizard/upload.html:35 -msgid "Previous Step" -msgstr "" - -#: company/api.py:141 -msgid "Part is Active" -msgstr "" - -#: company/api.py:145 -msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:278 -msgid "Supplier Part is Active" -msgstr "" - -#: company/api.py:282 -msgid "Internal Part is Active" -msgstr "" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 -msgid "Company description" -msgstr "" - -#: company/models.py:118 -msgid "Description of the company" -msgstr "" - -#: company/models.py:123 company/templates/company/company_base.html:106 -#: templates/InvenTree/settings/plugin_settings.html:54 -#: templates/js/translated/company.js:532 -msgid "Website" -msgstr "" - -#: company/models.py:123 -msgid "Company website URL" -msgstr "" - -#: company/models.py:128 -msgid "Phone number" -msgstr "" - -#: company/models.py:130 -msgid "Contact phone number" -msgstr "" - -#: company/models.py:137 -msgid "Contact email address" -msgstr "" - -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 -msgid "Contact" -msgstr "" - -#: company/models.py:144 -msgid "Point of contact" -msgstr "" - -#: company/models.py:150 -msgid "Link to external company information" -msgstr "" - -#: company/models.py:163 -msgid "Is this company active?" -msgstr "" - -#: company/models.py:168 -msgid "Is customer" -msgstr "" - -#: company/models.py:169 -msgid "Do you sell items to this company?" -msgstr "" - -#: company/models.py:174 -msgid "Is supplier" -msgstr "" - -#: company/models.py:175 -msgid "Do you purchase items from this company?" -msgstr "" - -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" - -#: company/models.py:181 -msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:189 -msgid "Default currency used for this company" -msgstr "" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" - -#: company/models.py:372 -msgid "Select company" -msgstr "" - -#: company/models.py:377 -msgid "Address title" -msgstr "" - -#: company/models.py:378 -msgid "Title describing the address entry" -msgstr "" - -#: company/models.py:384 -msgid "Primary address" -msgstr "" - -#: company/models.py:385 -msgid "Set as primary address" -msgstr "" - -#: company/models.py:390 templates/js/translated/company.js:914 -#: templates/js/translated/company.js:971 -msgid "Line 1" -msgstr "" - -#: company/models.py:391 -msgid "Address line 1" -msgstr "" - -#: company/models.py:397 templates/js/translated/company.js:915 -#: templates/js/translated/company.js:977 -msgid "Line 2" -msgstr "" - -#: company/models.py:398 -msgid "Address line 2" -msgstr "" - -#: company/models.py:404 company/models.py:405 -#: templates/js/translated/company.js:983 -msgid "Postal code" -msgstr "" - -#: company/models.py:411 -msgid "City/Region" -msgstr "" - -#: company/models.py:412 -msgid "Postal code city/region" -msgstr "" - -#: company/models.py:418 -msgid "State/Province" -msgstr "" - -#: company/models.py:419 -msgid "State or province" -msgstr "" - -#: company/models.py:425 templates/js/translated/company.js:1001 -msgid "Country" -msgstr "" - -#: company/models.py:426 -msgid "Address country" -msgstr "" - -#: company/models.py:432 -msgid "Courier shipping notes" -msgstr "" - -#: company/models.py:433 -msgid "Notes for shipping courier" -msgstr "" - -#: company/models.py:439 -msgid "Internal shipping notes" -msgstr "" - -#: company/models.py:440 -msgid "Shipping notes for internal use" -msgstr "" - -#: company/models.py:447 -msgid "Link to address information (external)" -msgstr "" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 -#: templates/js/translated/bom.js:622 -msgid "Base Part" -msgstr "" - -#: company/models.py:489 company/models.py:781 -msgid "Select part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 -#: stock/templates/stock/item_base.html:207 -#: templates/js/translated/company.js:507 -#: templates/js/translated/company.js:1118 -#: templates/js/translated/company.js:1296 -#: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:499 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 -#: templates/js/translated/company.js:1117 -#: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 -msgid "MPN" -msgstr "" - -#: company/models.py:513 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:522 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" - -#: company/models.py:594 -msgid "Parameter name" -msgstr "" - -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 -msgid "Value" -msgstr "" - -#: company/models.py:601 -msgid "Parameter value" -msgstr "" - -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 -msgid "Units" -msgstr "" - -#: company/models.py:609 -msgid "Parameter units" -msgstr "" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 -msgid "Pack units must be compatible with the base part units" -msgstr "" - -#: company/models.py:726 -msgid "Pack units must be greater than zero" -msgstr "" - -#: company/models.py:740 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 -#: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 -#: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:350 -#: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 -#: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 -msgid "Supplier" -msgstr "" - -#: company/models.py:790 -msgid "Select supplier" -msgstr "" - -#: company/models.py:796 part/serializers.py:549 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:802 -msgid "Is this supplier part active?" -msgstr "" - -#: company/models.py:812 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:819 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:828 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 -msgid "Note" -msgstr "" - -#: company/models.py:844 part/models.py:2117 -msgid "base cost" -msgstr "" - -#: company/models.py:845 part/models.py:2118 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:853 -msgid "Part packaging" -msgstr "" - -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:311 -#: templates/js/translated/purchase_order.js:841 -#: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:860 -msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" - -#: company/models.py:879 part/models.py:2124 -msgid "multiple" -msgstr "" - -#: company/models.py:880 -msgid "Order multiple" -msgstr "" - -#: company/models.py:892 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:898 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:899 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 -#: part/templates/part/part_base.html:197 -#: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 -msgid "In Stock" -msgstr "" - -#: company/templates/company/company_base.html:16 -#: part/templates/part/part_base.html:146 -#: templates/js/translated/company.js:1287 -#: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 -msgid "Inactive" -msgstr "" - -#: company/templates/company/company_base.html:27 -#: templates/js/translated/purchase_order.js:242 -msgid "Create Purchase Order" -msgstr "" - -#: company/templates/company/company_base.html:33 -msgid "Company actions" -msgstr "" - -#: company/templates/company/company_base.html:38 -msgid "Edit company information" -msgstr "" - -#: company/templates/company/company_base.html:39 -#: templates/js/translated/company.js:445 -msgid "Edit Company" -msgstr "" - -#: company/templates/company/company_base.html:43 -msgid "Delete company" -msgstr "" - -#: company/templates/company/company_base.html:44 -#: company/templates/company/company_base.html:168 -msgid "Delete Company" -msgstr "" - -#: company/templates/company/company_base.html:53 -#: company/templates/company/manufacturer_part.html:51 -#: company/templates/company/supplier_part.html:83 -#: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 -msgid "Part image" -msgstr "" - -#: company/templates/company/company_base.html:61 -#: part/templates/part/part_thumb.html:12 -msgid "Upload new image" -msgstr "" - -#: company/templates/company/company_base.html:64 -#: part/templates/part/part_thumb.html:14 -msgid "Download image from URL" -msgstr "" - -#: company/templates/company/company_base.html:66 -#: part/templates/part/part_thumb.html:16 -msgid "Delete image" -msgstr "" - -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 -#: stock/templates/stock/item_base.html:405 -#: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 -msgid "Customer" -msgstr "" - -#: company/templates/company/company_base.html:117 -msgid "Uses default currency" -msgstr "" - -#: company/templates/company/company_base.html:131 -msgid "Phone" -msgstr "" - -#: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 -msgid "Remove Image" -msgstr "" - -#: company/templates/company/company_base.html:212 -msgid "Remove associated image from this company" -msgstr "" - -#: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 -#: templates/InvenTree/settings/user.html:88 -#: templates/InvenTree/settings/user_sso.html:43 -msgid "Remove" -msgstr "" - -#: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 -msgid "Upload Image" -msgstr "" - -#: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 -msgid "Download Image" -msgstr "" - -#: company/templates/company/detail.html:15 -#: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 -msgid "Supplier Parts" -msgstr "" - -#: company/templates/company/detail.html:19 -msgid "Create new supplier part" -msgstr "" - -#: company/templates/company/detail.html:20 -#: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 -msgid "New Supplier Part" -msgstr "" - -#: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:151 -msgid "Manufacturer Parts" -msgstr "" - -#: company/templates/company/detail.html:45 -msgid "Create new manufacturer part" -msgstr "" - -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 -msgid "New Manufacturer Part" -msgstr "" - -#: company/templates/company/detail.html:65 -msgid "Supplier Stock" -msgstr "" - -#: company/templates/company/detail.html:75 -#: company/templates/company/sidebar.html:12 -#: company/templates/company/supplier_part_sidebar.html:7 -#: order/templates/order/order_base.html:13 -#: order/templates/order/purchase_orders.html:8 -#: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 -#: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 -#: templates/InvenTree/settings/sidebar.html:57 -#: templates/js/translated/search.js:205 templates/navbar.html:50 -#: users/models.py:208 -msgid "Purchase Orders" -msgstr "" - -#: company/templates/company/detail.html:79 -#: order/templates/order/purchase_orders.html:17 -msgid "Create new purchase order" -msgstr "" - -#: company/templates/company/detail.html:80 -#: order/templates/order/purchase_orders.html:18 -msgid "New Purchase Order" -msgstr "" - -#: company/templates/company/detail.html:101 -#: company/templates/company/sidebar.html:21 -#: order/templates/order/sales_order_base.html:13 -#: order/templates/order/sales_orders.html:8 -#: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 -#: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 -#: templates/InvenTree/settings/sidebar.html:59 -#: templates/js/translated/search.js:219 templates/navbar.html:62 -#: users/models.py:209 -msgid "Sales Orders" -msgstr "" - -#: company/templates/company/detail.html:105 -#: order/templates/order/sales_orders.html:20 -msgid "Create new sales order" -msgstr "" - -#: company/templates/company/detail.html:106 -#: order/templates/order/sales_orders.html:21 -msgid "New Sales Order" -msgstr "" - -#: company/templates/company/detail.html:126 -msgid "Assigned Stock" -msgstr "" - -#: company/templates/company/detail.html:142 -#: company/templates/company/sidebar.html:29 -#: order/templates/order/return_order_base.html:13 -#: order/templates/order/return_orders.html:8 -#: order/templates/order/return_orders.html:15 -#: templates/InvenTree/settings/sidebar.html:61 -#: templates/js/translated/search.js:232 templates/navbar.html:65 -#: users/models.py:210 -msgid "Return Orders" -msgstr "" - -#: company/templates/company/detail.html:146 -#: order/templates/order/return_orders.html:20 -msgid "Create new return order" -msgstr "" - -#: company/templates/company/detail.html:147 -#: order/templates/order/return_orders.html:21 -msgid "New Return Order" -msgstr "" - -#: company/templates/company/detail.html:168 -msgid "Company Notes" -msgstr "" - -#: company/templates/company/detail.html:183 -msgid "Company Contacts" -msgstr "" - -#: company/templates/company/detail.html:187 -#: company/templates/company/detail.html:188 -msgid "Add Contact" -msgstr "" - -#: company/templates/company/detail.html:206 -msgid "Company addresses" -msgstr "" - -#: company/templates/company/detail.html:210 -#: company/templates/company/detail.html:211 -msgid "Add Address" -msgstr "" - -#: company/templates/company/manufacturer_part.html:15 company/views.py:37 -#: templates/InvenTree/search.html:180 templates/navbar.html:49 -msgid "Manufacturers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 -msgid "Order part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:1343 -msgid "Edit manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:1344 -msgid "Delete manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 -msgid "Internal Part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:95 -msgid "No manufacturer information available" -msgstr "" - -#: company/templates/company/manufacturer_part.html:119 -#: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 -#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 -#: templates/navbar.html:48 -msgid "Suppliers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:156 -#: company/templates/company/manufacturer_part_sidebar.html:5 -#: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 -msgid "Parameters" -msgstr "" - -#: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 -#: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part_parameters.html:24 -msgid "New Parameter" -msgstr "" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 -msgid "Add Parameter" -msgstr "" - -#: company/templates/company/sidebar.html:6 -msgid "Manufactured Parts" -msgstr "" - -#: company/templates/company/sidebar.html:10 -msgid "Supplied Parts" -msgstr "" - -#: company/templates/company/sidebar.html:16 -msgid "Supplied Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:25 -msgid "Assigned Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:33 -msgid "Contacts" -msgstr "" - -#: company/templates/company/supplier_part.html:50 -#: templates/js/translated/company.js:1526 -msgid "Supplier part actions" -msgstr "" - -#: company/templates/company/supplier_part.html:55 -#: company/templates/company/supplier_part.html:56 -#: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 -msgid "Order Part" -msgstr "" - -#: company/templates/company/supplier_part.html:60 -#: company/templates/company/supplier_part.html:61 -msgid "Update Availability" -msgstr "" - -#: company/templates/company/supplier_part.html:63 -#: company/templates/company/supplier_part.html:64 -#: templates/js/translated/company.js:294 -msgid "Edit Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:68 -#: company/templates/company/supplier_part.html:69 -#: templates/js/translated/company.js:269 -msgid "Duplicate Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:73 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:74 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:133 -msgid "No supplier information available" -msgstr "" - -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 -#: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 -msgid "SKU" -msgstr "" - -#: company/templates/company/supplier_part.html:206 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 -msgid "Create new stock item" -msgstr "" - -#: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 -msgid "New Stock Item" -msgstr "" - -#: company/templates/company/supplier_part.html:223 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/supplier_part.html:246 -msgid "Pricing Information" -msgstr "" - -#: company/templates/company/supplier_part.html:251 -#: templates/js/translated/company.js:398 -#: templates/js/translated/pricing.js:684 -msgid "Add Price Break" -msgstr "" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 -msgid "Supplier Part QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:316 -msgid "Link Barcode to Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:388 -msgid "Update Part Availability" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 -#: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 -#: users/models.py:206 -msgid "Stock Items" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/views.py:32 -msgid "New Supplier" -msgstr "" - -#: company/views.py:38 -msgid "New Manufacturer" -msgstr "" - -#: company/views.py:43 templates/InvenTree/search.html:210 -#: templates/navbar.html:60 -msgid "Customers" -msgstr "" - -#: company/views.py:44 -msgid "New Customer" -msgstr "" - -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" - -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" - -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" - -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" - -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" - -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" - -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" - -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" - -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" - -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" - -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" - -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" - -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" - -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" - -#: machine/machine_types/label_printer.py:215 -msgid "Copies" -msgstr "" - -#: machine/machine_types/label_printer.py:216 -msgid "Number of copies to print for each label" -msgstr "" - -#: machine/machine_types/label_printer.py:231 -msgid "Connected" -msgstr "" - -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 -msgid "Unknown" -msgstr "" - -#: machine/machine_types/label_printer.py:233 -msgid "Printing" -msgstr "" - -#: machine/machine_types/label_printer.py:234 -msgid "No media" -msgstr "" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 -msgid "Disconnected" -msgstr "" - -#: machine/machine_types/label_printer.py:243 -msgid "Label Printer" -msgstr "" - -#: machine/machine_types/label_printer.py:244 -msgid "Directly print labels for various items." -msgstr "" - -#: machine/machine_types/label_printer.py:250 -msgid "Printer Location" -msgstr "" - -#: machine/machine_types/label_printer.py:251 -msgid "Scope the printer to a specific location" -msgstr "" - -#: machine/models.py:25 -msgid "Name of machine" -msgstr "" - -#: machine/models.py:29 -msgid "Machine Type" -msgstr "" - -#: machine/models.py:29 -msgid "Type of machine" -msgstr "" - -#: machine/models.py:34 machine/models.py:146 -msgid "Driver" -msgstr "" - -#: machine/models.py:35 -msgid "Driver used for the machine" -msgstr "" - -#: machine/models.py:39 -msgid "Machines can be disabled" -msgstr "" - -#: machine/models.py:95 -msgid "Driver available" -msgstr "" - -#: machine/models.py:100 -msgid "No errors" -msgstr "" - -#: machine/models.py:105 -msgid "Initialized" -msgstr "" - -#: machine/models.py:117 -msgid "Machine status" -msgstr "" - -#: machine/models.py:145 -msgid "Machine" -msgstr "" - -#: machine/models.py:151 -msgid "Machine Config" -msgstr "" - -#: machine/models.py:156 -msgid "Config type" -msgstr "" - -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" -msgstr "" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 -msgid "Has Pricing" -msgstr "" - -#: order/api.py:230 -msgid "No matching purchase order found" -msgstr "" - -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 -msgid "Order" -msgstr "" - -#: order/api.py:429 order/api.py:784 -msgid "Order Complete" -msgstr "" - -#: order/api.py:452 -msgid "Order Pending" -msgstr "" - -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 -#: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 -#: templates/js/translated/purchase_order.js:168 -#: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 -msgid "Purchase Order" -msgstr "" - -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 -#: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 -msgid "Return Order" -msgstr "" - -#: order/models.py:90 -msgid "Total price for this order" -msgstr "" - -#: order/models.py:95 order/serializers.py:71 -msgid "Order Currency" -msgstr "" - -#: order/models.py:98 order/serializers.py:72 -msgid "Currency for this order (leave blank to use company default)" -msgstr "" - -#: order/models.py:246 -msgid "Contact does not match selected company" -msgstr "" - -#: order/models.py:289 -msgid "Order description (optional)" -msgstr "" - -#: order/models.py:298 -msgid "Select project code for this order" -msgstr "" - -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -msgid "Link to external page" -msgstr "" - -#: order/models.py:310 -msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" - -#: order/models.py:324 -msgid "Created By" -msgstr "" - -#: order/models.py:332 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:343 -msgid "Point of contact for this order" -msgstr "" - -#: order/models.py:353 -msgid "Company address for this order" -msgstr "" - -#: order/models.py:468 order/models.py:979 -msgid "Order reference" -msgstr "" - -#: order/models.py:477 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:492 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:504 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:513 -msgid "received by" -msgstr "" - -#: order/models.py:519 order/models.py:2173 -msgid "Issue Date" -msgstr "" - -#: order/models.py:520 order/models.py:2174 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:527 order/models.py:2181 -msgid "Date order was completed" -msgstr "" - -#: order/models.py:571 -msgid "Part supplier must match PO supplier" -msgstr "" - -#: order/models.py:806 -msgid "Quantity must be a positive number" -msgstr "" - -#: order/models.py:991 -msgid "Company to which the items are being sold" -msgstr "" - -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 -msgid "Customer Reference " -msgstr "" - -#: order/models.py:1015 order/models.py:2167 -msgid "Customer order reference code" -msgstr "" - -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 -msgid "Shipment Date" -msgstr "" - -#: order/models.py:1028 -msgid "shipped by" -msgstr "" - -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" - -#: order/models.py:1084 -msgid "Only an open order can be marked as complete" -msgstr "" - -#: order/models.py:1088 -msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" - -#: order/models.py:1093 -msgid "Order cannot be completed as there are incomplete line items" -msgstr "" - -#: order/models.py:1357 -msgid "Item quantity" -msgstr "" - -#: order/models.py:1374 -msgid "Line item reference" -msgstr "" - -#: order/models.py:1381 -msgid "Line item notes" -msgstr "" - -#: order/models.py:1393 -msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" - -#: order/models.py:1414 -msgid "Line item description (optional)" -msgstr "" - -#: order/models.py:1420 -msgid "Context" -msgstr "" - -#: order/models.py:1421 -msgid "Additional context for this line" -msgstr "" - -#: order/models.py:1431 -msgid "Unit price" -msgstr "" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 -msgid "Supplier part must match supplier" -msgstr "" - -#: order/models.py:1476 -msgid "deleted" -msgstr "" - -#: order/models.py:1504 -msgid "Supplier part" -msgstr "" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 -msgid "Received" -msgstr "" - -#: order/models.py:1512 -msgid "Number of items received" -msgstr "" - -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 -#: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 -msgid "Purchase Price" -msgstr "" - -#: order/models.py:1521 -msgid "Unit purchase price" -msgstr "" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 -msgid "Virtual part cannot be assigned to a sales order" -msgstr "" - -#: order/models.py:1642 -msgid "Only salable parts can be assigned to a sales order" -msgstr "" - -#: order/models.py:1668 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 -msgid "Sale Price" -msgstr "" - -#: order/models.py:1669 -msgid "Unit sale price" -msgstr "" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 -msgid "Shipped quantity" -msgstr "" - -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 -msgid "Date of shipment" -msgstr "" - -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 -msgid "Delivery Date" -msgstr "" - -#: order/models.py:1779 -msgid "Date of delivery of shipment" -msgstr "" - -#: order/models.py:1787 -msgid "Checked By" -msgstr "" - -#: order/models.py:1788 -msgid "User who checked this shipment" -msgstr "" - -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 -msgid "Shipment" -msgstr "" - -#: order/models.py:1796 -msgid "Shipment number" -msgstr "" - -#: order/models.py:1804 -msgid "Tracking Number" -msgstr "" - -#: order/models.py:1805 -msgid "Shipment tracking information" -msgstr "" - -#: order/models.py:1812 -msgid "Invoice Number" -msgstr "" - -#: order/models.py:1813 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1833 -msgid "Shipment has already been sent" -msgstr "" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 -msgid "Stock item has not been assigned" -msgstr "" - -#: order/models.py:1973 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:1976 -msgid "Cannot allocate stock to a line without a part" -msgstr "" - -#: order/models.py:1979 -msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" - -#: order/models.py:1998 order/serializers.py:1345 -msgid "Quantity must be 1 for serialized stock item" -msgstr "" - -#: order/models.py:2001 -msgid "Sales order does not match shipment" -msgstr "" - -#: order/models.py:2002 plugin/base/barcodes/api.py:524 -msgid "Shipment does not match sales order" -msgstr "" - -#: order/models.py:2010 -msgid "Line" -msgstr "" - -#: order/models.py:2019 -msgid "Sales order shipment reference" -msgstr "" - -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 -msgid "Item" -msgstr "" - -#: order/models.py:2033 -msgid "Select stock item to allocate" -msgstr "" - -#: order/models.py:2042 -msgid "Enter stock allocation quantity" -msgstr "" - -#: order/models.py:2136 -msgid "Return Order reference" -msgstr "" - -#: order/models.py:2148 -msgid "Company from which items are being returned" -msgstr "" - -#: order/models.py:2160 -msgid "Return order status" -msgstr "" - -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 -msgid "Only serialized items can be assigned to a Return Order" -msgstr "" - -#: order/models.py:2392 -msgid "Select item to return from customer" -msgstr "" - -#: order/models.py:2398 -msgid "Received Date" -msgstr "" - -#: order/models.py:2399 -msgid "The date this this return item was received" -msgstr "" - -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 -msgid "Outcome" -msgstr "" - -#: order/models.py:2411 -msgid "Outcome for this line item" -msgstr "" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "" - -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 -msgid "Order cannot be cancelled" -msgstr "" - -#: order/serializers.py:346 order/serializers.py:1366 -msgid "Allow order to be closed with incomplete line items" -msgstr "" - -#: order/serializers.py:356 order/serializers.py:1376 -msgid "Order has incomplete line items" -msgstr "" - -#: order/serializers.py:506 -msgid "Order is not open" -msgstr "" - -#: order/serializers.py:527 -msgid "Auto Pricing" -msgstr "" - -#: order/serializers.py:529 -msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" - -#: order/serializers.py:539 -msgid "Purchase price currency" -msgstr "" - -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 -msgid "Supplier part must be specified" -msgstr "" - -#: order/serializers.py:587 -msgid "Purchase order must be specified" -msgstr "" - -#: order/serializers.py:595 -msgid "Supplier must match purchase order" -msgstr "" - -#: order/serializers.py:596 -msgid "Purchase order must match supplier" -msgstr "" - -#: order/serializers.py:639 order/serializers.py:1446 -msgid "Line Item" -msgstr "" - -#: order/serializers.py:645 -msgid "Line item does not match purchase order" -msgstr "" - -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 -msgid "Select destination location for received items" -msgstr "" - -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 -msgid "Enter batch code for incoming stock items" -msgstr "" - -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 -msgid "Barcode" -msgstr "" - -#: order/serializers.py:707 -msgid "Scanned barcode" -msgstr "" - -#: order/serializers.py:723 -msgid "Barcode is already in use" -msgstr "" - -#: order/serializers.py:747 -msgid "An integer quantity must be provided for trackable parts" -msgstr "" - -#: order/serializers.py:795 order/serializers.py:1798 -msgid "Line items must be provided" -msgstr "" - -#: order/serializers.py:811 -msgid "Destination location must be specified" -msgstr "" - -#: order/serializers.py:822 -msgid "Supplied barcode values must be unique" -msgstr "" - -#: order/serializers.py:1187 -msgid "Sale price currency" -msgstr "" - -#: order/serializers.py:1248 -msgid "No shipment details provided" -msgstr "" - -#: order/serializers.py:1309 order/serializers.py:1455 -msgid "Line item is not associated with this order" -msgstr "" - -#: order/serializers.py:1328 -msgid "Quantity must be positive" -msgstr "" - -#: order/serializers.py:1465 -msgid "Enter serial numbers to allocate" -msgstr "" - -#: order/serializers.py:1487 order/serializers.py:1593 -msgid "Shipment has already been shipped" -msgstr "" - -#: order/serializers.py:1490 order/serializers.py:1596 -msgid "Shipment is not associated with this order" -msgstr "" - -#: order/serializers.py:1537 -msgid "No match found for the following serial numbers" -msgstr "" - -#: order/serializers.py:1544 -msgid "The following serial numbers are already allocated" -msgstr "" - -#: order/serializers.py:1752 -msgid "Return order line item" -msgstr "" - -#: order/serializers.py:1758 -msgid "Line item does not match return order" -msgstr "" - -#: order/serializers.py:1761 -msgid "Line item has already been received" -msgstr "" - -#: order/serializers.py:1790 -msgid "Items can only be received against orders which are in progress" -msgstr "" - -#: order/serializers.py:1873 -msgid "Line price currency" -msgstr "" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - -#: order/tasks.py:25 -msgid "Overdue Purchase Order" -msgstr "" - -#: order/tasks.py:30 -#, python-brace-format -msgid "Purchase order {po} is now overdue" -msgstr "" - -#: order/tasks.py:75 -msgid "Overdue Sales Order" -msgstr "" - -#: order/tasks.py:80 -#, python-brace-format -msgid "Sales order {so} is now overdue" -msgstr "" - -#: order/templates/order/order_base.html:51 -msgid "Print purchase order report" -msgstr "" - -#: order/templates/order/order_base.html:53 -#: order/templates/order/return_order_base.html:62 -#: order/templates/order/sales_order_base.html:62 -msgid "Export order to file" -msgstr "" - -#: order/templates/order/order_base.html:59 -#: order/templates/order/return_order_base.html:72 -#: order/templates/order/sales_order_base.html:71 -msgid "Order actions" -msgstr "" - -#: order/templates/order/order_base.html:64 -#: order/templates/order/return_order_base.html:76 -#: order/templates/order/sales_order_base.html:75 -msgid "Edit order" -msgstr "" - -#: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 -#: order/templates/order/return_order_base.html:78 -#: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" -msgstr "" - -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 -msgid "Issue Order" -msgstr "" - -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 -msgid "Mark order as complete" -msgstr "" - -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 -msgid "Complete Order" -msgstr "" - -#: order/templates/order/order_base.html:96 -msgid "Supplier part thumbnail" -msgstr "" - -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 -msgid "Order Description" -msgstr "" - -#: order/templates/order/order_base.html:146 -msgid "No suppplier information available" -msgstr "" - -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 -msgid "Completed Line Items" -msgstr "" - -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 -msgid "Incomplete" -msgstr "" - -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 -msgid "Issued" -msgstr "" - -#: order/templates/order/order_base.html:229 -msgid "Total cost" -msgstr "" - -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 -msgid "Total cost could not be calculated" -msgstr "" - -#: order/templates/order/order_base.html:335 -msgid "Purchase Order QR Code" -msgstr "" - -#: order/templates/order/order_base.html:347 -msgid "Link Barcode to Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:9 -#: part/templates/part/import_wizard/ajax_match_fields.html:9 -#: part/templates/part/import_wizard/match_fields.html:9 -#: templates/patterns/wizard/match_fields.html:8 -msgid "Missing selections for the following required columns" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:20 -#: part/templates/part/import_wizard/ajax_match_fields.html:20 -#: part/templates/part/import_wizard/match_fields.html:20 -#: templates/patterns/wizard/match_fields.html:19 -msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:29 -#: order/templates/order/order_wizard/match_parts.html:21 -#: part/templates/part/import_wizard/match_fields.html:29 -#: part/templates/part/import_wizard/match_references.html:21 -#: templates/patterns/wizard/match_fields.html:28 -msgid "Submit Selections" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:35 -#: part/templates/part/import_wizard/ajax_match_fields.html:28 -#: part/templates/part/import_wizard/match_fields.html:35 -#: templates/patterns/wizard/match_fields.html:34 -msgid "File Fields" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:42 -#: part/templates/part/import_wizard/ajax_match_fields.html:35 -#: part/templates/part/import_wizard/match_fields.html:42 -#: templates/patterns/wizard/match_fields.html:41 -msgid "Remove column" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:60 -#: part/templates/part/import_wizard/ajax_match_fields.html:53 -#: part/templates/part/import_wizard/match_fields.html:60 -#: templates/patterns/wizard/match_fields.html:59 -msgid "Duplicate selection" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:71 -#: order/templates/order/order_wizard/match_parts.html:52 -#: part/templates/part/import_wizard/ajax_match_fields.html:64 -#: part/templates/part/import_wizard/ajax_match_references.html:42 -#: part/templates/part/import_wizard/match_fields.html:71 -#: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 -#: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 -#: templates/patterns/wizard/match_fields.html:70 -msgid "Remove row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:12 -#: part/templates/part/import_wizard/ajax_match_references.html:12 -#: part/templates/part/import_wizard/match_references.html:12 -msgid "Errors exist in the submitted data" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:28 -#: part/templates/part/import_wizard/ajax_match_references.html:21 -#: part/templates/part/import_wizard/match_references.html:28 -msgid "Row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:29 -msgid "Select Supplier Part" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:8 -msgid "Return to Orders" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:13 -msgid "Upload File for Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:14 -msgid "Order is already processed. Files cannot be uploaded." -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:27 -#: part/templates/part/import_wizard/ajax_part_upload.html:10 -#: part/templates/part/import_wizard/part_upload.html:26 -#: templates/patterns/wizard/upload.html:13 -#, python-format -msgid "Step %(step)s of %(count)s" -msgstr "" - -#: order/templates/order/po_sidebar.html:7 -msgid "Received Stock" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:18 -msgid "Purchase Order Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:27 -#: order/templates/order/return_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 -#: templates/js/translated/sales_order.js:237 -msgid "Add Line Item" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:31 -#: order/templates/order/purchase_order_detail.html:32 -#: order/templates/order/return_order_detail.html:28 -#: order/templates/order/return_order_detail.html:29 -msgid "Receive Line Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/return_order_detail.html:45 -#: order/templates/order/sales_order_detail.html:41 -msgid "Extra Lines" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/return_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:47 -msgid "Add Extra Line" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:74 -msgid "Received Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:99 -#: order/templates/order/return_order_detail.html:85 -#: order/templates/order/sales_order_detail.html:139 -msgid "Order Notes" -msgstr "" - -#: order/templates/order/return_order_base.html:18 -#: order/templates/order/sales_order_base.html:18 -msgid "Customer logo thumbnail" -msgstr "" - -#: order/templates/order/return_order_base.html:60 -msgid "Print return order report" -msgstr "" - -#: order/templates/order/return_order_base.html:64 -#: order/templates/order/sales_order_base.html:64 -msgid "Print packing list" -msgstr "" - -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 -msgid "Customer Reference" -msgstr "" - -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 -msgid "Total Cost" -msgstr "" - -#: order/templates/order/return_order_base.html:273 -msgid "Return Order QR Code" -msgstr "" - -#: order/templates/order/return_order_base.html:285 -msgid "Link Barcode to Return Order" -msgstr "" - -#: order/templates/order/return_order_sidebar.html:5 -msgid "Order Details" -msgstr "" - -#: order/templates/order/sales_order_base.html:60 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 -msgid "Ship Items" -msgstr "" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:138 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:176 -#: order/templates/order/sales_order_detail.html:99 -#: order/templates/order/so_sidebar.html:11 -msgid "Completed Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:339 -msgid "Sales Order QR Code" -msgstr "" - -#: order/templates/order/sales_order_base.html:351 -msgid "Link Barcode to Sales Order" -msgstr "" - -#: order/templates/order/sales_order_detail.html:18 -msgid "Sales Order Items" -msgstr "" - -#: order/templates/order/sales_order_detail.html:67 -#: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 -msgid "Pending Shipments" -msgstr "" - -#: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 -msgid "Actions" -msgstr "" - -#: order/templates/order/sales_order_detail.html:80 -msgid "New Shipment" -msgstr "" - -#: order/views.py:120 -msgid "Match Supplier Parts" -msgstr "" - -#: order/views.py:406 -msgid "Sales order not found" -msgstr "" - -#: order/views.py:412 -msgid "Price not found" -msgstr "" - -#: order/views.py:415 -#, python-brace-format -msgid "Updated {part} unit-price to {price}" -msgstr "" - -#: order/views.py:421 -#, python-brace-format -msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "" - -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 -msgid "IPN" -msgstr "" - -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 -msgid "Revision" -msgstr "" - -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 -msgid "Keywords" -msgstr "" - -#: part/admin.py:60 -msgid "Part Image" -msgstr "" - -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 -msgid "Category ID" -msgstr "" - -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 -msgid "Category Name" -msgstr "" - -#: part/admin.py:71 part/admin.py:316 -msgid "Default Location ID" -msgstr "" - -#: part/admin.py:76 -msgid "Default Supplier ID" -msgstr "" - -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 -msgid "Variant Of" -msgstr "" - -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 -msgid "Minimum Stock" -msgstr "" - -#: part/admin.py:138 part/templates/part/part_sidebar.html:27 -msgid "Used In" -msgstr "" - -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 -msgid "Building" -msgstr "" - -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 -msgid "Minimum Cost" -msgstr "" - -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 -msgid "Maximum Cost" -msgstr "" - -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 -msgid "Parent ID" -msgstr "" - -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 -msgid "Parent Name" -msgstr "" - -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 -msgid "Category Path" -msgstr "" - -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 -#: part/templates/part/category_sidebar.html:9 -#: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 -#: templates/navbar.html:24 users/models.py:203 -msgid "Parts" -msgstr "" - -#: part/admin.py:378 -msgid "BOM Level" -msgstr "" - -#: part/admin.py:381 -msgid "BOM Item ID" -msgstr "" - -#: part/admin.py:391 -msgid "Parent IPN" -msgstr "" - -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" - -#: part/admin.py:418 part/serializers.py:1346 -#: templates/js/translated/pricing.js:358 -#: templates/js/translated/pricing.js:1024 -msgid "Minimum Price" -msgstr "" - -#: part/admin.py:423 part/serializers.py:1361 -#: templates/js/translated/pricing.js:353 -#: templates/js/translated/pricing.js:1032 -msgid "Maximum Price" -msgstr "" - -#: part/api.py:104 -msgid "Starred" -msgstr "" - -#: part/api.py:106 -msgid "Filter by starred categories" -msgstr "" - -#: part/api.py:123 stock/api.py:310 -msgid "Depth" -msgstr "" - -#: part/api.py:123 -msgid "Filter by category depth" -msgstr "" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:158 -msgid "Include sub-categories in filtered results" -msgstr "" - -#: part/api.py:179 templates/js/translated/part.js:311 -msgid "Parent" -msgstr "" - -#: part/api.py:181 -msgid "Filter by parent category" -msgstr "" - -#: part/api.py:214 -msgid "Exclude Tree" -msgstr "" - -#: part/api.py:216 -msgid "Exclude sub-categories under the specified category" -msgstr "" - -#: part/api.py:441 -msgid "Has Results" -msgstr "" - -#: part/api.py:608 -msgid "Incoming Purchase Order" -msgstr "" - -#: part/api.py:626 -msgid "Outgoing Sales Order" -msgstr "" - -#: part/api.py:642 -msgid "Stock produced by Build Order" -msgstr "" - -#: part/api.py:726 -msgid "Stock required for Build Order" -msgstr "" - -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 -#: templates/InvenTree/settings/settings_staff_js.html:300 -#: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 -msgid "Category" -msgstr "" - -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 -msgid "Uses" -msgstr "" - -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 -msgid "Default Location" -msgstr "" - -#: part/bom.py:179 part/serializers.py:905 -#: templates/email/low_stock_notification.html:16 -msgid "Total Stock" -msgstr "" - -#: part/forms.py:49 -msgid "Input quantity for price calculation" -msgstr "" - -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 -#: part/templates/part/part_app_base.html:10 -msgid "Part Category" -msgstr "" - -#: part/models.py:89 part/templates/part/category.html:133 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 -#: users/models.py:202 -msgid "Part Categories" -msgstr "" - -#: part/models.py:108 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 -msgid "Structural" -msgstr "" - -#: part/models.py:115 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:124 -msgid "Default keywords" -msgstr "" - -#: part/models.py:125 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 -msgid "Icon" -msgstr "" - -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:178 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 -msgid "Invalid choice for parent part" -msgstr "" - -#: part/models.py:613 part/models.py:620 -#, python-brace-format -msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" - -#: part/models.py:632 -#, python-brace-format -msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" - -#: part/models.py:695 -#, python-brace-format -msgid "IPN must match regex pattern {pattern}" -msgstr "" - -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 -msgid "Stock item with this serial number already exists" -msgstr "" - -#: part/models.py:917 -msgid "Duplicate IPN not allowed in part settings" -msgstr "" - -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 -msgid "Part with this Name, IPN and Revision already exists." -msgstr "" - -#: part/models.py:951 -msgid "Parts cannot be assigned to structural part categories!" -msgstr "" - -#: part/models.py:983 part/models.py:4102 -msgid "Part name" -msgstr "" - -#: part/models.py:988 -msgid "Is Template" -msgstr "" - -#: part/models.py:989 -msgid "Is this part a template part?" -msgstr "" - -#: part/models.py:999 -msgid "Is this part a variant of another part?" -msgstr "" - -#: part/models.py:1007 -msgid "Part description (optional)" -msgstr "" - -#: part/models.py:1015 -msgid "Part keywords to improve visibility in search results" -msgstr "" - -#: part/models.py:1025 -msgid "Part category" -msgstr "" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 -msgid "Where is this item normally stored?" -msgstr "" - -#: part/models.py:1121 part/templates/part/part_base.html:385 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1122 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1129 -msgid "Default Expiry" -msgstr "" - -#: part/models.py:1130 -msgid "Expiry time (in days) for stock items of this part" -msgstr "" - -#: part/models.py:1139 -msgid "Minimum allowed stock level" -msgstr "" - -#: part/models.py:1148 -msgid "Units of measure for this part" -msgstr "" - -#: part/models.py:1155 -msgid "Can this part be built from other parts?" -msgstr "" - -#: part/models.py:1161 -msgid "Can this part be used to build other parts?" -msgstr "" - -#: part/models.py:1167 -msgid "Does this part have tracking for unique items?" -msgstr "" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 -msgid "Can this part be purchased from external suppliers?" -msgstr "" - -#: part/models.py:1185 -msgid "Can this part be sold to customers?" -msgstr "" - -#: part/models.py:1189 -msgid "Is this part active?" -msgstr "" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 -msgid "Is this a virtual part, such as a software product or license?" -msgstr "" - -#: part/models.py:1207 -msgid "BOM checksum" -msgstr "" - -#: part/models.py:1208 -msgid "Stored BOM checksum" -msgstr "" - -#: part/models.py:1216 -msgid "BOM checked by" -msgstr "" - -#: part/models.py:1221 -msgid "BOM checked date" -msgstr "" - -#: part/models.py:1237 -msgid "Creation User" -msgstr "" - -#: part/models.py:1247 -msgid "Owner responsible for this part" -msgstr "" - -#: part/models.py:1252 part/templates/part/part_base.html:348 -#: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 -msgid "Last Stocktake" -msgstr "" - -#: part/models.py:2125 -msgid "Sell multiple" -msgstr "" - -#: part/models.py:3116 -msgid "Currency used to cache pricing calculations" -msgstr "" - -#: part/models.py:3132 -msgid "Minimum BOM Cost" -msgstr "" - -#: part/models.py:3133 -msgid "Minimum cost of component parts" -msgstr "" - -#: part/models.py:3139 -msgid "Maximum BOM Cost" -msgstr "" - -#: part/models.py:3140 -msgid "Maximum cost of component parts" -msgstr "" - -#: part/models.py:3146 -msgid "Minimum Purchase Cost" -msgstr "" - -#: part/models.py:3147 -msgid "Minimum historical purchase cost" -msgstr "" - -#: part/models.py:3153 -msgid "Maximum Purchase Cost" -msgstr "" - -#: part/models.py:3154 -msgid "Maximum historical purchase cost" -msgstr "" - -#: part/models.py:3160 -msgid "Minimum Internal Price" -msgstr "" - -#: part/models.py:3161 -msgid "Minimum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3167 -msgid "Maximum Internal Price" -msgstr "" - -#: part/models.py:3168 -msgid "Maximum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3174 -msgid "Minimum Supplier Price" -msgstr "" - -#: part/models.py:3175 -msgid "Minimum price of part from external suppliers" -msgstr "" - -#: part/models.py:3181 -msgid "Maximum Supplier Price" -msgstr "" - -#: part/models.py:3182 -msgid "Maximum price of part from external suppliers" -msgstr "" - -#: part/models.py:3188 -msgid "Minimum Variant Cost" -msgstr "" - -#: part/models.py:3189 -msgid "Calculated minimum cost of variant parts" -msgstr "" - -#: part/models.py:3195 -msgid "Maximum Variant Cost" -msgstr "" - -#: part/models.py:3196 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:3203 -msgid "Override minimum cost" -msgstr "" - -#: part/models.py:3210 -msgid "Override maximum cost" -msgstr "" - -#: part/models.py:3217 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:3224 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:3230 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:3231 -msgid "Minimum sale price based on price breaks" -msgstr "" - -#: part/models.py:3237 -msgid "Maximum Sale Price" -msgstr "" - -#: part/models.py:3238 -msgid "Maximum sale price based on price breaks" -msgstr "" - -#: part/models.py:3244 -msgid "Minimum Sale Cost" -msgstr "" - -#: part/models.py:3245 -msgid "Minimum historical sale price" -msgstr "" - -#: part/models.py:3251 -msgid "Maximum Sale Cost" -msgstr "" - -#: part/models.py:3252 -msgid "Maximum historical sale price" -msgstr "" - -#: part/models.py:3271 -msgid "Part for stocktake" -msgstr "" - -#: part/models.py:3276 -msgid "Item Count" -msgstr "" - -#: part/models.py:3277 -msgid "Number of individual stock entries at time of stocktake" -msgstr "" - -#: part/models.py:3285 -msgid "Total available stock at time of stocktake" -msgstr "" - -#: part/models.py:3289 part/models.py:3372 -#: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 -#: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 -#: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 -msgid "Date" -msgstr "" - -#: part/models.py:3290 -msgid "Date stocktake was performed" -msgstr "" - -#: part/models.py:3298 -msgid "Additional notes" -msgstr "" - -#: part/models.py:3308 -msgid "User who performed this stocktake" -msgstr "" - -#: part/models.py:3314 -msgid "Minimum Stock Cost" -msgstr "" - -#: part/models.py:3315 -msgid "Estimated minimum cost of stock on hand" -msgstr "" - -#: part/models.py:3321 -msgid "Maximum Stock Cost" -msgstr "" - -#: part/models.py:3322 -msgid "Estimated maximum cost of stock on hand" -msgstr "" - -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 -msgid "Report" -msgstr "" - -#: part/models.py:3379 -msgid "Stocktake report file (generated internally)" -msgstr "" - -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 -msgid "Part Count" -msgstr "" - -#: part/models.py:3385 -msgid "Number of parts covered by stocktake" -msgstr "" - -#: part/models.py:3395 -msgid "User who requested this stocktake report" -msgstr "" - -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 -msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3586 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3603 templates/js/translated/part.js:2898 -msgid "Test Name" -msgstr "" - -#: part/models.py:3604 -msgid "Enter a name for the test" -msgstr "" - -#: part/models.py:3610 -msgid "Test Key" -msgstr "" - -#: part/models.py:3611 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3618 -msgid "Test Description" -msgstr "" - -#: part/models.py:3619 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 -msgid "Required" -msgstr "" - -#: part/models.py:3629 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3634 templates/js/translated/part.js:2935 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3635 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3640 templates/js/translated/part.js:2942 -msgid "Requires Attachment" -msgstr "" - -#: part/models.py:3642 -msgid "Does this test require a file attachment when adding a test result?" -msgstr "" - -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3713 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3750 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3765 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3772 -msgid "Physical units for this parameter" -msgstr "" - -#: part/models.py:3780 -msgid "Parameter description" -msgstr "" - -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 -msgid "Checkbox" -msgstr "" - -#: part/models.py:3787 -msgid "Is this parameter a checkbox?" -msgstr "" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 -msgid "Invalid choice for parameter value" -msgstr "" - -#: part/models.py:3938 -msgid "Parent Part" -msgstr "" - -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 -#: templates/InvenTree/settings/settings_staff_js.html:295 -msgid "Parameter Template" -msgstr "" - -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "" - -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 -msgid "Default Value" -msgstr "" - -#: part/models.py:4062 -msgid "Default Parameter Value" -msgstr "" - -#: part/models.py:4100 -msgid "Part ID or part name" -msgstr "" - -#: part/models.py:4101 -msgid "Unique part ID value" -msgstr "" - -#: part/models.py:4103 -msgid "Part IPN value" -msgstr "" - -#: part/models.py:4104 -msgid "Level" -msgstr "" - -#: part/models.py:4104 -msgid "BOM level" -msgstr "" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 -msgid "Select parent part" -msgstr "" - -#: part/models.py:4242 -msgid "Sub part" -msgstr "" - -#: part/models.py:4243 -msgid "Select part to be used in BOM" -msgstr "" - -#: part/models.py:4254 -msgid "BOM quantity for this BOM item" -msgstr "" - -#: part/models.py:4260 -msgid "This BOM item is optional" -msgstr "" - -#: part/models.py:4266 -msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" - -#: part/models.py:4273 part/templates/part/upload_bom.html:55 -msgid "Overage" -msgstr "" - -#: part/models.py:4274 -msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "" - -#: part/models.py:4281 -msgid "BOM item reference" -msgstr "" - -#: part/models.py:4289 -msgid "BOM item notes" -msgstr "" - -#: part/models.py:4295 -msgid "Checksum" -msgstr "" - -#: part/models.py:4296 -msgid "BOM line checksum" -msgstr "" - -#: part/models.py:4301 templates/js/translated/table_filters.js:181 -msgid "Validated" -msgstr "" - -#: part/models.py:4302 -msgid "This BOM item has been validated" -msgstr "" - -#: part/models.py:4307 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 -msgid "Gets inherited" -msgstr "" - -#: part/models.py:4308 -msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" - -#: part/models.py:4314 -msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" - -#: part/models.py:4399 stock/models.py:685 -msgid "Quantity must be integer value for trackable parts" -msgstr "" - -#: part/models.py:4409 part/models.py:4411 -msgid "Sub part must be specified" -msgstr "" - -#: part/models.py:4551 -msgid "BOM Item Substitute" -msgstr "" - -#: part/models.py:4572 -msgid "Substitute part cannot be the same as the master part" -msgstr "" - -#: part/models.py:4585 -msgid "Parent BOM item" -msgstr "" - -#: part/models.py:4593 -msgid "Substitute part" -msgstr "" - -#: part/models.py:4609 -msgid "Part 1" -msgstr "" - -#: part/models.py:4617 -msgid "Part 2" -msgstr "" - -#: part/models.py:4618 -msgid "Select Related Part" -msgstr "" - -#: part/models.py:4637 -msgid "Part relationship cannot be created between a part and itself" -msgstr "" - -#: part/models.py:4642 -msgid "Duplicate relationship already exists" -msgstr "" - -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 -#: part/templates/part/category_sidebar.html:7 -msgid "Subcategories" -msgstr "" - -#: part/serializers.py:197 -msgid "Results" -msgstr "" - -#: part/serializers.py:198 -msgid "Number of results recorded against this template" -msgstr "" - -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 -msgid "Purchase currency of this stock item" -msgstr "" - -#: part/serializers.py:291 -msgid "Number of parts using this template" -msgstr "" - -#: part/serializers.py:421 -msgid "No parts selected" -msgstr "" - -#: part/serializers.py:431 -msgid "Select category" -msgstr "" - -#: part/serializers.py:466 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:467 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:472 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:473 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:479 part/templates/part/detail.html:293 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:480 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:486 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:487 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:493 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:494 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:512 -msgid "Initial Stock Quantity" -msgstr "" - -#: part/serializers.py:514 -msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" - -#: part/serializers.py:521 -msgid "Initial Stock Location" -msgstr "" - -#: part/serializers.py:522 -msgid "Specify initial stock location for this Part" -msgstr "" - -#: part/serializers.py:539 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:555 -msgid "Select manufacturer (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:565 -msgid "Manufacturer part number" -msgstr "" - -#: part/serializers.py:572 -msgid "Selected company is not a valid supplier" -msgstr "" - -#: part/serializers.py:581 -msgid "Selected company is not a valid manufacturer" -msgstr "" - -#: part/serializers.py:592 -msgid "Manufacturer part matching this MPN already exists" -msgstr "" - -#: part/serializers.py:599 -msgid "Supplier part matching this SKU already exists" -msgstr "" - -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" - -#: part/serializers.py:908 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:911 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:942 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:948 templates/js/translated/part.js:103 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:949 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:955 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:956 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:964 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:965 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:970 -msgid "Existing Image" -msgstr "" - -#: part/serializers.py:971 -msgid "Filename of an existing part image" -msgstr "" - -#: part/serializers.py:988 -msgid "Image file does not exist" -msgstr "" - -#: part/serializers.py:1194 -msgid "Limit stocktake report to a particular part, and any variant parts" -msgstr "" - -#: part/serializers.py:1204 -msgid "Limit stocktake report to a particular part category, and any child categories" -msgstr "" - -#: part/serializers.py:1214 -msgid "Limit stocktake report to a particular stock location, and any child locations" -msgstr "" - -#: part/serializers.py:1220 -msgid "Exclude External Stock" -msgstr "" - -#: part/serializers.py:1221 -msgid "Exclude stock items in external locations" -msgstr "" - -#: part/serializers.py:1226 -msgid "Generate Report" -msgstr "" - -#: part/serializers.py:1227 -msgid "Generate report file containing calculated stocktake data" -msgstr "" - -#: part/serializers.py:1232 -msgid "Update Parts" -msgstr "" - -#: part/serializers.py:1233 -msgid "Update specified parts with calculated stocktake data" -msgstr "" - -#: part/serializers.py:1241 -msgid "Stocktake functionality is not enabled" -msgstr "" - -#: part/serializers.py:1347 -msgid "Override calculated value for minimum price" -msgstr "" - -#: part/serializers.py:1354 -msgid "Minimum price currency" -msgstr "" - -#: part/serializers.py:1362 -msgid "Override calculated value for maximum price" -msgstr "" - -#: part/serializers.py:1369 -msgid "Maximum price currency" -msgstr "" - -#: part/serializers.py:1398 -msgid "Update" -msgstr "" - -#: part/serializers.py:1399 -msgid "Update pricing for this part" -msgstr "" - -#: part/serializers.py:1422 -#, python-brace-format -msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" - -#: part/serializers.py:1429 -msgid "Minimum price must not be greater than maximum price" -msgstr "" - -#: part/serializers.py:1432 -msgid "Maximum price must not be less than minimum price" -msgstr "" - -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 -msgid "Select part to copy BOM from" -msgstr "" - -#: part/serializers.py:1845 -msgid "Remove Existing Data" -msgstr "" - -#: part/serializers.py:1846 -msgid "Remove existing BOM items before copying" -msgstr "" - -#: part/serializers.py:1851 -msgid "Include Inherited" -msgstr "" - -#: part/serializers.py:1852 -msgid "Include BOM items which are inherited from templated parts" -msgstr "" - -#: part/serializers.py:1857 -msgid "Skip Invalid Rows" -msgstr "" - -#: part/serializers.py:1858 -msgid "Enable this option to skip invalid rows" -msgstr "" - -#: part/serializers.py:1863 -msgid "Copy Substitute Parts" -msgstr "" - -#: part/serializers.py:1864 -msgid "Copy substitute parts when duplicate BOM items" -msgstr "" - -#: part/serializers.py:1901 -msgid "Clear Existing BOM" -msgstr "" - -#: part/serializers.py:1902 -msgid "Delete existing BOM items before uploading" -msgstr "" - -#: part/serializers.py:1934 -msgid "No part column specified" -msgstr "" - -#: part/serializers.py:1978 -msgid "Multiple matching parts found" -msgstr "" - -#: part/serializers.py:1981 -msgid "No matching part found" -msgstr "" - -#: part/serializers.py:1984 -msgid "Part is not designated as a component" -msgstr "" - -#: part/serializers.py:1993 -msgid "Quantity not provided" -msgstr "" - -#: part/serializers.py:2001 -msgid "Invalid quantity" -msgstr "" - -#: part/serializers.py:2024 -msgid "At least one BOM item is required" -msgstr "" - -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 -msgid "Total Quantity" -msgstr "" - -#: part/stocktake.py:225 -msgid "Total Cost Min" -msgstr "" - -#: part/stocktake.py:226 -msgid "Total Cost Max" -msgstr "" - -#: part/stocktake.py:284 -msgid "Stocktake Report Available" -msgstr "" - -#: part/stocktake.py:285 -msgid "A new stocktake report is available for download" -msgstr "" - -#: part/tasks.py:37 -msgid "Low stock notification" -msgstr "" - -#: part/tasks.py:39 -#, python-brace-format -msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" - -#: part/templates/part/bom.html:6 -msgid "You do not have permission to edit the BOM." -msgstr "" - -#: part/templates/part/bom.html:15 -msgid "The BOM this part has been changed, and must be validated" -msgstr "" - -#: part/templates/part/bom.html:17 -#, python-format -msgid "This BOM was last checked by %(checker)s on %(check_date)s" -msgstr "" - -#: part/templates/part/bom.html:21 -msgid "This BOM has not been validated." -msgstr "" - -#: part/templates/part/category.html:32 -msgid "Perform stocktake for this part category" -msgstr "" - -#: part/templates/part/category.html:38 part/templates/part/category.html:42 -msgid "You are subscribed to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:46 -msgid "Subscribe to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:52 -msgid "Category Actions" -msgstr "" - -#: part/templates/part/category.html:57 -msgid "Edit category" -msgstr "" - -#: part/templates/part/category.html:58 -msgid "Edit Category" -msgstr "" - -#: part/templates/part/category.html:62 -msgid "Delete category" -msgstr "" - -#: part/templates/part/category.html:63 -msgid "Delete Category" -msgstr "" - -#: part/templates/part/category.html:99 -msgid "Top level part category" -msgstr "" - -#: part/templates/part/category.html:124 -msgid "Parts (Including subcategories)" -msgstr "" - -#: part/templates/part/category.html:162 -msgid "Create new part" -msgstr "" - -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 -msgid "New Part" -msgstr "" - -#: part/templates/part/category.html:189 -#: templates/InvenTree/settings/part_parameters.html:7 -#: templates/InvenTree/settings/sidebar.html:49 -msgid "Part Parameters" -msgstr "" - -#: part/templates/part/category.html:208 -msgid "Create new part category" -msgstr "" - -#: part/templates/part/category.html:209 -msgid "New Category" -msgstr "" - -#: part/templates/part/category_sidebar.html:13 -msgid "Import Parts" -msgstr "" - -#: part/templates/part/copy_part.html:10 -#, python-format -msgid "Make a copy of part '%(full_name)s'." -msgstr "" - -#: part/templates/part/copy_part.html:14 -#: part/templates/part/create_part.html:11 -msgid "Possible Matching Parts" -msgstr "" - -#: part/templates/part/copy_part.html:15 -#: part/templates/part/create_part.html:12 -msgid "The new part may be a duplicate of these existing parts" -msgstr "" - -#: part/templates/part/create_part.html:17 -#, python-format -msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "" - -#: part/templates/part/detail.html:20 -msgid "Part Stock" -msgstr "" - -#: part/templates/part/detail.html:44 -msgid "Refresh scheduling data" -msgstr "" - -#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:552 -msgid "Refresh" -msgstr "" - -#: part/templates/part/detail.html:66 -msgid "Add stocktake information" -msgstr "" - -#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 -#: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 -msgid "Stocktake" -msgstr "" - -#: part/templates/part/detail.html:83 -msgid "Part Test Templates" -msgstr "" - -#: part/templates/part/detail.html:88 -msgid "Add Test Template" -msgstr "" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 -msgid "Sales Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:172 -msgid "Part Notes" -msgstr "" - -#: part/templates/part/detail.html:187 -msgid "Part Variants" -msgstr "" - -#: part/templates/part/detail.html:191 -msgid "Create new variant" -msgstr "" - -#: part/templates/part/detail.html:192 -msgid "New Variant" -msgstr "" - -#: part/templates/part/detail.html:215 -msgid "Add new parameter" -msgstr "" - -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 -msgid "Related Parts" -msgstr "" - -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 -msgid "Add Related" -msgstr "" - -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 -#: report/templates/report/inventree_bill_of_materials_report.html:100 -msgid "Bill of Materials" -msgstr "" - -#: part/templates/part/detail.html:276 -msgid "Export actions" -msgstr "" - -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 -msgid "Export BOM" -msgstr "" - -#: part/templates/part/detail.html:282 -msgid "Print BOM Report" -msgstr "" - -#: part/templates/part/detail.html:288 -msgid "BOM actions" -msgstr "" - -#: part/templates/part/detail.html:292 -msgid "Upload BOM" -msgstr "" - -#: part/templates/part/detail.html:294 -msgid "Validate BOM" -msgstr "" - -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 -#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 -msgid "Add BOM Item" -msgstr "" - -#: part/templates/part/detail.html:313 -msgid "Assemblies" -msgstr "" - -#: part/templates/part/detail.html:329 -msgid "Part Builds" -msgstr "" - -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 -msgid "Build Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:368 -msgid "Part Suppliers" -msgstr "" - -#: part/templates/part/detail.html:388 -msgid "Part Manufacturers" -msgstr "" - -#: part/templates/part/detail.html:672 -msgid "Related Part" -msgstr "" - -#: part/templates/part/detail.html:680 -msgid "Add Related Part" -msgstr "" - -#: part/templates/part/detail.html:765 -msgid "Add Test Result Template" -msgstr "" - -#: part/templates/part/import_wizard/ajax_part_upload.html:29 -#: part/templates/part/import_wizard/part_upload.html:14 -msgid "Insufficient privileges." -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:8 -msgid "Return to Parts" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:13 -msgid "Import Parts from File" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:31 -msgid "Requirements for part import" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "The part import file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:89 -msgid "Download Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:92 -#: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 -msgid "Format" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:93 -#: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 -msgid "Select file format" -msgstr "" - -#: part/templates/part/part_app_base.html:12 -msgid "Part List" -msgstr "" - -#: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 -msgid "You are subscribed to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:33 -msgid "Subscribe to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 -msgid "Print Label" -msgstr "" - -#: part/templates/part/part_base.html:58 -msgid "Show pricing information" -msgstr "" - -#: part/templates/part/part_base.html:63 -#: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 -msgid "Stock actions" -msgstr "" - -#: part/templates/part/part_base.html:70 -msgid "Count part stock" -msgstr "" - -#: part/templates/part/part_base.html:76 -msgid "Transfer part stock" -msgstr "" - -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 -msgid "Part actions" -msgstr "" - -#: part/templates/part/part_base.html:94 -msgid "Duplicate part" -msgstr "" - -#: part/templates/part/part_base.html:97 -msgid "Edit part" -msgstr "" - -#: part/templates/part/part_base.html:100 -msgid "Delete part" -msgstr "" - -#: part/templates/part/part_base.html:119 -msgid "Part is a template part (variants can be made from this part)" -msgstr "" - -#: part/templates/part/part_base.html:123 -msgid "Part can be assembled from other parts" -msgstr "" - -#: part/templates/part/part_base.html:127 -msgid "Part can be used in assemblies" -msgstr "" - -#: part/templates/part/part_base.html:131 -msgid "Part stock is tracked by serial number" -msgstr "" - -#: part/templates/part/part_base.html:135 -msgid "Part can be purchased from external suppliers" -msgstr "" - -#: part/templates/part/part_base.html:139 -msgid "Part can be sold to customers" -msgstr "" - -#: part/templates/part/part_base.html:145 -msgid "Part is not active" -msgstr "" - -#: part/templates/part/part_base.html:153 -msgid "Part is virtual (not a physical part)" -msgstr "" - -#: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 -msgid "Show Part Details" -msgstr "" - -#: part/templates/part/part_base.html:218 -#: stock/templates/stock/item_base.html:388 -msgid "Allocated to Build Orders" -msgstr "" - -#: part/templates/part/part_base.html:227 -#: stock/templates/stock/item_base.html:381 -msgid "Allocated to Sales Orders" -msgstr "" - -#: part/templates/part/part_base.html:300 -msgid "Minimum stock level" -msgstr "" - -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 -#: templates/js/translated/pricing.js:391 -#: templates/js/translated/pricing.js:1054 -msgid "Price Range" -msgstr "" - -#: part/templates/part/part_base.html:361 -msgid "Latest Serial Number" -msgstr "" - -#: part/templates/part/part_base.html:365 -#: stock/templates/stock/item_base.html:322 -msgid "Search for serial number" -msgstr "" - -#: part/templates/part/part_base.html:453 -msgid "Part QR Code" -msgstr "" - -#: part/templates/part/part_base.html:470 -msgid "Link Barcode to Part" -msgstr "" - -#: part/templates/part/part_base.html:520 -msgid "Calculate" -msgstr "" - -#: part/templates/part/part_base.html:537 -msgid "Remove associated image from this part" -msgstr "" - -#: part/templates/part/part_base.html:588 -msgid "No matching images found" -msgstr "" - -#: part/templates/part/part_base.html:684 -msgid "Hide Part Details" -msgstr "" - -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 -#: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 -msgid "Supplier Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:26 -#: part/templates/part/part_pricing.html:52 -#: part/templates/part/part_pricing.html:95 -#: part/templates/part/part_pricing.html:110 -msgid "Unit Cost" -msgstr "" - -#: part/templates/part/part_pricing.html:40 -msgid "No supplier pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 -#: part/templates/part/prices.html:250 -msgid "BOM Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:66 -msgid "Unit Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:72 -msgid "Total Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:83 -msgid "No BOM pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:92 -msgid "Internal Price" -msgstr "" - -#: part/templates/part/part_pricing.html:123 -msgid "No pricing information is available for this part." -msgstr "" - -#: part/templates/part/part_scheduling.html:14 -msgid "Scheduled Quantity" -msgstr "" - -#: part/templates/part/part_sidebar.html:11 -msgid "Variants" -msgstr "" - -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:39 -msgid "Pricing" -msgstr "" - -#: part/templates/part/part_sidebar.html:44 -msgid "Scheduling" -msgstr "" - -#: part/templates/part/part_sidebar.html:54 -msgid "Test Templates" -msgstr "" - -#: part/templates/part/part_thumb.html:11 -msgid "Select from existing images" -msgstr "" - -#: part/templates/part/prices.html:11 -msgid "Pricing Overview" -msgstr "" - -#: part/templates/part/prices.html:14 -msgid "Refresh Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:17 -msgid "Override Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:18 -#: templates/InvenTree/settings/settings_staff_js.html:80 -#: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 -#: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 -msgid "Edit" -msgstr "" - -#: part/templates/part/prices.html:28 stock/admin.py:251 -#: stock/templates/stock/item_base.html:446 -#: templates/js/translated/company.js:1703 -#: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 -msgid "Last Updated" -msgstr "" - -#: part/templates/part/prices.html:37 part/templates/part/prices.html:127 -msgid "Price Category" -msgstr "" - -#: part/templates/part/prices.html:38 part/templates/part/prices.html:128 -msgid "Minimum" -msgstr "" - -#: part/templates/part/prices.html:39 part/templates/part/prices.html:129 -msgid "Maximum" -msgstr "" - -#: part/templates/part/prices.html:51 part/templates/part/prices.html:174 -msgid "Internal Pricing" -msgstr "" - -#: part/templates/part/prices.html:64 part/templates/part/prices.html:206 -msgid "Purchase History" -msgstr "" - -#: part/templates/part/prices.html:98 part/templates/part/prices.html:274 -msgid "Variant Pricing" -msgstr "" - -#: part/templates/part/prices.html:106 -msgid "Pricing Overrides" -msgstr "" - -#: part/templates/part/prices.html:113 -msgid "Overall Pricing" -msgstr "" - -#: part/templates/part/prices.html:149 part/templates/part/prices.html:326 -msgid "Sale History" -msgstr "" - -#: part/templates/part/prices.html:157 -msgid "Sale price data is not available for this part" -msgstr "" - -#: part/templates/part/prices.html:164 -msgid "Price range data is not available for this part." -msgstr "" - -#: part/templates/part/prices.html:175 part/templates/part/prices.html:207 -#: part/templates/part/prices.html:228 part/templates/part/prices.html:251 -#: part/templates/part/prices.html:275 part/templates/part/prices.html:298 -#: part/templates/part/prices.html:327 -msgid "Jump to overview" -msgstr "" - -#: part/templates/part/prices.html:180 -msgid "Add Internal Price Break" -msgstr "" - -#: part/templates/part/prices.html:297 -msgid "Sale Pricing" -msgstr "" - -#: part/templates/part/prices.html:303 -msgid "Add Sell Price Break" -msgstr "" - -#: part/templates/part/pricing_javascript.html:24 -msgid "Update Pricing" -msgstr "" - -#: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 -msgid "No Stock" -msgstr "" - -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 -msgid "Low Stock" -msgstr "" - -#: part/templates/part/upload_bom.html:8 -msgid "Return to BOM" -msgstr "" - -#: part/templates/part/upload_bom.html:13 -msgid "Upload Bill of Materials" -msgstr "" - -#: part/templates/part/upload_bom.html:19 -msgid "BOM upload requirements" -msgstr "" - -#: part/templates/part/upload_bom.html:23 -#: part/templates/part/upload_bom.html:90 -msgid "Upload BOM File" -msgstr "" - -#: part/templates/part/upload_bom.html:29 -msgid "Submit BOM Data" -msgstr "" - -#: part/templates/part/upload_bom.html:37 -msgid "Requirements for BOM upload" -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "The BOM file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "BOM Upload Template" -msgstr "" - -#: part/templates/part/upload_bom.html:40 -msgid "Each part must already exist in the database" -msgstr "" - -#: part/templates/part/variant_part.html:9 -msgid "Create new part variant" -msgstr "" - -#: part/templates/part/variant_part.html:10 -msgid "Create a new variant part from this template" -msgstr "" - -#: part/views.py:111 -msgid "Match References" -msgstr "" - -#: part/views.py:275 -#, python-brace-format -msgid "Can't import part {new_part.name} because there is no category assigned" -msgstr "" - -#: part/views.py:425 -msgid "Select Part Image" -msgstr "" - -#: part/views.py:448 -msgid "Updated part image" -msgstr "" - -#: part/views.py:451 -msgid "Part image not found" -msgstr "" - -#: part/views.py:545 -msgid "Part Pricing" -msgstr "" - -#: plugin/api.py:172 -msgid "Plugin cannot be deleted as it is currently active" -msgstr "" - -#: plugin/base/action/api.py:32 -msgid "No action specified" -msgstr "" - -#: plugin/base/action/api.py:41 -msgid "No matching action found" -msgstr "" - -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 -msgid "Barcode matches existing item" -msgstr "" - -#: plugin/base/barcodes/api.py:336 -msgid "No matching part data found" -msgstr "" - -#: plugin/base/barcodes/api.py:353 -msgid "No matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:357 -msgid "Multiple matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:381 -msgid "Matched supplier part" -msgstr "" - -#: plugin/base/barcodes/api.py:430 -msgid "Item has already been received" -msgstr "" - -#: plugin/base/barcodes/api.py:467 -msgid "No match for supplier barcode" -msgstr "" - -#: plugin/base/barcodes/api.py:510 -msgid "Multiple matching line items found" -msgstr "" - -#: plugin/base/barcodes/api.py:513 -msgid "No matching line item found" -msgstr "" - -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 -msgid "Barcode does not match an existing stock item" -msgstr "" - -#: plugin/base/barcodes/api.py:569 -msgid "Stock item does not match line item" -msgstr "" - -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 -msgid "Insufficient stock available" -msgstr "" - -#: plugin/base/barcodes/api.py:602 -msgid "Stock item allocated to sales order" -msgstr "" - -#: plugin/base/barcodes/api.py:606 -msgid "Not enough information" -msgstr "" - -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 -msgid "Found multiple matching supplier parts for barcode" -msgstr "" - -#: plugin/base/barcodes/mixins.py:222 -#, python-brace-format -msgid "Found multiple purchase orders matching '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:226 -#, python-brace-format -msgid "No matching purchase order for '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:231 -msgid "Purchase order does not match supplier" -msgstr "" - -#: plugin/base/barcodes/mixins.py:465 -msgid "Failed to find pending line item for supplier part" -msgstr "" - -#: plugin/base/barcodes/mixins.py:496 -msgid "Further information required to receive line item" -msgstr "" - -#: plugin/base/barcodes/mixins.py:504 -msgid "Received purchase order line item" -msgstr "" - -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 -msgid "Purchase Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:111 -msgid "Purchase order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:129 -msgid "PurchaseOrder to receive items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:135 -msgid "Purchase order has not been placed" -msgstr "" - -#: plugin/base/barcodes/serializers.py:143 -msgid "Location to receive items into" -msgstr "" - -#: plugin/base/barcodes/serializers.py:149 -msgid "Cannot select a structural location" -msgstr "" - -#: plugin/base/barcodes/serializers.py:163 -msgid "Sales Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:169 -msgid "Sales order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:177 -msgid "Sales order line item to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:184 -msgid "Sales order shipment to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:190 -msgid "Shipment has already been delivered" -msgstr "" - -#: plugin/base/barcodes/serializers.py:195 -msgid "Quantity to allocate" -msgstr "" - -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 -msgid "Label printing failed" -msgstr "" - -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:28 -msgid "Provides native support for barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/integration/core_notifications.py:35 -#: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:34 -msgid "InvenTree Notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:36 -msgid "Integrated outgoing notification methods" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:41 -#: plugin/builtin/integration/core_notifications.py:80 -msgid "Enable email notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:42 -#: plugin/builtin/integration/core_notifications.py:81 -msgid "Allow sending of emails for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:47 -msgid "Enable slack notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:49 -msgid "Allow sending of slack channel messages for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:55 -msgid "Slack incoming webhook url" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:56 -msgid "URL that is used to send messages to a slack channel" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:164 -msgid "Open link" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:22 -msgid "InvenTree Currency Exchange" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:23 -msgid "Default currency exchange integration" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:19 -msgid "InvenTree PDF label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:20 -msgid "Provides native support for printing PDF labels" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 -msgid "Debug mode" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 -msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:61 -msgid "InvenTree machine label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:62 -msgid "Provides support for printing using a machine" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:149 -msgid "last used" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:166 -msgid "Options" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:29 -msgid "Page size for the label sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:34 -msgid "Skip Labels" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:35 -msgid "Skip this number of labels when printing label sheets" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:41 -msgid "Border" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:42 -msgid "Print a border around each label" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 -msgid "Landscape" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:48 -msgid "Print the label sheet in landscape mode" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:60 -msgid "InvenTree Label Sheet Printer" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:61 -msgid "Arrays multiple labels onto a single sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:106 -msgid "Label is too large for page size" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:140 -msgid "No labels were generated" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:16 -msgid "Supplier Integration - DigiKey" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:17 -msgid "Provides support for scanning DigiKey barcodes" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:26 -msgid "The Supplier which acts as 'DigiKey'" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:18 -msgid "Supplier Integration - LCSC" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:19 -msgid "Provides support for scanning LCSC barcodes" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:27 -msgid "The Supplier which acts as 'LCSC'" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:16 -msgid "Supplier Integration - Mouser" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:17 -msgid "Provides support for scanning Mouser barcodes" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:25 -msgid "The Supplier which acts as 'Mouser'" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:18 -msgid "Supplier Integration - TME" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:19 -msgid "Provides support for scanning TME barcodes" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:27 -msgid "The Supplier which acts as 'TME'" -msgstr "" - -#: plugin/installer.py:194 plugin/installer.py:282 -msgid "Only staff users can administer plugins" -msgstr "" - -#: plugin/installer.py:197 -msgid "Plugin installation is disabled" -msgstr "" - -#: plugin/installer.py:248 -msgid "Installed plugin successfully" -msgstr "" - -#: plugin/installer.py:254 -#, python-brace-format -msgid "Installed plugin into {path}" -msgstr "" - -#: plugin/installer.py:273 -msgid "Plugin was not found in registry" -msgstr "" - -#: plugin/installer.py:276 -msgid "Plugin is not a packaged plugin" -msgstr "" - -#: plugin/installer.py:279 -msgid "Plugin package name not found" -msgstr "" - -#: plugin/installer.py:299 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:303 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" - -#: plugin/installer.py:316 -msgid "Uninstalled plugin successfully" -msgstr "" - -#: plugin/models.py:36 -msgid "Plugin Configuration" -msgstr "" - -#: plugin/models.py:37 -msgid "Plugin Configurations" -msgstr "" - -#: plugin/models.py:43 users/models.py:100 -msgid "Key" -msgstr "" - -#: plugin/models.py:44 -msgid "Key of plugin" -msgstr "" - -#: plugin/models.py:52 -msgid "PluginName of the plugin" -msgstr "" - -#: plugin/models.py:59 plugin/serializers.py:90 -msgid "Package Name" -msgstr "" - -#: plugin/models.py:61 -msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" - -#: plugin/models.py:66 -msgid "Is the plugin active" -msgstr "" - -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 -msgid "Installed" -msgstr "" - -#: plugin/models.py:166 -msgid "Sample plugin" -msgstr "" - -#: plugin/models.py:174 -msgid "Builtin Plugin" -msgstr "" - -#: plugin/models.py:182 -msgid "Package Plugin" -msgstr "" - -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 -#: templates/js/translated/plugin.js:51 -msgid "Plugin" -msgstr "" - -#: plugin/models.py:267 -msgid "Method" -msgstr "" - -#: plugin/plugin.py:270 -msgid "No author found" -msgstr "" - -#: plugin/registry.py:534 -#, python-brace-format -msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" - -#: plugin/registry.py:537 -#, python-brace-format -msgid "Plugin requires at least version {v}" -msgstr "" - -#: plugin/registry.py:539 -#, python-brace-format -msgid "Plugin requires at most version {v}" -msgstr "" - -#: plugin/samples/integration/sample.py:52 -msgid "Enable PO" -msgstr "" - -#: plugin/samples/integration/sample.py:53 -msgid "Enable PO functionality in InvenTree interface" -msgstr "" - -#: plugin/samples/integration/sample.py:58 -msgid "API Key" -msgstr "" - -#: plugin/samples/integration/sample.py:59 -msgid "Key required for accessing external API" -msgstr "" - -#: plugin/samples/integration/sample.py:63 -msgid "Numerical" -msgstr "" - -#: plugin/samples/integration/sample.py:64 -msgid "A numerical setting" -msgstr "" - -#: plugin/samples/integration/sample.py:69 -msgid "Choice Setting" -msgstr "" - -#: plugin/samples/integration/sample.py:70 -msgid "A setting with multiple choices" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:15 -msgid "Sample currency exchange plugin" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:18 -msgid "InvenTree Contributors" -msgstr "" - -#: plugin/serializers.py:81 -msgid "Source URL" -msgstr "" - -#: plugin/serializers.py:83 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" - -#: plugin/serializers.py:92 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" - -#: plugin/serializers.py:99 -#: templates/InvenTree/settings/plugin_settings.html:42 -#: templates/js/translated/plugin.js:86 -msgid "Version" -msgstr "" - -#: plugin/serializers.py:101 -msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" - -#: plugin/serializers.py:106 -msgid "Confirm plugin installation" -msgstr "" - -#: plugin/serializers.py:108 -msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" - -#: plugin/serializers.py:121 -msgid "Installation not confirmed" -msgstr "" - -#: plugin/serializers.py:123 -msgid "Either packagename of URL must be provided" -msgstr "" - -#: plugin/serializers.py:161 -msgid "Full reload" -msgstr "" - -#: plugin/serializers.py:162 -msgid "Perform a full reload of the plugin registry" -msgstr "" - -#: plugin/serializers.py:168 -msgid "Force reload" -msgstr "" - -#: plugin/serializers.py:170 -msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" - -#: plugin/serializers.py:177 -msgid "Collect plugins" -msgstr "" - -#: plugin/serializers.py:178 -msgid "Collect plugins and add them to the registry" -msgstr "" - -#: plugin/serializers.py:205 -msgid "Activate Plugin" -msgstr "" - -#: plugin/serializers.py:206 -msgid "Activate this plugin" -msgstr "" - -#: plugin/serializers.py:226 -msgid "Delete configuration" -msgstr "" - -#: plugin/serializers.py:227 -msgid "Delete the plugin configuration from the database" -msgstr "" - -#: report/api.py:88 -msgid "No valid objects provided to template" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "" - -#: report/helpers.py:43 -msgid "A4" -msgstr "" - -#: report/helpers.py:44 -msgid "A3" -msgstr "" - -#: report/helpers.py:45 -msgid "Legal" -msgstr "" - -#: report/helpers.py:46 -msgid "Letter" -msgstr "" - -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 -msgid "Template name" -msgstr "" - -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" - -#: report/models.py:302 -msgid "Page size for PDF reports" -msgstr "" - -#: report/models.py:308 -msgid "Render report in landscape orientation" -msgstr "" - -#: report/models.py:367 -msgid "Width [mm]" -msgstr "" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "" - -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" - -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" - -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" - -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" - -#: report/models.py:456 -msgid "Report Template" -msgstr "" - -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" - -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" - -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" - -#: report/models.py:479 -msgid "Label Template" -msgstr "" - -#: report/models.py:502 -msgid "Snippet" -msgstr "" - -#: report/models.py:503 -msgid "Report snippet file" -msgstr "" - -#: report/models.py:510 -msgid "Snippet file description" -msgstr "" - -#: report/models.py:528 -msgid "Asset" -msgstr "" - -#: report/models.py:529 -msgid "Report asset file" -msgstr "" - -#: report/models.py:536 -msgid "Asset file description" -msgstr "" - -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: report/templates/report/inventree_bill_of_materials_report.html:133 -msgid "Materials needed" -msgstr "" - -#: report/templates/report/inventree_build_order_report.html:146 -msgid "Required For" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:15 -msgid "Supplier was deleted" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 -#: templates/js/translated/pricing.js:596 -#: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 -msgid "Unit Price" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 -msgid "Extra Line Items" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 -msgid "Total" -msgstr "" - -#: report/templates/report/inventree_stock_location_report.html:97 -msgid "Stock location items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:21 -msgid "Stock Item Test Report" -msgstr "" - -#: report/templates/report/inventree_test_report.html:97 -msgid "Test Results" -msgstr "" - -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 -msgid "Test" -msgstr "" - -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 -msgid "Result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:129 -msgid "Pass" -msgstr "" - -#: report/templates/report/inventree_test_report.html:131 -msgid "Fail" -msgstr "" - -#: report/templates/report/inventree_test_report.html:138 -msgid "No result (required)" -msgstr "" - -#: report/templates/report/inventree_test_report.html:140 -msgid "No result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 -msgid "Installed Items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 -msgid "Serial" -msgstr "" - -#: report/templatetags/report.py:98 -msgid "Asset file does not exist" -msgstr "" - -#: report/templatetags/report.py:154 report/templatetags/report.py:233 -msgid "Image file not found" -msgstr "" - -#: report/templatetags/report.py:258 -msgid "part_image tag requires a Part instance" -msgstr "" - -#: report/templatetags/report.py:299 -msgid "company_image tag requires a Company instance" -msgstr "" - -#: stock/admin.py:51 stock/admin.py:171 -msgid "Location ID" -msgstr "" - -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 -msgid "Location Path" -msgstr "" - -#: stock/admin.py:148 -msgid "Stock Item ID" -msgstr "" - -#: stock/admin.py:167 -msgid "Status Code" -msgstr "" - -#: stock/admin.py:179 -msgid "Supplier Part ID" -msgstr "" - -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 -msgid "Supplier ID" -msgstr "" - -#: stock/admin.py:200 -msgid "Customer ID" -msgstr "" - -#: stock/admin.py:205 stock/models.py:825 -#: stock/templates/stock/item_base.html:354 -msgid "Installed In" -msgstr "" - -#: stock/admin.py:210 -msgid "Build ID" -msgstr "" - -#: stock/admin.py:220 -msgid "Sales Order ID" -msgstr "" - -#: stock/admin.py:225 -msgid "Purchase Order ID" -msgstr "" - -#: stock/admin.py:240 -msgid "Review Needed" -msgstr "" - -#: stock/admin.py:245 -msgid "Delete on Deplete" -msgstr "" - -#: stock/admin.py:260 stock/models.py:919 -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 -msgid "Expiry Date" -msgstr "" - -#: stock/api.py:310 -msgid "Filter by location depth" -msgstr "" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 -msgid "Include sub-locations in filtered results" -msgstr "" - -#: stock/api.py:367 stock/serializers.py:1186 -msgid "Parent Location" -msgstr "" - -#: stock/api.py:368 -msgid "Filter by parent location" -msgstr "" - -#: stock/api.py:615 templates/js/translated/table_filters.js:434 -msgid "External Location" -msgstr "" - -#: stock/api.py:803 -msgid "Part Tree" -msgstr "" - -#: stock/api.py:833 -msgid "Expiry date before" -msgstr "" - -#: stock/api.py:837 -msgid "Expiry date after" -msgstr "" - -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 -msgid "Stale" -msgstr "" - -#: stock/api.py:927 -msgid "Quantity is required" -msgstr "" - -#: stock/api.py:933 -msgid "Valid part must be supplied" -msgstr "" - -#: stock/api.py:964 -msgid "The given supplier part does not exist" -msgstr "" - -#: stock/api.py:974 -msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" - -#: stock/api.py:1005 -msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" - -#: stock/models.py:64 -msgid "Stock Location type" -msgstr "" - -#: stock/models.py:65 -msgid "Stock Location types" -msgstr "" - -#: stock/models.py:91 -msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" - -#: stock/models.py:131 stock/models.py:807 -#: stock/templates/stock/location.html:17 -#: stock/templates/stock/stock_app_base.html:8 -msgid "Stock Location" -msgstr "" - -#: stock/models.py:132 stock/templates/stock/location.html:183 -#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 -#: users/models.py:205 -msgid "Stock Locations" -msgstr "" - -#: stock/models.py:180 stock/models.py:968 -#: stock/templates/stock/item_base.html:247 -msgid "Owner" -msgstr "" - -#: stock/models.py:181 stock/models.py:969 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:189 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 -msgid "External" -msgstr "" - -#: stock/models.py:197 -msgid "This is an external stock location" -msgstr "" - -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 -msgid "Location type" -msgstr "" - -#: stock/models.py:207 -msgid "Stock location type of this location" -msgstr "" - -#: stock/models.py:279 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:664 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:691 stock/serializers.py:480 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:708 -#, python-brace-format -msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" - -#: stock/models.py:718 stock/models.py:731 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:721 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:743 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:748 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:761 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:777 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:789 -msgid "Base part" -msgstr "" - -#: stock/models.py:799 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:811 -msgid "Where is this stock item located?" -msgstr "" - -#: stock/models.py:819 stock/serializers.py:1580 -msgid "Packaging this stock item is stored in" -msgstr "" - -#: stock/models.py:830 -msgid "Is this item installed in another item?" -msgstr "" - -#: stock/models.py:849 -msgid "Serial number for this item" -msgstr "" - -#: stock/models.py:863 stock/serializers.py:1563 -msgid "Batch code for this stock item" -msgstr "" - -#: stock/models.py:868 -msgid "Stock Quantity" -msgstr "" - -#: stock/models.py:878 -msgid "Source Build" -msgstr "" - -#: stock/models.py:881 -msgid "Build for this stock item" -msgstr "" - -#: stock/models.py:888 stock/templates/stock/item_base.html:363 -msgid "Consumed By" -msgstr "" - -#: stock/models.py:891 -msgid "Build order which consumed this stock item" -msgstr "" - -#: stock/models.py:900 -msgid "Source Purchase Order" -msgstr "" - -#: stock/models.py:904 -msgid "Purchase order for this stock item" -msgstr "" - -#: stock/models.py:910 -msgid "Destination Sales Order" -msgstr "" - -#: stock/models.py:921 -msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" - -#: stock/models.py:939 -msgid "Delete on deplete" -msgstr "" - -#: stock/models.py:940 -msgid "Delete this Stock Item when stock is depleted" -msgstr "" - -#: stock/models.py:960 -msgid "Single unit purchase price at time of purchase" -msgstr "" - -#: stock/models.py:991 -msgid "Converted to part" -msgstr "" - -#: stock/models.py:1511 -msgid "Part is not set as trackable" -msgstr "" - -#: stock/models.py:1517 -msgid "Quantity must be integer" -msgstr "" - -#: stock/models.py:1525 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" - -#: stock/models.py:1531 -msgid "Serial numbers must be a list of integers" -msgstr "" - -#: stock/models.py:1536 -msgid "Quantity does not match serial numbers" -msgstr "" - -#: stock/models.py:1544 stock/serializers.py:726 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/models.py:1641 -msgid "Test template does not exist" -msgstr "" - -#: stock/models.py:1659 -msgid "Stock item has been assigned to a sales order" -msgstr "" - -#: stock/models.py:1663 -msgid "Stock item is installed in another item" -msgstr "" - -#: stock/models.py:1666 -msgid "Stock item contains other items" -msgstr "" - -#: stock/models.py:1669 -msgid "Stock item has been assigned to a customer" -msgstr "" - -#: stock/models.py:1672 -msgid "Stock item is currently in production" -msgstr "" - -#: stock/models.py:1675 -msgid "Serialized stock cannot be merged" -msgstr "" - -#: stock/models.py:1682 stock/serializers.py:1469 -msgid "Duplicate stock items" -msgstr "" - -#: stock/models.py:1686 -msgid "Stock items must refer to the same part" -msgstr "" - -#: stock/models.py:1694 -msgid "Stock items must refer to the same supplier part" -msgstr "" - -#: stock/models.py:1699 -msgid "Stock status codes must match" -msgstr "" - -#: stock/models.py:1960 -msgid "StockItem cannot be moved as it is not in stock" -msgstr "" - -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 -msgid "Entry notes" -msgstr "" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2454 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 -msgid "Test result" -msgstr "" - -#: stock/models.py:2551 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2559 -msgid "Test result attachment" -msgstr "" - -#: stock/models.py:2563 -msgid "Test notes" -msgstr "" - -#: stock/models.py:2571 templates/js/translated/stock.js:1633 -msgid "Test station" -msgstr "" - -#: stock/models.py:2572 -msgid "The identifier of the test station where the test was performed" -msgstr "" - -#: stock/models.py:2578 -msgid "Started" -msgstr "" - -#: stock/models.py:2579 -msgid "The timestamp of the test start" -msgstr "" - -#: stock/models.py:2585 -msgid "Finished" -msgstr "" - -#: stock/models.py:2586 -msgid "The timestamp of the test finish" -msgstr "" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 -msgid "Serial number is too large" -msgstr "" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 -msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" - -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 -msgid "Purchase price of this stock item, per unit or pack" -msgstr "" - -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 -msgid "Enter number of stock items to serialize" -msgstr "" - -#: stock/serializers.py:674 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" - -#: stock/serializers.py:681 -msgid "Enter serial numbers for new items" -msgstr "" - -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 -msgid "Destination stock location" -msgstr "" - -#: stock/serializers.py:699 -msgid "Optional note field" -msgstr "" - -#: stock/serializers.py:709 -msgid "Serial numbers cannot be assigned to this part" -msgstr "" - -#: stock/serializers.py:764 -msgid "Select stock item to install" -msgstr "" - -#: stock/serializers.py:771 -msgid "Quantity to Install" -msgstr "" - -#: stock/serializers.py:772 -msgid "Enter the quantity of items to install" -msgstr "" - -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 -msgid "Add transaction note (optional)" -msgstr "" - -#: stock/serializers.py:785 -msgid "Quantity to install must be at least 1" -msgstr "" - -#: stock/serializers.py:793 -msgid "Stock item is unavailable" -msgstr "" - -#: stock/serializers.py:804 -msgid "Selected part is not in the Bill of Materials" -msgstr "" - -#: stock/serializers.py:817 -msgid "Quantity to install must not exceed available quantity" -msgstr "" - -#: stock/serializers.py:852 -msgid "Destination location for uninstalled item" -msgstr "" - -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 -msgid "Select part to convert stock item into" -msgstr "" - -#: stock/serializers.py:930 -msgid "Selected part is not a valid option for conversion" -msgstr "" - -#: stock/serializers.py:947 -msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" - -#: stock/serializers.py:978 -msgid "Destination location for returned item" -msgstr "" - -#: stock/serializers.py:1015 -msgid "Select stock items to change status" -msgstr "" - -#: stock/serializers.py:1021 -msgid "No stock items selected" -msgstr "" - -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 -#: stock/templates/stock/location_sidebar.html:5 -msgid "Sublocations" -msgstr "" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 -msgid "Part must be salable" -msgstr "" - -#: stock/serializers.py:1302 -msgid "Item is allocated to a sales order" -msgstr "" - -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "" - -#: stock/templates/stock/item.html:17 -msgid "Stock Tracking Information" -msgstr "" - -#: stock/templates/stock/item.html:63 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:72 -msgid "This stock item does not have any child items" -msgstr "" - -#: stock/templates/stock/item.html:81 -#: stock/templates/stock/stock_sidebar.html:12 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 -msgid "Test Report" -msgstr "" - -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 -msgid "Delete Test Data" -msgstr "" - -#: stock/templates/stock/item.html:93 -msgid "Add Test Data" -msgstr "" - -#: stock/templates/stock/item.html:125 -msgid "Stock Item Notes" -msgstr "" - -#: stock/templates/stock/item.html:140 -msgid "Installed Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 -msgid "Install Stock Item" -msgstr "" - -#: stock/templates/stock/item.html:264 -msgid "Delete all test results for this stock item" -msgstr "" - -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 -msgid "Add Test Result" -msgstr "" - -#: stock/templates/stock/item_base.html:33 -msgid "Locate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:51 -msgid "Scan to Location" -msgstr "" - -#: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 -msgid "Printing actions" -msgstr "" - -#: stock/templates/stock/item_base.html:75 -msgid "Stock adjustment actions" -msgstr "" - -#: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 -msgid "Count stock" -msgstr "" - -#: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 -msgid "Add stock" -msgstr "" - -#: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 -msgid "Remove stock" -msgstr "" - -#: stock/templates/stock/item_base.html:85 -msgid "Serialize stock" -msgstr "" - -#: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 -msgid "Transfer stock" -msgstr "" - -#: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 -msgid "Assign to customer" -msgstr "" - -#: stock/templates/stock/item_base.html:94 -msgid "Return to stock" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install" -msgstr "" - -#: stock/templates/stock/item_base.html:115 -msgid "Convert to variant" -msgstr "" - -#: stock/templates/stock/item_base.html:118 -msgid "Duplicate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:120 -msgid "Edit stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:123 -msgid "Delete stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 -msgid "Build" -msgstr "" - -#: stock/templates/stock/item_base.html:211 -msgid "No manufacturer set" -msgstr "" - -#: stock/templates/stock/item_base.html:251 -msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 -msgid "Read only" -msgstr "" - -#: stock/templates/stock/item_base.html:265 -msgid "This stock item is unavailable" -msgstr "" - -#: stock/templates/stock/item_base.html:271 -msgid "This stock item is in production and cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:272 -msgid "Edit the stock item from the build view." -msgstr "" - -#: stock/templates/stock/item_base.html:287 -msgid "This stock item is allocated to Sales Order" -msgstr "" - -#: stock/templates/stock/item_base.html:295 -msgid "This stock item is allocated to Build Order" -msgstr "" - -#: stock/templates/stock/item_base.html:311 -msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "previous page" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "Navigate to previous serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "next page" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "Navigate to next serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 -msgid "No location set" -msgstr "" - -#: stock/templates/stock/item_base.html:413 -msgid "Tests" -msgstr "" - -#: stock/templates/stock/item_base.html:419 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:437 -#, python-format -msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:439 -#, python-format -msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:455 -msgid "No stocktake performed" -msgstr "" - -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 -msgid "stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:527 -msgid "Edit Stock Status" -msgstr "" - -#: stock/templates/stock/item_base.html:536 -msgid "Stock Item QR Code" -msgstr "" - -#: stock/templates/stock/item_base.html:547 -msgid "Link Barcode to Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:611 -msgid "Select one of the part variants listed below." -msgstr "" - -#: stock/templates/stock/item_base.html:614 -msgid "Warning" -msgstr "" - -#: stock/templates/stock/item_base.html:615 -msgid "This action cannot be easily undone" -msgstr "" - -#: stock/templates/stock/item_base.html:623 -msgid "Convert Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:656 -msgid "Return to Stock" -msgstr "" - -#: stock/templates/stock/item_serialize.html:5 -msgid "Create serialized items from this stock item." -msgstr "" - -#: stock/templates/stock/item_serialize.html:7 -msgid "Select quantity to serialize, and unique serial numbers." -msgstr "" - -#: stock/templates/stock/location.html:35 -msgid "Perform stocktake for this stock location" -msgstr "" - -#: stock/templates/stock/location.html:42 -msgid "Locate stock location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan stock items into this location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan In Stock Items" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan In Container" -msgstr "" - -#: stock/templates/stock/location.html:72 -msgid "Print Location Report" -msgstr "" - -#: stock/templates/stock/location.html:101 -msgid "Location actions" -msgstr "" - -#: stock/templates/stock/location.html:103 -msgid "Edit location" -msgstr "" - -#: stock/templates/stock/location.html:105 -msgid "Delete location" -msgstr "" - -#: stock/templates/stock/location.html:135 -msgid "Top level stock location" -msgstr "" - -#: stock/templates/stock/location.html:141 -msgid "Location Owner" -msgstr "" - -#: stock/templates/stock/location.html:145 -msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "" - -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 -msgid "Create new stock location" -msgstr "" - -#: stock/templates/stock/location.html:224 -msgid "New Location" -msgstr "" - -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 -msgid "stock location" -msgstr "" - -#: stock/templates/stock/location.html:320 -msgid "Scanned stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:393 -msgid "Stock Location QR Code" -msgstr "" - -#: stock/templates/stock/location.html:404 -msgid "Link Barcode to Stock Location" -msgstr "" - -#: stock/templates/stock/stock_app_base.html:16 -msgid "Loading..." -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:5 -msgid "Stock Tracking" -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Allocations" -msgstr "" - -#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 -msgid "Permission Denied" -msgstr "" - -#: templates/403.html:15 -msgid "You do not have permission to view this page." -msgstr "" - -#: templates/403_csrf.html:11 -msgid "Authentication Failure" -msgstr "" - -#: templates/403_csrf.html:14 -msgid "You have been logged out from InvenTree." -msgstr "" - -#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 -#: templates/navbar.html:150 -msgid "Login" -msgstr "" - -#: templates/404.html:6 templates/404.html:12 -msgid "Page Not Found" -msgstr "" - -#: templates/404.html:15 -msgid "The requested page does not exist" -msgstr "" - -#: templates/500.html:6 templates/500.html:12 -msgid "Internal Server Error" -msgstr "" - -#: templates/500.html:15 -#, python-format -msgid "The %(inventree_title)s server raised an internal error" -msgstr "" - -#: templates/500.html:16 -msgid "Refer to the error log in the admin interface for further details" -msgstr "" - -#: templates/503.html:11 templates/503.html:33 -msgid "Site is in Maintenance" -msgstr "" - -#: templates/503.html:39 -msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" - -#: templates/InvenTree/index.html:7 -msgid "Index" -msgstr "" - -#: templates/InvenTree/index.html:39 -msgid "Subscribed Parts" -msgstr "" - -#: templates/InvenTree/index.html:52 -msgid "Subscribed Categories" -msgstr "" - -#: templates/InvenTree/index.html:62 -msgid "Latest Parts" -msgstr "" - -#: templates/InvenTree/index.html:77 -msgid "BOM Waiting Validation" -msgstr "" - -#: templates/InvenTree/index.html:106 -msgid "Recently Updated" -msgstr "" - -#: templates/InvenTree/index.html:134 -msgid "Depleted Stock" -msgstr "" - -#: templates/InvenTree/index.html:148 -msgid "Required for Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:156 -msgid "Expired Stock" -msgstr "" - -#: templates/InvenTree/index.html:172 -msgid "Stale Stock" -msgstr "" - -#: templates/InvenTree/index.html:199 -msgid "Build Orders In Progress" -msgstr "" - -#: templates/InvenTree/index.html:210 -msgid "Overdue Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:230 -msgid "Outstanding Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:241 -msgid "Overdue Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:262 -msgid "Outstanding Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:273 -msgid "Overdue Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:299 -msgid "InvenTree News" -msgstr "" - -#: templates/InvenTree/index.html:301 -msgid "Current News" -msgstr "" - -#: templates/InvenTree/notifications/history.html:9 -msgid "Notification History" -msgstr "" - -#: templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:75 -msgid "Delete Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:9 -msgid "Pending Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:13 -#: templates/InvenTree/notifications/inbox.html:14 -msgid "Mark all as read" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:10 -#: templates/InvenTree/notifications/sidebar.html:5 -#: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:38 -msgid "No unread notifications found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:58 -msgid "No notification history found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:65 -msgid "Delete all read notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:89 -#: templates/js/translated/notification.js:85 -msgid "Delete Notification" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:8 -msgid "Inbox" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:10 -msgid "History" -msgstr "" - -#: templates/InvenTree/search.html:8 -msgid "Search Results" -msgstr "" - -#: templates/InvenTree/settings/barcode.html:8 -msgid "Barcode Settings" -msgstr "" - -#: templates/InvenTree/settings/build.html:8 -msgid "Build Order Settings" -msgstr "" - -#: templates/InvenTree/settings/category.html:7 -msgid "Category Settings" -msgstr "" - -#: templates/InvenTree/settings/global.html:8 -msgid "Server Settings" -msgstr "" - -#: templates/InvenTree/settings/label.html:8 -#: templates/InvenTree/settings/user_labels.html:9 -msgid "Label Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:8 -msgid "Login Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:15 -msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "" - -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 -#: templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: templates/InvenTree/settings/login.html:36 -msgid "Single Sign On" -msgstr "" - -#: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:5 -msgid "URLs" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:8 -#, python-format -msgid "The Base-URL for this plugin is %(base)s." -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:14 -msgid "URL" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:23 -msgid "Open in new tab" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:9 -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:18 -msgid "Slug" -msgstr "" - -#: templates/InvenTree/settings/part.html:7 -msgid "Part Settings" -msgstr "" - -#: templates/InvenTree/settings/part.html:44 -msgid "Part Import" -msgstr "" - -#: templates/InvenTree/settings/part.html:48 -msgid "Import Part" -msgstr "" - -#: templates/InvenTree/settings/part_parameters.html:20 -msgid "Part Parameter Templates" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:7 -msgid "Stocktake Settings" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:25 -msgid "Stocktake Reports" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:8 -#: templates/InvenTree/settings/sidebar.html:35 -msgid "Physical Units" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:12 -msgid "Add Unit" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:9 -#: templates/InvenTree/settings/sidebar.html:64 -msgid "Plugin Settings" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:15 -msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "" - -#: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:66 -msgid "Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 -#: templates/js/translated/plugin.js:151 -msgid "Install Plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 -#: templates/js/translated/plugin.js:224 -msgid "Reload Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:58 -msgid "External plugins are not enabled for this InvenTree installation" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:73 -msgid "Plugin Error Stack" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:82 -msgid "Stage" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:84 -#: templates/js/translated/notification.js:76 -msgid "Message" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:16 -msgid "Plugin information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:47 -msgid "no version information supplied" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:61 -msgid "License" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:70 -msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:76 -msgid "Package information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:82 -msgid "Installation method" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:85 -msgid "This plugin was installed as a package" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:87 -msgid "This plugin was found in a local server path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:93 -msgid "Installation path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:100 -#: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 -msgid "Builtin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:101 -msgid "This is a builtin plugin which cannot be disabled" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:107 -#: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 -msgid "Sample" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:108 -msgid "This is a sample plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:113 -msgid "Commit Author" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:117 -#: templates/about.html:36 -msgid "Commit Date" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:121 -#: templates/about.html:29 -msgid "Commit Hash" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:125 -msgid "Commit Message" -msgstr "" - -#: templates/InvenTree/settings/po.html:7 -msgid "Purchase Order Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:7 -msgid "Pricing Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Exchange Rates" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:39 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:51 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:8 -msgid "Project Code Settings" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:21 -#: templates/InvenTree/settings/sidebar.html:33 -msgid "Project Codes" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:25 -#: templates/InvenTree/settings/settings_staff_js.html:216 -msgid "New Project Code" -msgstr "" - -#: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reporting.html:9 -msgid "Report Settings" -msgstr "" - -#: templates/InvenTree/settings/returns.html:7 -msgid "Return Order Settings" -msgstr "" - -#: templates/InvenTree/settings/setting.html:31 -msgid "No value set" -msgstr "" - -#: templates/InvenTree/settings/setting.html:46 -msgid "Edit setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:58 -msgid "Edit Plugin Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:60 -msgid "Edit Notification Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:63 -msgid "Edit Global Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:65 -msgid "Edit User Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:49 -msgid "Rate" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 -msgid "Delete" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:95 -msgid "Edit Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:110 -msgid "Delete Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:124 -msgid "New Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:140 -msgid "No project codes found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 -msgid "group" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:175 -#: templates/InvenTree/settings/settings_staff_js.html:189 -msgid "Edit Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:176 -#: templates/InvenTree/settings/settings_staff_js.html:203 -msgid "Delete Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:285 -msgid "No category parameter templates found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 -msgid "Edit Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 -msgid "Delete Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:326 -msgid "Edit Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:352 -msgid "Delete Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:387 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:416 -msgid "Create Part Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:439 -msgid "No stock location types found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:464 -msgid "Location count" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 -msgid "Edit Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:470 -msgid "Delete Location type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:493 -msgid "Delete Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 -msgid "New Location Type" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:6 -#: templates/InvenTree/settings/user_settings.html:9 -msgid "User Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:9 -msgid "Account" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:11 -msgid "Display" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:13 -msgid "Home Page" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 -#: templates/navbar.html:107 templates/search.html:8 -#: templates/search_form.html:6 templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:19 -#: templates/InvenTree/settings/sidebar.html:43 -msgid "Reporting" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:24 -msgid "Global Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 -msgid "Server" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:41 -msgid "Labels" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:45 -msgid "Categories" -msgstr "" - -#: templates/InvenTree/settings/so.html:7 -msgid "Sales Order Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:7 -msgid "Stock Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:34 -msgid "Stock Location Types" -msgstr "" - -#: templates/InvenTree/settings/user.html:13 -msgid "Account Settings" -msgstr "" - -#: templates/InvenTree/settings/user.html:19 -#: templates/account/password_reset_from_key.html:4 -#: templates/account/password_reset_from_key.html:7 -msgid "Change Password" -msgstr "" - -#: templates/InvenTree/settings/user.html:55 -msgid "The following email addresses are associated with your account:" -msgstr "" - -#: templates/InvenTree/settings/user.html:76 -msgid "Verified" -msgstr "" - -#: templates/InvenTree/settings/user.html:78 -msgid "Unverified" -msgstr "" - -#: templates/InvenTree/settings/user.html:80 -#: templates/js/translated/company.js:957 -msgid "Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:86 -msgid "Make Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:87 -msgid "Re-send Verification" -msgstr "" - -#: templates/InvenTree/settings/user.html:96 -msgid "Warning:" -msgstr "" - -#: templates/InvenTree/settings/user.html:97 -msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "" - -#: templates/InvenTree/settings/user.html:105 -msgid "Add Email Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:110 -msgid "Add Email" -msgstr "" - -#: templates/InvenTree/settings/user.html:120 -msgid "Multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:125 -msgid "You have these factors available:" -msgstr "" - -#: templates/InvenTree/settings/user.html:135 -msgid "TOTP" -msgstr "" - -#: templates/InvenTree/settings/user.html:141 -msgid "Static" -msgstr "" - -#: templates/InvenTree/settings/user.html:150 -msgid "Multifactor authentication is not configured for your account" -msgstr "" - -#: templates/InvenTree/settings/user.html:157 -msgid "Change factors" -msgstr "" - -#: templates/InvenTree/settings/user.html:158 -msgid "Setup multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:160 -msgid "Remove multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:171 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:177 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:178 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:187 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:188 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:192 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:193 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:194 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:207 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:209 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:223 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:29 -msgid "Theme Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:39 -msgid "Select theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:50 -msgid "Set Theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:58 -msgid "Language Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:67 -msgid "Select language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:83 -#, python-format -msgid "%(lang_translated)s%% translated" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:85 -msgid "No translations available" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:92 -msgid "Set Language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "Some languages are not complete" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:97 -msgid "Show only sufficient" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "and hidden." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "Show them too" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:106 -msgid "Help the translation efforts!" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:107 -msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:108 -msgid "InvenTree Translation Project" -msgstr "" - -#: templates/InvenTree/settings/user_homepage.html:9 -msgid "Home Page Settings" -msgstr "" - -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:9 -msgid "Single Sign On Accounts" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:16 -msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:52 -msgid "There are no social network accounts connected to this account." -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:58 -msgid "Add SSO Account" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:67 -msgid "Single Sign On is not enabled for this server" -msgstr "" - -#: templates/about.html:9 -msgid "InvenTree Version" -msgstr "" - -#: templates/about.html:14 -msgid "Development Version" -msgstr "" - -#: templates/about.html:17 -msgid "Up to Date" -msgstr "" - -#: templates/about.html:19 -msgid "Update Available" -msgstr "" - -#: templates/about.html:43 -msgid "Commit Branch" -msgstr "" - -#: templates/about.html:49 -msgid "InvenTree Documentation" -msgstr "" - -#: templates/about.html:54 -msgid "API Version" -msgstr "" - -#: templates/about.html:59 -msgid "Python Version" -msgstr "" - -#: templates/about.html:64 -msgid "Django Version" -msgstr "" - -#: templates/about.html:69 -msgid "View Code on GitHub" -msgstr "" - -#: templates/about.html:74 -msgid "Credits" -msgstr "" - -#: templates/about.html:79 -msgid "Mobile App" -msgstr "" - -#: templates/about.html:84 -msgid "Submit Bug Report" -msgstr "" - -#: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 -msgid "copy to clipboard" -msgstr "" - -#: templates/about.html:91 -msgid "copy version information" -msgstr "" - -#: templates/account/base.html:66 templates/navbar.html:17 -msgid "InvenTree logo" -msgstr "" - -#: templates/account/email_confirm.html:6 -#: templates/account/email_confirm.html:9 -msgid "Confirm Email Address" -msgstr "" - -#: templates/account/email_confirm.html:15 -#, python-format -msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "" - -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 -msgid "Confirm" -msgstr "" - -#: templates/account/email_confirm.html:29 -#, python-format -msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "" - -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 -msgid "Sign In" -msgstr "" - -#: templates/account/login.html:23 -msgid "Not a member?" -msgstr "" - -#: templates/account/login.html:25 templates/account/signup.html:11 -#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 -#: templates/socialaccount/signup.html:23 -msgid "Sign Up" -msgstr "" - -#: templates/account/login.html:47 -msgid "Forgot Password?" -msgstr "" - -#: templates/account/login.html:55 -msgid "or log in with" -msgstr "" - -#: templates/account/logout.html:5 templates/account/logout.html:8 -#: templates/account/logout.html:20 -msgid "Sign Out" -msgstr "" - -#: templates/account/logout.html:10 -msgid "Are you sure you want to sign out?" -msgstr "" - -#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 -msgid "Return to Site" -msgstr "" - -#: templates/account/password_reset.html:5 -#: templates/account/password_reset.html:12 -msgid "Password Reset" -msgstr "" - -#: templates/account/password_reset.html:18 -msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "" - -#: templates/account/password_reset.html:23 -msgid "Reset My Password" -msgstr "" - -#: templates/account/password_reset.html:27 templates/account/signup.html:37 -msgid "This function is currently disabled. Please contact an administrator." -msgstr "" - -#: templates/account/password_reset_from_key.html:7 -msgid "Bad Token" -msgstr "" - -#: templates/account/password_reset_from_key.html:11 -#, python-format -msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "" - -#: templates/account/password_reset_from_key.html:18 -msgid "Change password" -msgstr "" - -#: templates/account/password_reset_from_key.html:22 -msgid "Your password is now changed." -msgstr "" - -#: templates/account/signup.html:13 -#, python-format -msgid "Already have an account? Then please sign in." -msgstr "" - -#: templates/account/signup.html:28 -msgid "Use a SSO-provider for signup" -msgstr "" - -#: templates/account/signup_closed.html:5 -#: templates/account/signup_closed.html:8 -msgid "Sign Up Closed" -msgstr "" - -#: templates/account/signup_closed.html:10 -msgid "Sign up is currently closed." -msgstr "" - -#: templates/account/signup_closed.html:15 -#: templates/socialaccount/authentication_error.html:19 -#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 -msgid "Return to login page" -msgstr "" - -#: templates/admin_button.html:8 -msgid "View in administration panel" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:5 -msgid "Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:13 -msgid "Authenticate" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:6 -msgid "Two-Factor Authentication Backup Tokens" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:17 -msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:20 -msgid "No backup tokens are available. Press the button below to generate some." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:28 -msgid "Generate Tokens" -msgstr "" - -#: templates/allauth_2fa/remove.html:6 -msgid "Disable Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/remove.html:9 -msgid "Are you sure?" -msgstr "" - -#: templates/allauth_2fa/remove.html:17 -msgid "Disable 2FA" -msgstr "" - -#: templates/allauth_2fa/setup.html:6 -msgid "Setup Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/setup.html:10 -msgid "Step 1" -msgstr "" - -#: templates/allauth_2fa/setup.html:14 -msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 -msgid "Step 2" -msgstr "" - -#: templates/allauth_2fa/setup.html:28 -msgid "Input a token generated by the app:" -msgstr "" - -#: templates/allauth_2fa/setup.html:38 -msgid "Verify" -msgstr "" - -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 -msgid "Add Link" -msgstr "" - -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 -msgid "Add Attachment" -msgstr "" - -#: templates/barcode_data.html:5 -msgid "Barcode Identifier" -msgstr "" - -#: templates/base.html:103 -msgid "Server Restart Required" -msgstr "" - -#: templates/base.html:106 -msgid "A configuration option has been changed which requires a server restart" -msgstr "" - -#: templates/base.html:106 templates/base.html:116 -msgid "Contact your system administrator for further information" -msgstr "" - -#: templates/base.html:113 -msgid "Pending Database Migrations" -msgstr "" - -#: templates/base.html:116 -msgid "There are pending database migrations which require attention" -msgstr "" - -#: templates/email/build_order_completed.html:9 -#: templates/email/canceled_order_assigned.html:9 -#: templates/email/new_order_assigned.html:9 -#: templates/email/overdue_build_order.html:9 -#: templates/email/overdue_purchase_order.html:9 -#: templates/email/overdue_sales_order.html:9 -#: templates/email/purchase_order_received.html:9 -#: templates/email/return_order_received.html:9 -msgid "Click on the following link to view this order" -msgstr "" - -#: templates/email/build_order_required_stock.html:7 -msgid "Stock is required for the following build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:8 -#, python-format -msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "" - -#: templates/email/build_order_required_stock.html:10 -msgid "Click on the following link to view this build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:14 -msgid "The following parts are low on required stock" -msgstr "" - -#: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 -msgid "Required Quantity" -msgstr "" - -#: templates/email/build_order_required_stock.html:38 -#: templates/email/low_stock_notification.html:30 -msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "" - -#: templates/email/low_stock_notification.html:9 -msgid "Click on the following link to view this part" -msgstr "" - -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 -msgid "Minimum Quantity" -msgstr "" - -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 -msgid "No Response" -msgstr "" - -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 -msgid "No response from the InvenTree server" -msgstr "" - -#: templates/js/translated/api.js:232 -msgid "Error 400: Bad request" -msgstr "" - -#: templates/js/translated/api.js:233 -msgid "API request returned error code 400" -msgstr "" - -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 -msgid "Error 401: Not Authenticated" -msgstr "" - -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 -msgid "Authentication credentials not supplied" -msgstr "" - -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 -msgid "Error 403: Permission Denied" -msgstr "" - -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 -msgid "You do not have the required permissions to access this function" -msgstr "" - -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 -msgid "Error 404: Resource Not Found" -msgstr "" - -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 -msgid "The requested resource could not be located on the server" -msgstr "" - -#: templates/js/translated/api.js:252 -msgid "Error 405: Method Not Allowed" -msgstr "" - -#: templates/js/translated/api.js:253 -msgid "HTTP method not allowed at URL" -msgstr "" - -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 -msgid "Error 408: Timeout" -msgstr "" - -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 -msgid "Connection timeout while requesting data from server" -msgstr "" - -#: templates/js/translated/api.js:261 -msgid "Error 503: Service Unavailable" -msgstr "" - -#: templates/js/translated/api.js:262 -msgid "The server is currently unavailable" -msgstr "" - -#: templates/js/translated/api.js:265 -msgid "Unhandled Error Code" -msgstr "" - -#: templates/js/translated/api.js:266 -msgid "Error code" -msgstr "" - -#: templates/js/translated/attachment.js:114 -msgid "All selected attachments will be deleted" -msgstr "" - -#: templates/js/translated/attachment.js:129 -msgid "Delete Attachments" -msgstr "" - -#: templates/js/translated/attachment.js:205 -msgid "Delete attachments" -msgstr "" - -#: templates/js/translated/attachment.js:260 -msgid "Attachment actions" -msgstr "" - -#: templates/js/translated/attachment.js:294 -msgid "No attachments found" -msgstr "" - -#: templates/js/translated/attachment.js:334 -msgid "Edit Attachment" -msgstr "" - -#: templates/js/translated/attachment.js:365 -msgid "Upload Date" -msgstr "" - -#: templates/js/translated/attachment.js:385 -msgid "Edit attachment" -msgstr "" - -#: templates/js/translated/attachment.js:393 -msgid "Delete attachment" -msgstr "" - -#: templates/js/translated/barcode.js:43 -msgid "Scan barcode data here using barcode scanner" -msgstr "" - -#: templates/js/translated/barcode.js:45 -msgid "Enter barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:59 -msgid "Scan barcode using connected webcam" -msgstr "" - -#: templates/js/translated/barcode.js:138 -msgid "Enter optional notes for stock transfer" -msgstr "" - -#: templates/js/translated/barcode.js:139 -msgid "Enter notes" -msgstr "" - -#: templates/js/translated/barcode.js:188 -msgid "Server error" -msgstr "" - -#: templates/js/translated/barcode.js:217 -msgid "Unknown response from server" -msgstr "" - -#: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 -msgid "Invalid server response" -msgstr "" - -#: templates/js/translated/barcode.js:403 -msgid "Scan barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 -msgid "Scan Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:489 -msgid "No URL in response" -msgstr "" - -#: templates/js/translated/barcode.js:529 -msgid "This will remove the link to the associated barcode" -msgstr "" - -#: templates/js/translated/barcode.js:535 -msgid "Unlink" -msgstr "" - -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 -msgid "Remove stock item" -msgstr "" - -#: templates/js/translated/barcode.js:641 -msgid "Scan Stock Items Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:643 -msgid "Scan stock item barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 -msgid "Check In" -msgstr "" - -#: templates/js/translated/barcode.js:678 -msgid "No barcode provided" -msgstr "" - -#: templates/js/translated/barcode.js:718 -msgid "Stock Item already scanned" -msgstr "" - -#: templates/js/translated/barcode.js:722 -msgid "Stock Item already in this location" -msgstr "" - -#: templates/js/translated/barcode.js:729 -msgid "Added stock item" -msgstr "" - -#: templates/js/translated/barcode.js:738 -msgid "Barcode does not match valid stock item" -msgstr "" - -#: templates/js/translated/barcode.js:757 -msgid "Scan Stock Container Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:759 -msgid "Scan stock container barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:793 -msgid "Barcode does not match valid stock location" -msgstr "" - -#: templates/js/translated/barcode.js:837 -msgid "Check Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 -msgid "Barcode does not match a valid location" -msgstr "" - -#: templates/js/translated/bom.js:78 -msgid "Create BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:132 -msgid "Display row data" -msgstr "" - -#: templates/js/translated/bom.js:188 -msgid "Row Data" -msgstr "" - -#: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 -#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 -#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 -msgid "Close" -msgstr "" - -#: templates/js/translated/bom.js:306 -msgid "Download BOM Template" -msgstr "" - -#: templates/js/translated/bom.js:351 -msgid "Multi Level BOM" -msgstr "" - -#: templates/js/translated/bom.js:352 -msgid "Include BOM data for subassemblies" -msgstr "" - -#: templates/js/translated/bom.js:357 -msgid "Levels" -msgstr "" - -#: templates/js/translated/bom.js:358 -msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" - -#: templates/js/translated/bom.js:365 -msgid "Include Alternative Parts" -msgstr "" - -#: templates/js/translated/bom.js:366 -msgid "Include alternative parts in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:371 -msgid "Include Parameter Data" -msgstr "" - -#: templates/js/translated/bom.js:372 -msgid "Include part parameter data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:377 -msgid "Include Stock Data" -msgstr "" - -#: templates/js/translated/bom.js:378 -msgid "Include part stock data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:383 -msgid "Include Manufacturer Data" -msgstr "" - -#: templates/js/translated/bom.js:384 -msgid "Include part manufacturer data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:389 -msgid "Include Supplier Data" -msgstr "" - -#: templates/js/translated/bom.js:390 -msgid "Include part supplier data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:395 -msgid "Include Pricing Data" -msgstr "" - -#: templates/js/translated/bom.js:396 -msgid "Include part pricing data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:591 -msgid "Remove substitute part" -msgstr "" - -#: templates/js/translated/bom.js:645 -msgid "Select and add a new substitute part using the input below" -msgstr "" - -#: templates/js/translated/bom.js:656 -msgid "Are you sure you wish to remove this substitute part link?" -msgstr "" - -#: templates/js/translated/bom.js:662 -msgid "Remove Substitute Part" -msgstr "" - -#: templates/js/translated/bom.js:701 -msgid "Add Substitute" -msgstr "" - -#: templates/js/translated/bom.js:702 -msgid "Edit BOM Item Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:764 -msgid "All selected BOM items will be deleted" -msgstr "" - -#: templates/js/translated/bom.js:780 -msgid "Delete selected BOM items?" -msgstr "" - -#: templates/js/translated/bom.js:826 -msgid "Delete items" -msgstr "" - -#: templates/js/translated/bom.js:936 -msgid "Load BOM for subassembly" -msgstr "" - -#: templates/js/translated/bom.js:946 -msgid "Substitutes Available" -msgstr "" - -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 -msgid "Variant stock allowed" -msgstr "" - -#: templates/js/translated/bom.js:1014 -msgid "Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:1139 -msgid "BOM pricing is complete" -msgstr "" - -#: templates/js/translated/bom.js:1144 -msgid "BOM pricing is incomplete" -msgstr "" - -#: templates/js/translated/bom.js:1151 -msgid "No pricing available" -msgstr "" - -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 -msgid "External stock" -msgstr "" - -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 -msgid "No Stock Available" -msgstr "" - -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 -msgid "Includes variant and substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 -msgid "Includes variant stock" -msgstr "" - -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 -msgid "Includes substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 -msgid "Consumable item" -msgstr "" - -#: templates/js/translated/bom.js:1285 -msgid "Validate BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1287 -msgid "This line has been validated" -msgstr "" - -#: templates/js/translated/bom.js:1289 -msgid "Edit substitute parts" -msgstr "" - -#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 -msgid "Edit BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1293 -msgid "Delete BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1313 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1397 -msgid "No BOM items found" -msgstr "" - -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 -msgid "Required Part" -msgstr "" - -#: templates/js/translated/bom.js:1683 -msgid "Inherited from parent BOM" -msgstr "" - -#: templates/js/translated/build.js:143 -msgid "Edit Build Order" -msgstr "" - -#: templates/js/translated/build.js:191 -msgid "Create Build Order" -msgstr "" - -#: templates/js/translated/build.js:223 -msgid "Cancel Build Order" -msgstr "" - -#: templates/js/translated/build.js:232 -msgid "Are you sure you wish to cancel this build?" -msgstr "" - -#: templates/js/translated/build.js:238 -msgid "Stock items have been allocated to this build order" -msgstr "" - -#: templates/js/translated/build.js:245 -msgid "There are incomplete outputs remaining for this build order" -msgstr "" - -#: templates/js/translated/build.js:297 -msgid "Build order is ready to be completed" -msgstr "" - -#: templates/js/translated/build.js:305 -msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "" - -#: templates/js/translated/build.js:310 -msgid "Build Order is incomplete" -msgstr "" - -#: templates/js/translated/build.js:328 -msgid "Complete Build Order" -msgstr "" - -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 -msgid "Next available serial number" -msgstr "" - -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 -msgid "Latest serial number" -msgstr "" - -#: templates/js/translated/build.js:380 -msgid "The Bill of Materials contains trackable parts" -msgstr "" - -#: templates/js/translated/build.js:381 -msgid "Build outputs must be generated individually" -msgstr "" - -#: templates/js/translated/build.js:389 -msgid "Trackable parts can have serial numbers specified" -msgstr "" - -#: templates/js/translated/build.js:390 -msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "" - -#: templates/js/translated/build.js:397 -msgid "Create Build Output" -msgstr "" - -#: templates/js/translated/build.js:428 -msgid "Allocate stock items to this build output" -msgstr "" - -#: templates/js/translated/build.js:436 -msgid "Deallocate stock from build output" -msgstr "" - -#: templates/js/translated/build.js:445 -msgid "Complete build output" -msgstr "" - -#: templates/js/translated/build.js:453 -msgid "Scrap build output" -msgstr "" - -#: templates/js/translated/build.js:460 -msgid "Delete build output" -msgstr "" - -#: templates/js/translated/build.js:480 -msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "" - -#: templates/js/translated/build.js:498 -msgid "Deallocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 -msgid "Select Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 -msgid "At least one build output must be selected" -msgstr "" - -#: templates/js/translated/build.js:599 -msgid "Selected build outputs will be marked as complete" -msgstr "" - -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 -msgid "Output" -msgstr "" - -#: templates/js/translated/build.js:630 -msgid "Complete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:727 -msgid "Selected build outputs will be marked as scrapped" -msgstr "" - -#: templates/js/translated/build.js:729 -msgid "Scrapped output are marked as rejected" -msgstr "" - -#: templates/js/translated/build.js:730 -msgid "Allocated stock items will no longer be available" -msgstr "" - -#: templates/js/translated/build.js:731 -msgid "The completion status of the build order will not be adjusted" -msgstr "" - -#: templates/js/translated/build.js:761 -msgid "Scrap Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:851 -msgid "Selected build outputs will be deleted" -msgstr "" - -#: templates/js/translated/build.js:853 -msgid "Build output data will be permanently deleted" -msgstr "" - -#: templates/js/translated/build.js:854 -msgid "Allocated stock items will be returned to stock" -msgstr "" - -#: templates/js/translated/build.js:872 -msgid "Delete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" -msgstr "" - -#: templates/js/translated/build.js:1178 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1200 -msgid "Complete outputs" -msgstr "" - -#: templates/js/translated/build.js:1218 -msgid "Scrap outputs" -msgstr "" - -#: templates/js/translated/build.js:1236 -msgid "Delete outputs" -msgstr "" - -#: templates/js/translated/build.js:1289 -msgid "build output" -msgstr "" - -#: templates/js/translated/build.js:1290 -msgid "build outputs" -msgstr "" - -#: templates/js/translated/build.js:1294 -msgid "Build output actions" -msgstr "" - -#: templates/js/translated/build.js:1470 -msgid "No active build outputs found" -msgstr "" - -#: templates/js/translated/build.js:1563 -msgid "Allocated Lines" -msgstr "" - -#: templates/js/translated/build.js:1577 -msgid "Required Tests" -msgstr "" - -#: templates/js/translated/build.js:1749 -#: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 -msgid "Select Parts" -msgstr "" - -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 -msgid "You must select at least one part to allocate" -msgstr "" - -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 -msgid "Specify stock allocation quantity" -msgstr "" - -#: templates/js/translated/build.js:1890 -msgid "All Parts Allocated" -msgstr "" - -#: templates/js/translated/build.js:1891 -msgid "All selected parts have been fully allocated" -msgstr "" - -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 -msgid "Select source location (leave blank to take from all locations)" -msgstr "" - -#: templates/js/translated/build.js:1933 -msgid "Allocate Stock Items to Build Order" -msgstr "" - -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 -msgid "No matching stock locations" -msgstr "" - -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 -msgid "No matching stock items" -msgstr "" - -#: templates/js/translated/build.js:2114 -msgid "Automatic Stock Allocation" -msgstr "" - -#: templates/js/translated/build.js:2115 -msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "" - -#: templates/js/translated/build.js:2117 -msgid "If a location is specified, stock will only be allocated from that location" -msgstr "" - -#: templates/js/translated/build.js:2118 -msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "" - -#: templates/js/translated/build.js:2119 -msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "" - -#: templates/js/translated/build.js:2149 -msgid "Allocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:2254 -msgid "No builds matching query" -msgstr "" - -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 -msgid "Select" -msgstr "" - -#: templates/js/translated/build.js:2303 -msgid "Build order is overdue" -msgstr "" - -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 -msgid "No user information" -msgstr "" - -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 -msgid "Edit stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 -msgid "Delete stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2577 -msgid "Edit Allocation" -msgstr "" - -#: templates/js/translated/build.js:2589 -msgid "Remove Allocation" -msgstr "" - -#: templates/js/translated/build.js:2628 -msgid "build line" -msgstr "" - -#: templates/js/translated/build.js:2629 -msgid "build lines" -msgstr "" - -#: templates/js/translated/build.js:2647 -msgid "No build lines found" -msgstr "" - -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 -msgid "Trackable part" -msgstr "" - -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 -msgid "Unit Quantity" -msgstr "" - -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 -msgid "Sufficient stock available" -msgstr "" - -#: templates/js/translated/build.js:2837 -msgid "Consumable Item" -msgstr "" - -#: templates/js/translated/build.js:2844 -msgid "Tracked item" -msgstr "" - -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 -msgid "Build stock" -msgstr "" - -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 -msgid "Order stock" -msgstr "" - -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 -msgid "Allocate stock" -msgstr "" - -#: templates/js/translated/build.js:2866 -msgid "Remove stock allocation" -msgstr "" - -#: templates/js/translated/company.js:98 -msgid "Add Manufacturer" -msgstr "" - -#: templates/js/translated/company.js:111 -#: templates/js/translated/company.js:213 -msgid "Add Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:132 -msgid "Edit Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:201 -#: templates/js/translated/purchase_order.js:93 -msgid "Add Supplier" -msgstr "" - -#: templates/js/translated/company.js:243 -#: templates/js/translated/purchase_order.js:318 -msgid "Add Supplier Part" -msgstr "" - -#: templates/js/translated/company.js:344 -msgid "All selected supplier parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:360 -msgid "Delete Supplier Parts" -msgstr "" - -#: templates/js/translated/company.js:466 -msgid "Add new Company" -msgstr "" - -#: templates/js/translated/company.js:546 -msgid "Parts Supplied" -msgstr "" - -#: templates/js/translated/company.js:555 -msgid "Parts Manufactured" -msgstr "" - -#: templates/js/translated/company.js:570 -msgid "No company information found" -msgstr "" - -#: templates/js/translated/company.js:619 -msgid "Create New Contact" -msgstr "" - -#: templates/js/translated/company.js:635 -#: templates/js/translated/company.js:758 -msgid "Edit Contact" -msgstr "" - -#: templates/js/translated/company.js:672 -msgid "All selected contacts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:678 -#: templates/js/translated/company.js:742 -msgid "Role" -msgstr "" - -#: templates/js/translated/company.js:686 -msgid "Delete Contacts" -msgstr "" - -#: templates/js/translated/company.js:717 -msgid "No contacts found" -msgstr "" - -#: templates/js/translated/company.js:730 -msgid "Phone Number" -msgstr "" - -#: templates/js/translated/company.js:736 -msgid "Email Address" -msgstr "" - -#: templates/js/translated/company.js:762 -msgid "Delete Contact" -msgstr "" - -#: templates/js/translated/company.js:859 -msgid "Create New Address" -msgstr "" - -#: templates/js/translated/company.js:874 -#: templates/js/translated/company.js:1035 -msgid "Edit Address" -msgstr "" - -#: templates/js/translated/company.js:909 -msgid "All selected addresses will be deleted" -msgstr "" - -#: templates/js/translated/company.js:923 -msgid "Delete Addresses" -msgstr "" - -#: templates/js/translated/company.js:950 -msgid "No addresses found" -msgstr "" - -#: templates/js/translated/company.js:989 -msgid "Postal city" -msgstr "" - -#: templates/js/translated/company.js:995 -msgid "State/province" -msgstr "" - -#: templates/js/translated/company.js:1007 -msgid "Courier notes" -msgstr "" - -#: templates/js/translated/company.js:1013 -msgid "Internal notes" -msgstr "" - -#: templates/js/translated/company.js:1039 -msgid "Delete Address" -msgstr "" - -#: templates/js/translated/company.js:1112 -msgid "All selected manufacturer parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1127 -msgid "Delete Manufacturer Parts" -msgstr "" - -#: templates/js/translated/company.js:1161 -msgid "All selected parameters will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1175 -msgid "Delete Parameters" -msgstr "" - -#: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 -msgid "Order parts" -msgstr "" - -#: templates/js/translated/company.js:1208 -msgid "Delete manufacturer parts" -msgstr "" - -#: templates/js/translated/company.js:1240 -msgid "Manufacturer part actions" -msgstr "" - -#: templates/js/translated/company.js:1259 -msgid "No manufacturer parts found" -msgstr "" - -#: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 -msgid "Template part" -msgstr "" - -#: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 -msgid "Assembled part" -msgstr "" - -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 -msgid "No parameters found" -msgstr "" - -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 -msgid "Edit parameter" -msgstr "" - -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 -msgid "Delete parameter" -msgstr "" - -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 -msgid "Edit Parameter" -msgstr "" - -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 -msgid "Delete Parameter" -msgstr "" - -#: templates/js/translated/company.js:1496 -msgid "Delete supplier parts" -msgstr "" - -#: templates/js/translated/company.js:1546 -msgid "No supplier parts found" -msgstr "" - -#: templates/js/translated/company.js:1664 -msgid "Base Units" -msgstr "" - -#: templates/js/translated/company.js:1694 -msgid "Availability" -msgstr "" - -#: templates/js/translated/company.js:1725 -msgid "Edit supplier part" -msgstr "" - -#: templates/js/translated/company.js:1726 -msgid "Delete supplier part" -msgstr "" - -#: templates/js/translated/company.js:1779 -#: templates/js/translated/pricing.js:694 -msgid "Delete Price Break" -msgstr "" - -#: templates/js/translated/company.js:1789 -#: templates/js/translated/pricing.js:712 -msgid "Edit Price Break" -msgstr "" - -#: templates/js/translated/company.js:1804 -msgid "No price break information found" -msgstr "" - -#: templates/js/translated/company.js:1833 -msgid "Last updated" -msgstr "" - -#: templates/js/translated/company.js:1840 -msgid "Edit price break" -msgstr "" - -#: templates/js/translated/company.js:1841 -msgid "Delete price break" -msgstr "" - -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 -msgid "true" -msgstr "" - -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 -msgid "false" -msgstr "" - -#: templates/js/translated/filters.js:217 -msgid "Select filter" -msgstr "" - -#: templates/js/translated/filters.js:440 -msgid "Print Labels" -msgstr "" - -#: templates/js/translated/filters.js:444 -msgid "Print Reports" -msgstr "" - -#: templates/js/translated/filters.js:456 -msgid "Download table data" -msgstr "" - -#: templates/js/translated/filters.js:463 -msgid "Reload table data" -msgstr "" - -#: templates/js/translated/filters.js:472 -msgid "Add new filter" -msgstr "" - -#: templates/js/translated/filters.js:480 -msgid "Clear all filters" -msgstr "" - -#: templates/js/translated/filters.js:580 -msgid "Create filter" -msgstr "" - -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 -msgid "Action Prohibited" -msgstr "" - -#: templates/js/translated/forms.js:381 -msgid "Create operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:396 -msgid "Update operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:410 -msgid "Delete operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:424 -msgid "View operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:801 -msgid "Keep this form open" -msgstr "" - -#: templates/js/translated/forms.js:904 -msgid "Enter a valid number" -msgstr "" - -#: templates/js/translated/forms.js:1478 templates/modals.html:19 -#: templates/modals.html:43 -msgid "Form errors exist" -msgstr "" - -#: templates/js/translated/forms.js:2008 -msgid "No results found" -msgstr "" - -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 -msgid "Searching" -msgstr "" - -#: templates/js/translated/forms.js:2532 -msgid "Clear input" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "File Column" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "Field Name" -msgstr "" - -#: templates/js/translated/forms.js:3146 -msgid "Select Columns" -msgstr "" - -#: templates/js/translated/helpers.js:80 -msgid "YES" -msgstr "" - -#: templates/js/translated/helpers.js:83 -msgid "NO" -msgstr "" - -#: templates/js/translated/helpers.js:96 -msgid "True" -msgstr "" - -#: templates/js/translated/helpers.js:97 -msgid "False" -msgstr "" - -#: templates/js/translated/index.js:104 -msgid "No parts required for builds" -msgstr "" - -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 -msgid "Select Items" -msgstr "" - -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 -msgid "No items selected for printing" -msgstr "" - -#: templates/js/translated/label.js:143 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 -msgid "Cancel" -msgstr "" - -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 -#: templates/modals.html:28 templates/modals.html:51 -msgid "Submit" -msgstr "" - -#: templates/js/translated/modals.js:157 -msgid "Form Title" -msgstr "" - -#: templates/js/translated/modals.js:446 -msgid "Waiting for server..." -msgstr "" - -#: templates/js/translated/modals.js:597 -msgid "Show Error Information" -msgstr "" - -#: templates/js/translated/modals.js:687 -msgid "Accept" -msgstr "" - -#: templates/js/translated/modals.js:745 -msgid "Loading Data" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Invalid response from server" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Form data missing from server response" -msgstr "" - -#: templates/js/translated/modals.js:1028 -msgid "Error posting form data" -msgstr "" - -#: templates/js/translated/modals.js:1125 -msgid "JSON response missing form data" -msgstr "" - -#: templates/js/translated/modals.js:1140 -msgid "Error 400: Bad Request" -msgstr "" - -#: templates/js/translated/modals.js:1141 -msgid "Server returned error code 400" -msgstr "" - -#: templates/js/translated/modals.js:1164 -msgid "Error requesting form data" -msgstr "" - -#: templates/js/translated/news.js:33 -msgid "No news found" -msgstr "" - -#: templates/js/translated/news.js:38 -#: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 -msgid "ID" -msgstr "" - -#: templates/js/translated/notification.js:52 -msgid "Age" -msgstr "" - -#: templates/js/translated/notification.js:65 -msgid "Notification" -msgstr "" - -#: templates/js/translated/notification.js:224 -msgid "Mark as unread" -msgstr "" - -#: templates/js/translated/notification.js:228 -msgid "Mark as read" -msgstr "" - -#: templates/js/translated/notification.js:254 -msgid "No unread notifications" -msgstr "" - -#: templates/js/translated/notification.js:296 templates/notifications.html:12 -msgid "Notifications will load here" -msgstr "" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 -msgid "Add Extra Line Item" -msgstr "" - -#: templates/js/translated/order.js:151 -msgid "Export Order" -msgstr "" - -#: templates/js/translated/order.js:266 -msgid "Duplicate Line" -msgstr "" - -#: templates/js/translated/order.js:280 -msgid "Edit Line" -msgstr "" - -#: templates/js/translated/order.js:293 -msgid "Delete Line" -msgstr "" - -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:394 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:395 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/part.js:91 -msgid "Part Attributes" -msgstr "" - -#: templates/js/translated/part.js:95 -msgid "Part Creation Options" -msgstr "" - -#: templates/js/translated/part.js:99 -msgid "Part Duplication Options" -msgstr "" - -#: templates/js/translated/part.js:122 -msgid "Add Part Category" -msgstr "" - -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 -msgid "Icon (optional) - Explore all available icons on" -msgstr "" - -#: templates/js/translated/part.js:355 -msgid "Create Part Category" -msgstr "" - -#: templates/js/translated/part.js:358 -msgid "Create new category after this one" -msgstr "" - -#: templates/js/translated/part.js:359 -msgid "Part category created" -msgstr "" - -#: templates/js/translated/part.js:373 -msgid "Edit Part Category" -msgstr "" - -#: templates/js/translated/part.js:386 -msgid "Are you sure you want to delete this part category?" -msgstr "" - -#: templates/js/translated/part.js:391 -msgid "Move to parent category" -msgstr "" - -#: templates/js/translated/part.js:400 -msgid "Delete Part Category" -msgstr "" - -#: templates/js/translated/part.js:404 -msgid "Action for parts in this category" -msgstr "" - -#: templates/js/translated/part.js:409 -msgid "Action for child categories" -msgstr "" - -#: templates/js/translated/part.js:433 -msgid "Create Part" -msgstr "" - -#: templates/js/translated/part.js:435 -msgid "Create another part after this one" -msgstr "" - -#: templates/js/translated/part.js:436 -msgid "Part created successfully" -msgstr "" - -#: templates/js/translated/part.js:464 -msgid "Edit Part" -msgstr "" - -#: templates/js/translated/part.js:466 -msgid "Part edited" -msgstr "" - -#: templates/js/translated/part.js:477 -msgid "Create Part Variant" -msgstr "" - -#: templates/js/translated/part.js:534 -msgid "Active Part" -msgstr "" - -#: templates/js/translated/part.js:535 -msgid "Part cannot be deleted as it is currently active" -msgstr "" - -#: templates/js/translated/part.js:549 -msgid "Deleting this part cannot be reversed" -msgstr "" - -#: templates/js/translated/part.js:551 -msgid "Any stock items for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:552 -msgid "This part will be removed from any Bills of Material" -msgstr "" - -#: templates/js/translated/part.js:553 -msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:560 -msgid "Delete Part" -msgstr "" - -#: templates/js/translated/part.js:596 -msgid "You are subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:598 -msgid "You have subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:603 -msgid "Subscribe to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:605 -msgid "You have unsubscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:622 -msgid "Validating the BOM will mark each line item as valid" -msgstr "" - -#: templates/js/translated/part.js:632 -msgid "Validate Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:635 -msgid "Validated Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:660 -msgid "Copy Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 -msgid "Low stock" -msgstr "" - -#: templates/js/translated/part.js:691 -msgid "No stock available" -msgstr "" - -#: templates/js/translated/part.js:751 -msgid "Demand" -msgstr "" - -#: templates/js/translated/part.js:774 -msgid "Unit" -msgstr "" - -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 -msgid "Virtual part" -msgstr "" - -#: templates/js/translated/part.js:809 -msgid "Subscribed part" -msgstr "" - -#: templates/js/translated/part.js:813 -msgid "Salable part" -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Schedule generation of a new stocktake report." -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Once complete, the stocktake report will be available for download." -msgstr "" - -#: templates/js/translated/part.js:904 -msgid "Generate Stocktake Report" -msgstr "" - -#: templates/js/translated/part.js:908 -msgid "Stocktake report scheduled" -msgstr "" - -#: templates/js/translated/part.js:1057 -msgid "No stocktake information available" -msgstr "" - -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 -msgid "Edit Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 -msgid "Delete Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1288 -msgid "No variants found" -msgstr "" - -#: templates/js/translated/part.js:1606 -msgid "No part parameter templates found" -msgstr "" - -#: templates/js/translated/part.js:1669 -msgid "Edit Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1681 -msgid "Any parameters which reference this template will also be deleted" -msgstr "" - -#: templates/js/translated/part.js:1689 -msgid "Delete Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/part.js:1976 -msgid "Delete part relationship" -msgstr "" - -#: templates/js/translated/part.js:1998 -msgid "Delete Part Relationship" -msgstr "" - -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 -msgid "No parts found" -msgstr "" - -#: templates/js/translated/part.js:2207 -msgid "Set the part category for the selected parts" -msgstr "" - -#: templates/js/translated/part.js:2212 -msgid "Set Part Category" -msgstr "" - -#: templates/js/translated/part.js:2241 -msgid "Set category" -msgstr "" - -#: templates/js/translated/part.js:2293 -msgid "part" -msgstr "" - -#: templates/js/translated/part.js:2294 -msgid "parts" -msgstr "" - -#: templates/js/translated/part.js:2390 -msgid "No category" -msgstr "" - -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 -msgid "Display as list" -msgstr "" - -#: templates/js/translated/part.js:2566 -msgid "Display as grid" -msgstr "" - -#: templates/js/translated/part.js:2664 -msgid "No subcategories found" -msgstr "" - -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 -msgid "Display as tree" -msgstr "" - -#: templates/js/translated/part.js:2780 -msgid "Load Subcategories" -msgstr "" - -#: templates/js/translated/part.js:2795 -msgid "Subscribed category" -msgstr "" - -#: templates/js/translated/part.js:2883 -msgid "No test templates matching query" -msgstr "" - -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 -msgid "results" -msgstr "" - -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" - -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "" - -#: templates/js/translated/part.js:2960 -msgid "This test is defined for a parent part" -msgstr "" - -#: templates/js/translated/part.js:2976 -msgid "Edit Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:2990 -msgid "Delete Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 -msgid "No date specified" -msgstr "" - -#: templates/js/translated/part.js:3072 -msgid "Specified date is in the past" -msgstr "" - -#: templates/js/translated/part.js:3078 -msgid "Speculative" -msgstr "" - -#: templates/js/translated/part.js:3128 -msgid "No scheduling information available for this part" -msgstr "" - -#: templates/js/translated/part.js:3134 -msgid "Error fetching scheduling information for this part" -msgstr "" - -#: templates/js/translated/part.js:3230 -msgid "Scheduled Stock Quantities" -msgstr "" - -#: templates/js/translated/part.js:3246 -msgid "Maximum Quantity" -msgstr "" - -#: templates/js/translated/part.js:3291 -msgid "Minimum Stock Level" -msgstr "" - -#: templates/js/translated/plugin.js:46 -msgid "No plugins found" -msgstr "" - -#: templates/js/translated/plugin.js:58 -msgid "This plugin is no longer installed" -msgstr "" - -#: templates/js/translated/plugin.js:60 -msgid "This plugin is active" -msgstr "" - -#: templates/js/translated/plugin.js:62 -msgid "This plugin is installed but not active" -msgstr "" - -#: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 -msgid "Disable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 -msgid "Enable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:158 -msgid "The Plugin was installed" -msgstr "" - -#: templates/js/translated/plugin.js:177 -msgid "Are you sure you want to enable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:181 -msgid "Are you sure you want to disable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Enable" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Disable" -msgstr "" - -#: templates/js/translated/plugin.js:203 -msgid "Plugin updated" -msgstr "" - -#: templates/js/translated/pricing.js:159 -msgid "Error fetching currency data" -msgstr "" - -#: templates/js/translated/pricing.js:321 -msgid "No BOM data available" -msgstr "" - -#: templates/js/translated/pricing.js:463 -msgid "No supplier pricing data available" -msgstr "" - -#: templates/js/translated/pricing.js:572 -msgid "No price break data available" -msgstr "" - -#: templates/js/translated/pricing.js:755 -msgid "No purchase history data available" -msgstr "" - -#: templates/js/translated/pricing.js:791 -msgid "Purchase Price History" -msgstr "" - -#: templates/js/translated/pricing.js:894 -msgid "No sales history data available" -msgstr "" - -#: templates/js/translated/pricing.js:916 -msgid "Sale Price History" -msgstr "" - -#: templates/js/translated/pricing.js:1005 -msgid "No variant data available" -msgstr "" - -#: templates/js/translated/pricing.js:1045 -msgid "Variant Part" -msgstr "" - -#: templates/js/translated/purchase_order.js:169 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/purchase_order.js:176 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:177 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:184 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/purchase_order.js:185 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:206 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:223 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/purchase_order.js:431 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:448 -#: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/purchase_order.js:454 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/purchase_order.js:459 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/purchase_order.js:460 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:483 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:488 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/purchase_order.js:494 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/purchase_order.js:515 -#: templates/js/translated/return_order.js:164 -msgid "After placing this order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:520 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:612 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:637 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/purchase_order.js:646 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/purchase_order.js:664 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:705 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:755 -msgid "Merge" -msgstr "" - -#: templates/js/translated/purchase_order.js:859 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/purchase_order.js:878 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:1104 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/purchase_order.js:1115 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/purchase_order.js:1237 -msgid "Add barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1238 -msgid "Remove barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1241 -msgid "Specify location" -msgstr "" - -#: templates/js/translated/purchase_order.js:1249 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 -msgid "Serials" -msgstr "" - -#: templates/js/translated/purchase_order.js:1368 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1370 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1396 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1464 -msgid "Scan Item Barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1465 -msgid "Scan barcode on incoming item (must not match any existing stock items)" -msgstr "" - -#: templates/js/translated/purchase_order.js:1479 -msgid "Invalid barcode data" -msgstr "" - -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/purchase_order.js:1913 -msgid "All selected Line items will be deleted" -msgstr "" - -#: templates/js/translated/purchase_order.js:1931 -msgid "Delete selected Line items?" -msgstr "" - -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/report.js:49 -msgid "Print Report" -msgstr "" - -#: templates/js/translated/report.js:68 -msgid "Report print successful" -msgstr "" - -#: templates/js/translated/report.js:73 -msgid "Report printing failed" -msgstr "" - -#: templates/js/translated/return_order.js:60 -#: templates/js/translated/sales_order.js:86 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/return_order.js:134 -msgid "Create Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:149 -msgid "Edit Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:169 -msgid "Issue Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:186 -msgid "Are you sure you wish to cancel this Return Order?" -msgstr "" - -#: templates/js/translated/return_order.js:193 -msgid "Cancel Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:218 -msgid "Complete Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:265 -msgid "No return orders found" -msgstr "" - -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 -msgid "Invalid Customer" -msgstr "" - -#: templates/js/translated/return_order.js:560 -msgid "Receive Return Order Items" -msgstr "" - -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/return_order.js:796 -msgid "Mark item as received" -msgstr "" - -#: templates/js/translated/sales_order.js:161 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:176 -msgid "Edit Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:291 -msgid "No stock items have been allocated to this shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:296 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:336 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:360 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:416 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:420 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:430 -msgid "Complete Shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:452 -msgid "Skip" -msgstr "" - -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:513 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 -msgid "Issue this Sales Order?" -msgstr "" - -#: templates/js/translated/sales_order.js:577 -msgid "Issue Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:596 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:601 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:655 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:764 -msgid "No sales orders found" -msgstr "" - -#: templates/js/translated/sales_order.js:944 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:947 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:952 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:969 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:984 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1017 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:1042 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:1084 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/sales_order.js:1088 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/sales_order.js:1255 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1306 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1307 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:1513 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/sales_order.js:1605 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1619 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/sales_order.js:1620 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/sales_order.js:2044 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2048 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/sales_order.js:2071 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:2074 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/sales_order.js:2145 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2253 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/search.js:270 -msgid "No results" -msgstr "" - -#: templates/js/translated/search.js:292 templates/search.html:25 -msgid "Enter search query" -msgstr "" - -#: templates/js/translated/search.js:342 -msgid "result" -msgstr "" - -#: templates/js/translated/search.js:352 -msgid "Minimize results" -msgstr "" - -#: templates/js/translated/search.js:355 -msgid "Remove results" -msgstr "" - -#: templates/js/translated/stock.js:106 -msgid "Serialize Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:137 -msgid "Confirm Stock Serialization" -msgstr "" - -#: templates/js/translated/stock.js:173 -msgid "Add Location type" -msgstr "" - -#: templates/js/translated/stock.js:209 -msgid "Edit Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:224 -msgid "New Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:226 -msgid "Create another location after this one" -msgstr "" - -#: templates/js/translated/stock.js:227 -msgid "Stock location created" -msgstr "" - -#: templates/js/translated/stock.js:241 -msgid "Are you sure you want to delete this stock location?" -msgstr "" - -#: templates/js/translated/stock.js:248 -msgid "Move to parent stock location" -msgstr "" - -#: templates/js/translated/stock.js:257 -msgid "Delete Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:261 -msgid "Action for stock items in this stock location" -msgstr "" - -#: templates/js/translated/stock.js:266 -msgid "Action for sub-locations" -msgstr "" - -#: templates/js/translated/stock.js:320 -msgid "This part cannot be serialized" -msgstr "" - -#: templates/js/translated/stock.js:356 -msgid "Add given quantity as packs instead of individual items" -msgstr "" - -#: templates/js/translated/stock.js:368 -msgid "Enter initial quantity for this stock item" -msgstr "" - -#: templates/js/translated/stock.js:374 -msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" - -#: templates/js/translated/stock.js:445 -msgid "Stock item duplicated" -msgstr "" - -#: templates/js/translated/stock.js:465 -msgid "Duplicate Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:481 -msgid "Are you sure you want to delete this stock item?" -msgstr "" - -#: templates/js/translated/stock.js:486 -msgid "Delete Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:507 -msgid "Edit Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:549 -msgid "Create another item after this one" -msgstr "" - -#: templates/js/translated/stock.js:561 -msgid "Created new stock item" -msgstr "" - -#: templates/js/translated/stock.js:574 -msgid "Created multiple stock items" -msgstr "" - -#: templates/js/translated/stock.js:599 -msgid "Find Serial Number" -msgstr "" - -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 -msgid "Enter serial number" -msgstr "" - -#: templates/js/translated/stock.js:620 -msgid "Enter a serial number" -msgstr "" - -#: templates/js/translated/stock.js:640 -msgid "No matching serial number" -msgstr "" - -#: templates/js/translated/stock.js:649 -msgid "More than one matching result found" -msgstr "" - -#: templates/js/translated/stock.js:757 -msgid "Confirm stock assignment" -msgstr "" - -#: templates/js/translated/stock.js:758 -msgid "Assign Stock to Customer" -msgstr "" - -#: templates/js/translated/stock.js:835 -msgid "Warning: Merge operation cannot be reversed" -msgstr "" - -#: templates/js/translated/stock.js:836 -msgid "Some information will be lost when merging stock items" -msgstr "" - -#: templates/js/translated/stock.js:838 -msgid "Stock transaction history will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:839 -msgid "Supplier part information will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:933 -msgid "Confirm stock item merge" -msgstr "" - -#: templates/js/translated/stock.js:934 -msgid "Merge Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1031 -msgid "Transfer Stock" -msgstr "" - -#: templates/js/translated/stock.js:1032 -msgid "Move" -msgstr "" - -#: templates/js/translated/stock.js:1038 -msgid "Count Stock" -msgstr "" - -#: templates/js/translated/stock.js:1039 -msgid "Count" -msgstr "" - -#: templates/js/translated/stock.js:1043 -msgid "Remove Stock" -msgstr "" - -#: templates/js/translated/stock.js:1044 -msgid "Take" -msgstr "" - -#: templates/js/translated/stock.js:1048 -msgid "Add Stock" -msgstr "" - -#: templates/js/translated/stock.js:1049 users/models.py:396 -msgid "Add" -msgstr "" - -#: templates/js/translated/stock.js:1053 -msgid "Delete Stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Specify stock quantity" -msgstr "" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1257 -msgid "Select at least one available stock item" -msgstr "" - -#: templates/js/translated/stock.js:1303 -msgid "Confirm stock adjustment" -msgstr "" - -#: templates/js/translated/stock.js:1448 -msgid "PASS" -msgstr "" - -#: templates/js/translated/stock.js:1450 -msgid "FAIL" -msgstr "" - -#: templates/js/translated/stock.js:1455 -msgid "NO RESULT" -msgstr "" - -#: templates/js/translated/stock.js:1535 -msgid "Pass test" -msgstr "" - -#: templates/js/translated/stock.js:1538 -msgid "Add test result" -msgstr "" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 -msgid "No test results found" -msgstr "" - -#: templates/js/translated/stock.js:1625 -msgid "Test Date" -msgstr "" - -#: templates/js/translated/stock.js:1638 -msgid "Test started" -msgstr "" - -#: templates/js/translated/stock.js:1647 -msgid "Test finished" -msgstr "" - -#: templates/js/translated/stock.js:1801 -msgid "Edit Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1821 -msgid "Delete Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1853 -msgid "In production" -msgstr "" - -#: templates/js/translated/stock.js:1857 -msgid "Installed in Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:1865 -msgid "Assigned to Sales Order" -msgstr "" - -#: templates/js/translated/stock.js:1871 -msgid "No stock location set" -msgstr "" - -#: templates/js/translated/stock.js:1927 -msgid "Change stock status" -msgstr "" - -#: templates/js/translated/stock.js:1936 -msgid "Merge stock" -msgstr "" - -#: templates/js/translated/stock.js:1985 -msgid "Delete stock" -msgstr "" - -#: templates/js/translated/stock.js:2038 -msgid "stock items" -msgstr "" - -#: templates/js/translated/stock.js:2043 -msgid "Scan to location" -msgstr "" - -#: templates/js/translated/stock.js:2054 -msgid "Stock Actions" -msgstr "" - -#: templates/js/translated/stock.js:2098 -msgid "Load installed items" -msgstr "" - -#: templates/js/translated/stock.js:2176 -msgid "Stock item is in production" -msgstr "" - -#: templates/js/translated/stock.js:2181 -msgid "Stock item assigned to sales order" -msgstr "" - -#: templates/js/translated/stock.js:2184 -msgid "Stock item assigned to customer" -msgstr "" - -#: templates/js/translated/stock.js:2187 -msgid "Serialized stock item has been allocated" -msgstr "" - -#: templates/js/translated/stock.js:2189 -msgid "Stock item has been fully allocated" -msgstr "" - -#: templates/js/translated/stock.js:2191 -msgid "Stock item has been partially allocated" -msgstr "" - -#: templates/js/translated/stock.js:2194 -msgid "Stock item has been installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:2196 -msgid "Stock item has been consumed by a build order" -msgstr "" - -#: templates/js/translated/stock.js:2200 -msgid "Stock item has expired" -msgstr "" - -#: templates/js/translated/stock.js:2202 -msgid "Stock item will expire soon" -msgstr "" - -#: templates/js/translated/stock.js:2207 -msgid "Stock item has been rejected" -msgstr "" - -#: templates/js/translated/stock.js:2209 -msgid "Stock item is lost" -msgstr "" - -#: templates/js/translated/stock.js:2211 -msgid "Stock item is destroyed" -msgstr "" - -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 -msgid "Depleted" -msgstr "" - -#: templates/js/translated/stock.js:2380 -msgid "Supplier part not specified" -msgstr "" - -#: templates/js/translated/stock.js:2427 -msgid "Stock Value" -msgstr "" - -#: templates/js/translated/stock.js:2555 -msgid "No stock items matching query" -msgstr "" - -#: templates/js/translated/stock.js:2658 -msgid "stock locations" -msgstr "" - -#: templates/js/translated/stock.js:2813 -msgid "Load Sublocations" -msgstr "" - -#: templates/js/translated/stock.js:2930 -msgid "Details" -msgstr "" - -#: templates/js/translated/stock.js:2934 -msgid "No changes" -msgstr "" - -#: templates/js/translated/stock.js:2946 -msgid "Part information unavailable" -msgstr "" - -#: templates/js/translated/stock.js:2968 -msgid "Location no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:2985 -msgid "Build order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3000 -msgid "Purchase order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3017 -msgid "Sales Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3034 -msgid "Return Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3053 -msgid "Customer no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3071 -msgid "Stock item no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3089 -msgid "Added" -msgstr "" - -#: templates/js/translated/stock.js:3097 -msgid "Removed" -msgstr "" - -#: templates/js/translated/stock.js:3169 -msgid "No installed items" -msgstr "" - -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 -msgid "Uninstall Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3280 -msgid "Select stock item to uninstall" -msgstr "" - -#: templates/js/translated/stock.js:3301 -msgid "Install another stock item into this item" -msgstr "" - -#: templates/js/translated/stock.js:3302 -msgid "Stock items can only be installed if they meet the following criteria" -msgstr "" - -#: templates/js/translated/stock.js:3304 -msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3305 -msgid "The Stock Item is currently available in stock" -msgstr "" - -#: templates/js/translated/stock.js:3306 -msgid "The Stock Item is not already installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:3307 -msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "" - -#: templates/js/translated/stock.js:3320 -msgid "Select part to install" -msgstr "" - -#: templates/js/translated/stock.js:3383 -msgid "Select one or more stock items" -msgstr "" - -#: templates/js/translated/stock.js:3396 -msgid "Selected stock items" -msgstr "" - -#: templates/js/translated/stock.js:3400 -msgid "Change Stock Status" -msgstr "" - -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 -msgid "Has project code" -msgstr "" - -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 -msgid "Order status" -msgstr "" - -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:165 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:169 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:173 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:189 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Has location type" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:333 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:338 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:342 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:343 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:348 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:353 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:358 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:363 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:368 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:372 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:373 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:378 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:383 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:407 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:416 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:421 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:422 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:426 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:430 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:443 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:449 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:463 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:467 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:715 -msgid "Include parts in subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:720 -msgid "Show active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 -msgid "Available stock" -msgstr "" - -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 -msgid "Has Units" -msgstr "" - -#: templates/js/translated/table_filters.js:742 -msgid "Part has defined units" -msgstr "" - -#: templates/js/translated/table_filters.js:746 -msgid "Has IPN" -msgstr "" - -#: templates/js/translated/table_filters.js:747 -msgid "Part has internal part number" -msgstr "" - -#: templates/js/translated/table_filters.js:751 -msgid "In stock" -msgstr "" - -#: templates/js/translated/table_filters.js:759 -msgid "Purchasable" -msgstr "" - -#: templates/js/translated/table_filters.js:771 -msgid "Has stocktake entries" -msgstr "" - -#: templates/js/translated/table_filters.js:841 -msgid "Has Choices" -msgstr "" - -#: templates/js/translated/tables.js:92 -msgid "Display calendar view" -msgstr "" - -#: templates/js/translated/tables.js:102 -msgid "Display list view" -msgstr "" - -#: templates/js/translated/tables.js:112 -msgid "Display tree view" -msgstr "" - -#: templates/js/translated/tables.js:130 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/tables.js:136 -msgid "Collapse all rows" -msgstr "" - -#: templates/js/translated/tables.js:186 -msgid "Export Table Data" -msgstr "" - -#: templates/js/translated/tables.js:190 -msgid "Select File Format" -msgstr "" - -#: templates/js/translated/tables.js:529 -msgid "Loading data" -msgstr "" - -#: templates/js/translated/tables.js:532 -msgid "rows per page" -msgstr "" - -#: templates/js/translated/tables.js:537 -msgid "Showing all rows" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "Showing" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "to" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "of" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "rows" -msgstr "" - -#: templates/js/translated/tables.js:546 -msgid "No matching results" -msgstr "" - -#: templates/js/translated/tables.js:549 -msgid "Hide/Show pagination" -msgstr "" - -#: templates/js/translated/tables.js:555 -msgid "Toggle" -msgstr "" - -#: templates/js/translated/tables.js:561 -msgid "All" -msgstr "" - -#: templates/navbar.html:45 -msgid "Buy" -msgstr "" - -#: templates/navbar.html:57 -msgid "Sell" -msgstr "" - -#: templates/navbar.html:121 -msgid "Show Notifications" -msgstr "" - -#: templates/navbar.html:124 -msgid "New Notifications" -msgstr "" - -#: templates/navbar.html:144 users/models.py:201 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:148 -msgid "Logout" -msgstr "" - -#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 -msgid "Save" -msgstr "" - -#: templates/notifications.html:9 -msgid "Show all notifications and history" -msgstr "" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - -#: templates/qr_code.html:11 -msgid "QR data not provided" -msgstr "" - -#: templates/registration/logged_out.html:7 -msgid "You were logged out successfully." -msgstr "" - -#: templates/registration/logged_out.html:9 -msgid "Log in again" -msgstr "" - -#: templates/search.html:9 -msgid "Show full search results" -msgstr "" - -#: templates/search.html:12 -msgid "Clear search" -msgstr "" - -#: templates/search.html:15 -msgid "Close search menu" -msgstr "Sulgege otsingumenüü" - -#: templates/socialaccount/authentication_error.html:5 -msgid "Social Network Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:8 -msgid "Account Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:11 -msgid "An error occurred while attempting to login via your social network account." -msgstr "" - -#: templates/socialaccount/authentication_error.html:13 -msgid "Contact your system administrator for further information." -msgstr "" - -#: templates/socialaccount/login.html:13 -#, python-format -msgid "Connect %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:15 -#, python-format -msgid "You are about to connect a new third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:17 -#, python-format -msgid "Sign In Via %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:19 -#, python-format -msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:24 -msgid "Continue" -msgstr "" - -#: templates/socialaccount/login.html:29 -msgid "Invalid SSO Provider" -msgstr "" - -#: templates/socialaccount/login.html:31 -msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "" - -#: templates/socialaccount/signup.html:11 -#, python-format -msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" - -#: templates/socialaccount/signup.html:13 -msgid "As a final step, please complete the following form" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:26 -msgid "Provider has not been configured" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:35 -msgid "No SSO providers have been configured" -msgstr "" - -#: templates/stats.html:13 -msgid "Instance Name" -msgstr "" - -#: templates/stats.html:18 -msgid "Database" -msgstr "" - -#: templates/stats.html:26 -msgid "Server is running in debug mode" -msgstr "" - -#: templates/stats.html:33 -msgid "Docker Mode" -msgstr "" - -#: templates/stats.html:34 -msgid "Server is deployed using docker" -msgstr "" - -#: templates/stats.html:39 -msgid "Plugin Support" -msgstr "" - -#: templates/stats.html:43 -msgid "Plugin support enabled" -msgstr "" - -#: templates/stats.html:45 -msgid "Plugin support disabled" -msgstr "" - -#: templates/stats.html:52 -msgid "Server status" -msgstr "" - -#: templates/stats.html:55 -msgid "Healthy" -msgstr "" - -#: templates/stats.html:57 -msgid "Issues detected" -msgstr "" - -#: templates/stats.html:64 -msgid "Background Worker" -msgstr "" - -#: templates/stats.html:67 -msgid "Background worker not running" -msgstr "" - -#: templates/stats.html:75 -msgid "Email Settings" -msgstr "" - -#: templates/stats.html:78 -msgid "Email settings not configured" -msgstr "" - -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - -#: templates/yesnolabel.html:4 -msgid "Yes" -msgstr "" - -#: templates/yesnolabel.html:6 -msgid "No" -msgstr "" - -#: users/admin.py:104 -msgid "Users" -msgstr "" - -#: users/admin.py:105 -msgid "Select which users are assigned to this group" -msgstr "" - -#: users/admin.py:249 -msgid "The following users are members of multiple groups" -msgstr "" - -#: users/admin.py:283 -msgid "Personal info" -msgstr "" - -#: users/admin.py:285 -msgid "Permissions" -msgstr "" - -#: users/admin.py:288 -msgid "Important dates" -msgstr "" - -#: users/authentication.py:29 users/models.py:138 -msgid "Token has been revoked" -msgstr "" - -#: users/authentication.py:32 -msgid "Token has expired" -msgstr "" - -#: users/models.py:81 -msgid "API Token" -msgstr "" - -#: users/models.py:82 -msgid "API Tokens" -msgstr "" - -#: users/models.py:118 -msgid "Token Name" -msgstr "" - -#: users/models.py:119 -msgid "Custom token name" -msgstr "" - -#: users/models.py:125 -msgid "Token expiry date" -msgstr "" - -#: users/models.py:133 -msgid "Last Seen" -msgstr "" - -#: users/models.py:134 -msgid "Last time the token was used" -msgstr "" - -#: users/models.py:138 -msgid "Revoked" -msgstr "" - -#: users/models.py:379 -msgid "Permission set" -msgstr "" - -#: users/models.py:388 -msgid "Group" -msgstr "" - -#: users/models.py:392 -msgid "View" -msgstr "" - -#: users/models.py:392 -msgid "Permission to view items" -msgstr "" - -#: users/models.py:396 -msgid "Permission to add items" -msgstr "" - -#: users/models.py:400 -msgid "Change" -msgstr "" - -#: users/models.py:402 -msgid "Permissions to edit items" -msgstr "" - -#: users/models.py:408 -msgid "Permission to delete items" -msgstr "" - diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 7138efac251b..609252e6b97e 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -48,38 +48,34 @@ msgstr "تعداد افزوده شده اشتباه است" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا کرد" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "تاریخ را وارد کنید" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "یادداشت" @@ -92,270 +88,250 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "رمز عبور را وارد کنید" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "گذرواژه جدید را وارد کنید" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "تأیید کلمه‌ی عبور" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "گذرواژه جدید را تایید کنید" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "رمز عبور قدیمی" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "ایمیل (دوباره وارد کنید)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "تایید آدرس ایمیل" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "هر بار باید همان ایمیل را تایپ کنید." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "آدرس ایمیل اصلی ارائه شده معتبر نیست." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "دامنه ایمیل ارائه شده تایید نشده است." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "فایل‌های داده" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "فایل را برای بارگذاری انتخاب کنید" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "این نوع فایل پشتیبانی نمی‌شود" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "حجم فایل خیلی بزرگ است" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "هیچ ستونی در فایل یافت نشد" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "هیچ ردیف داده ای در فایل یافت نشد" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "هیچ ردیف داده ای ارائه نشده است" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "هیچ ستون داده ای ارائه نشده است" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "ستون مورد نیاز وجود ندارد: \"{name}\"" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "ستون تکراری: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "هیچ عملیات کاربر-محوری، مشخص نشده است" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "تایید" @@ -11563,26 +10607,26 @@ msgstr "تایید" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 60742baa7515..f8755e23843c 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Virheen tiedot löytyvät hallintapaneelista" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Anna päivämäärä" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Merkinnät" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Anna salasana" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Anna uusi salasana" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Vahvista salasana" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Vahvista uusi salasana" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Vanha salasana" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Sähköposti (uudelleen)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Sähköpostiosoitteen vahvistus" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Sinun täytyy kirjoittaa sama sähköposti joka kerta." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Annettu ensisijainen sähköpostiosoite ei kelpaa." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Annetun sähköpostiosoitteen verkkotunnusta ei hyväksytä." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Tyhjä sarjanumero" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplikaatti sarjanumero" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Sarjanumeroita ei löytynyt" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "tšekki" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "tanska" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "saksa" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "kreikka" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "englanti" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "espanja" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "espanja (Meksiko)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "farsi / persia" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "suomi" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "ranska" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "heprea" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "unkari" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "italia" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "japani" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "korea" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "hollanti" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "norja" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "puola" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "portugali" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "portugali (Brasilia)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "venäjä" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "slovenia" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "ruotsi" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "thai" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "turkki" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "vietnam" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Sähköposti" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metatietojen tulee olla python dict objekti" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Liitännäisen metadata" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadatakenttä, ulkoisten liitännäisten käyttöön" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Virheellisesti muotoiltu malli" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Viitekenttä ei voi olla tyhjä" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Viitenumero on liian suuri" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Puuttuva tiedosto" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Puuttuva ulkoinen linkki" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Liite" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Valitse liitettävä tiedosto" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Linkki" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Linkki ulkoiseen URLiin" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Kommentti" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Tiedoston kommentti" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Käyttäjä" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "latauspäivä" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Tiedoston nimi ei saa olla tyhjä" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Virheellinen liitteen hakemisto" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Tiedostonimi sisältää kielletyn merkin '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Tiedostonimen pääte puuttuu" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Samanniminen liite on jo olemassa" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Virhe tiedoston uudelleennimeämisessä" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Kuvaus" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Polku" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Viivakoodin Tiedot" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Käyttäjätunnus" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Etunimi" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Sukunimi" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktiivinen" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Tiedostonimi" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datatiedosto" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Valitse lähetettävä datatiedosto" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Tiedostotyyppiä ei tueta" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Tiedosto on liian suuri" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Datarivejä ei annettu" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Datasarakkeita ei annettu" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Vaadittu sarake puuttuu: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikaatti sarake: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "InvenTree järjestelmän terveystarkastukset epäonnistui" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Odottaa" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Valmis" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Peruttu" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Kadonnut" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Palautettu" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Kesken" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Lähetetty" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Huomiota tarvitaan" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Vahingoittunut" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Tuhottu" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Hylätty" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Asetettu karanteeniin" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Varastotuote luotu" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Sijainti muutettu" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Varasto päivitetty" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "Järjestelmän tiedot" msgid "About InvenTree" msgstr "Tietoja InvenTree:stä" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Saatavilla" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Osa" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Linkki ulkoiseen URLiin" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Määrä" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Sijainti" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Sijainti" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Tila" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Valmistajan osanumero" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Sarjanumero" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Seurattavissa" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Odottaa" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Peruttu" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Valmis" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Poista viivakoodin linkitys" @@ -1800,7 +1757,7 @@ msgstr "Poista viivakoodin linkitys" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Linkitä viivakoodi" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Myöhässä" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "Prioriteetti" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" +msgstr "Prioriteetti" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Valmis" @@ -2015,12 +1958,12 @@ msgstr "Valmis" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Liitteet" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Tiedosto" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Päivitetty" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Viimeisimmän päivityksen aikaleima" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 -msgid "No group" -msgstr "Ei ryhmää" - -#: common/models.py:1231 +#: common/models.py:1114 +msgid "No group" +msgstr "Ei ryhmää" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Verkkotunnus ei saa olla tyhjä." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Virheellinen verkkotunnus: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Yrityksen nimi" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "päivää" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponentti" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Seurattavissa" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Sivun koko" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Täytä sarjanumerot automaattisesti" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Salli SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Näytä uutiset" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Näytä uutiset kotisivulla" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 -msgid "Display part scheduling information" +#: common/models.py:2416 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2421 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2423 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2429 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2431 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2451 +msgid "Default stock location label template" msgstr "" -#: common/models.py:2516 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2522 -msgid "Table String Length" +#: common/models.py:2459 +msgid "Default build line label template" msgstr "" -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2530 +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Käyttäjä" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Hinta" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktiivinen" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Isäntä" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Otsikko" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Linkki" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Julkaistu" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Julkaisija" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Kuva" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Liite" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Puuttuva tiedosto" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Puuttuva ulkoinen linkki" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Valitse liitettävä tiedosto" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Kommentti" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Tiedostonimi" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Verkkotunnus ei saa olla tyhjä." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Virheellinen verkkotunnus: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "Edellinen vaihe" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Yritys" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Yritykset" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Yrityksen kuvaus" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Sivusto" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Yrityksen sivuston URL" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Puhelinnumero" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakti" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "on asiakas" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "on toimittaja" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "on valmistaja" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Osoite" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Yritys" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Valmistaja" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Valmistajan osanumero" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Arvo" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Toimittaja" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Valitse valmistajan osa" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Muistiinpano" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "Poista yritys" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Osan kuva" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Asiakas" @@ -4648,12 +4334,19 @@ msgstr "Asiakas" msgid "Uses default currency" msgstr "Käyttää oletusvaluuttaa" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Osoite" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Puhelin" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Poista" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "Asiakkaat" msgid "New Customer" msgstr "Uusi asiakas" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Yritykset" + #: company/views.py:52 msgid "New Company" msgstr "Uusi yritys" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Käytössä" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Leveys [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Korkeus [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Suodattimet" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-koodi" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Hinta yhteensä" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Lähetetty" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Kadonnut" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Palautettu" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Kesken" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Muokkaa tilausta" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Kopioi tilaus" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Peru tilaus" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Kopioi tilaus" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Kokonaiskustannukset" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Kokonaiskustannuksia ei voitu laskea" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Poista rivi" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Toiminnot" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Avainsanat" @@ -6423,16 +5917,15 @@ msgstr "Avainsanat" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategoria" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Oletus avainsanat" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Kuvake" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Muut merkinnät" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Raportti" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Käytössä" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Luo raportti" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Muokkaa kategoriaa" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Muokkaa kategoriaa" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Poista kategoria" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Poista kategoria" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Luo uusi osa" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Uusi osa" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Muokkaa" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,199 +7845,183 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" #: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" +msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Avain" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "Suodattimet" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Leveys [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Korkeus [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-koodi" - #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Sarjanumero" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sarjanumero" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Huomiota tarvitaan" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Vahingoittunut" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Tuhottu" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Hylätty" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Asetettu karanteeniin" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Varastotuote luotu" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Sijainti muutettu" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Varasto päivitetty" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "seuraava sivu" msgid "Navigate to next serial number" msgstr "Siirry seuraavaan sarjanumeroon" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Varoitus" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Muokkaa sijaintia" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Poista sijainti" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Uusi sijainti" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Poista" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Käyttäjätunnus" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Etunimi" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Sukunimi" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Aktiiviset istunnot" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Kirjaa ulos aktiiviset istunnot (paitsi tämä)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Kirjaa ulos aktiiviset istunnot" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP-osoite" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Laite" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "kopioi leikepöydälle" @@ -11554,7 +10598,7 @@ msgstr "Vahvista sähköpostiosoite" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Vahvista" @@ -11563,26 +10607,26 @@ msgstr "Vahvista" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Kirjaudu sisään" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Unohtuiko salasana?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "Vaihe 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Vaihe 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Skannaa viivakoodi" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Lähetä" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Tallenna" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "Sähköpostiasetukset" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Kyllä" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Ryhmä" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Näytä" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Oikeus tarkastella kohteita" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Oikeus lisätä kohteita" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Muuta" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Oikeus muokata kohteita" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Oikeus poistaa kohteita" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 116f93f987b9..14e423503411 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -48,40 +48,36 @@ msgstr "Quantité fournie invalide" msgid "Invalid quantity supplied ({exc})" msgstr "Quantité fournie invalide ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'administration" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" -msgstr "Notes" +msgstr "" #: InvenTree/format.py:164 #, python-brace-format @@ -92,270 +88,250 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Entrer le mot de passe" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Entrer le nouveau mot de passe" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Confirmez le mot de passe" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Confirmer le nouveau mot de passe" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Ancien mot de passe" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (encore)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Confirmation de l'adresse email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Vous devez taper le même e-mail à chaque fois." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "L'adresse e-mail principale fournie n'est pas valide." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Le domaine e-mail fourni n'est pas approuvé." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "L'enregistrement est désactivé." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Plage de groupe non valide : {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Séquence de groupe invalide : {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Le nombre de numéros de série uniques ({len(serials)}) doit correspondre à la quantité ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 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:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arabe" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgare" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tchèque" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danois" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Allemand" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grec" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Anglais" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Espagnol" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estonien" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Perse" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finnois" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Français" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hébreu" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Hongrois" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italien" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japonais" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Coréen" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Letton" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Néerlandais" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norvégien" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polonais" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugais" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugais (Brésilien)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Roumain" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russe" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovaque" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovénien" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbe" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Suédois" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thaïlandais" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turc" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrainien" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamien" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Chinois (Simplifié)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" @@ -364,310 +340,349 @@ msgstr "Chinois (Traditionnel)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Se connecter à l'application" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-mail" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Erreur lors de l'exécution de la validation du plugin" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Les metadata doivent être un objet python de type \"dict\"" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Métadonnées de l'Extension" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Champs metadata JSON, pour plugins tiers" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Modèle mal formaté" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Clé de format inconnu spécifiée" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Clé de format requise manquante" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Le champ de référence ne peut pas être vide" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "La référence doit correspondre au modèle requis" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Fichier manquant" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Lien externe manquant" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Pièce jointe" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Sélectionnez un fichier à joindre" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Lien" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Lien vers une url externe" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Commentaire" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Commentaire du fichier" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Utilisateur" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "date de chargement" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Le nom de fichier ne doit pas être vide" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Répertoire de pièce jointe invalide" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Le nom de fichier contient le caractère illégal '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Extension manquante du nom de fichier" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Une pièce jointe avec ce nom de fichier existe déjà" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Erreur lors du renommage du fichier" + +#: InvenTree/models.py:846 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:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "Description" +msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Notes Markdown (option)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Prénom" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Prénom de l'utilisateur" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Nom" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Nom de famille de l'utilisateur" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Adresse e-mail de l'utilisateur" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Staff" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Cet utilisateur a-t-il les permissions du staff" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Super-utilisateur" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Cet utilisateur est-il un super-utilisateur" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Actif" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Ce compte d'utilisateur est-il actif" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Vous n'avez pas la permission de modifier ce rôle utilisateur." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Seuls les super-utilisateurs peuvent créer de nouveaux utilisateurs" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Nom du fichier" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Fichier de données" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Sélectionnez le fichier de données à envoyer" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Format de fichier non supporté" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Fichier trop volumineux" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Pas de colonnes trouvées dans le fichier" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Par de lignes de données trouvées dans le fichier" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Pas de lignes de données fournies" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Pas de colonne de données fournie" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonne requise manquante : {name}" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonne duliquée : '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Échec de la vérification du processus d'arrière-plan" @@ -679,27 +694,223 @@ msgstr "Backend d'email non configuré" msgid "InvenTree system health checks failed" msgstr "Échec des contrôles de santé du système" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "En attente" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Placé" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Terminé" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Annulé" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Perdu" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Retourné" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "En Cours" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Expédié" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Attention requise" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Endommagé" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Détruit" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Rejeté" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "En quarantaine" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Ancienne entrée de suivi de stock" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Article en stock créé" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Article de stock modifié" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Numéro de série attribué" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Stock comptabilisé" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Stock ajouté manuellement" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Stock supprimé manuellement" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Emplacement modifié" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Stock mis à jour" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Installé dans l'assemblage" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Retiré de l'assemblage" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Composant installé" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Composant retiré" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Séparer de l'élément parent" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Fractionner l'élément enfant" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Articles de stock fusionnés" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Converti en variante" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "La sortie de l'ordre de construction a été créée" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Sortie de l'ordre de construction terminée" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "La sortie de l'ordre de construction a été refusée" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Consommé par ordre de construction" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Commandes expédiées vs. ventes" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Livraisons reçues vs. commandes réalisées" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Livraisons retournées vs. commandes retournées" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Envoyé au client" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Retourné par le client" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Fabrication" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Retour" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Réparer" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Remplacer" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Remboursement" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Refuser" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Base de données inconnue" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Unité invalide" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "La valeur de surplus ne doit pas être négative" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Le surplus ne doit pas dépasser 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Valeur invalide pour le dépassement" @@ -727,105 +938,62 @@ msgstr "Informations système" msgid "About InvenTree" msgstr "À propos d'InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Fabrication parente" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Émis par" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 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:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Consommable" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Facultatif" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Assemblage" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Suivi" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allouée" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Disponible" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Ordre de Fabrication" msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Choix invalide pour la fabrication parente" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "Un utilisateur ou un groupe responsable doit être spécifié" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Référence" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Fabrication parente" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder associé a cette fabrication" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Pièce" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "achevé par" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Émis par" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Responsable" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Lien vers une url externe" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:651 build/models.py:778 -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:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 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:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1675 +#: build/models.py:1493 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:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" -msgstr "Installer dans" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "Stock de destination de l'article" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Nom de l'article" +msgstr "Installer dans" -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" +#: build/models.py:1588 +msgid "Destination stock item" +msgstr "Stock de destination de l'article" -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:188 +#: build/serializers.py:176 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:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Emplacement" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Les numéros de série doivent être fournis pour les pièces traçables" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Emplacement" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "État" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:542 +#: build/serializers.py:512 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:654 -msgid "Consume Allocated Stock" -msgstr "Consommation du stock alloué" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Supprimer le stock alloué" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Soustraire tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:662 +#: build/serializers.py:600 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:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:836 +#: build/serializers.py:752 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:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1064 +#: build/serializers.py:980 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:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Conditionnement" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID de composant" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Description pièce" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Numéro de série" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Traçable" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Stock alloué" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "En Commande" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "En attente" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Fabrication" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Annulé" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Terminé" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Stock requis pour la commande de construction" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Ordre de commande en retard" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" @@ -1764,8 +1721,8 @@ msgstr "Image miniature de l'article" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Actions de code-barres" @@ -1776,7 +1733,7 @@ msgstr "Actions de code-barres" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Afficher le QR Code" @@ -1787,9 +1744,9 @@ msgstr "Afficher le QR Code" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Délier le code-barre" @@ -1800,7 +1757,7 @@ msgstr "Délier le code-barre" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Lier le code-barre" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Modifier l'assemblage" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Dupliquer la construction" +msgid "Cancel Build" +msgstr "Annuler l'assemblage" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Dupliquer la construction" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Annuler l'assemblage" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Supprimer l'assemblage" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Compléter l'assemblage" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Description de la construction" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Aucune sortie de construction n'a été créée pour cet ordre de construction" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "L'ordre de construction est prêt à être marqué comme terminé" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordre de construction ne peut pas être achevé car il reste des outputs en suspens" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Le nombre de constructions requis n'a pas encore été atteint" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Le stock n'a pas été entièrement alloué à cet ordre de construction" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Date Cible" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Cette construction était due le %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "En retard" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Sorties de Construction terminées" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Commandes" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Émis par" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Priorité" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Supprimer la commande de construction" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Génération du QR Code de commande" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Lier le code-barres pour construire la commande" @@ -1968,10 +1911,10 @@ msgstr "Stock d'origine" msgid "Stock can be taken from any available location." msgstr "Le stock peut être pris à partir de n'importe quel endroit disponible." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" -msgstr "Destination" +msgstr "" #: build/templates/build/detail.html:56 msgid "Destination location not specified" @@ -1981,23 +1924,23 @@ msgstr "Stockage de destination non défini" msgid "Allocated Parts" msgstr "Pièces allouées" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Lot" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Créé le" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Pas de date cible définie" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Terminé" @@ -2015,13 +1958,13 @@ msgstr "Terminé" msgid "Build not complete" msgstr "Compilation incomplète" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Commandes de constructions filles" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Allouer le stock à la construction" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Allouer automatiquement" msgid "Manually allocate stock to build" msgstr "Allouer manuellement le stock à construire" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Allouer le stock" @@ -2072,19 +2015,15 @@ msgstr "Créer une nouvelle sortie de construction" msgid "New Build Output" msgstr "Nouvelle sortie de construction" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Stock Consommé" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Sorties de Construction terminées" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Pieces jointes" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notes de construction" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Allocation terminée" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Toutes les lignes ont été entièrement attribuées" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Nouvel ordre de construction" @@ -2120,57 +2059,10 @@ msgstr "Nouvel ordre de construction" msgid "Build Order Details" msgstr "Détails de la commande de construction" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Sorties incomplètes" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Code de devise invalide" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Code de devise en double" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Aucun code de devise valide fourni" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Pas de plugin" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1761 +2101,1621 @@ msgstr "{name.title()} Fichier" msgid "Select {name} file to upload" msgstr "Sélectionner le fichier {name} à uploader" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "L'URL du site est verrouillée par configuration" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Code projet unique" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Description du projet" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Pas de groupe" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Un domaine vide n'est pas autorisé." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Nom de domaine invalide : {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Pas de plugin" + +#: common/models.py:1259 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Migration en attente" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nom de la société" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Nom de société interne" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "URL de base" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Devise par défaut" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Devises supportées" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Liste des codes de devises supportés" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Fréquence de mise à jour des taux de change (définir à zéro pour désactiver)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "jours" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permettre de remplacer l'agent utilisateur utilisé pour télécharger des images et des fichiers à partir d'URL externe (laisser vide pour la valeur par défaut)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Confirmation requise" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Exiger une confirmation explicite de l’utilisateur pour certaines actions." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Profondeur de l'arborescence" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondeur de l'arborescence par défaut. Les niveaux plus profonds peuvent être chargés au fur et à mesure qu'ils sont nécessaires." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "À quelle fréquence vérifier les mises à jour (définir à zéro pour désactiver)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Activer le backup automatique de la base de données et des fichiers médias" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Activer le support du scanner de codes-barres dans l'interface web" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "Permettre la suppression de pièces utilisées dans un assemblage" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "Regex IPN" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Modèle" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Assemblage" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Composant" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Les pièces peuvent être utilisées comme sous-composants par défaut" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Achetable" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Vendable" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Traçable" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Afficher l'import dans les vues" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Afficher l'assistant d'importation pour certaine vues de produits" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Si des unités sont fournies, les valeurs de paramètre doivent correspondre aux unités spécifiées" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Nombre minimum de décimales à afficher lors de l'affichage des prix" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inclure les réductions de prix dans le calcul du prix global" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Prix internes" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" -msgstr "Journal des erreurs" +msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Activer les rapports de test" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Activer la génération de rapports de test" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Joindre des rapports de test" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Lors de l'impression d'un rapport de test, joignez une copie du rapport de test à l'article en stock associé" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Les numéros de série pour les articles en stock doivent être uniques au niveau global" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Remplir automatiquement les Numéros de Série" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Remplir automatiquement les numéros de série dans les formulaires" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Nombre de jours pendant lesquels les articles en stock sont considérés comme périmés avant d'expirer" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Activer le contrôle de la propriété sur les emplacements de stock et les articles" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Icône par défaut de l'emplacement du stock (vide signifie aucune icône)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Modèle requis pour générer le champ de référence de l'ordre de construction" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Modèle requis pour générer le champ de référence du bon de commande" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Activer la création d'expédition par défaut avec les bons de commandes" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modèle requis pour générer le champ de référence de bon de commande" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Autoriser la modification des bons de commande après avoir été expédiés ou complétés" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activer l'auto-inscription via SSO pour les utilisateurs sur les pages de connexion" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Email requis" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Remplir automatiquement les détails de l'utilisateur à partir des données de compte SSO" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'inscription" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Vérifier que tous les plugins sont installés au démarrage - activer dans les environnements conteneurs" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Activer les codes projet" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Fonctionnalité d'inventaire" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Activer la fonctionnalité d'inventaire pour enregistrer les niveaux de stock et le calcul de la valeur du stock" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Nombre de jours entre l'enregistrement automatique des stocks (définir à zéro pour désactiver)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Les rapports d'inventaire seront supprimés après le nombre de jours spécifié" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Afficher les composants suivis" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Afficher les composants suivis sur l'écran d'accueil" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Afficher les catégories suivies" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Afficher les catégories de pièces suivies sur la page d'accueil" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Afficher les derniers composants sur la page d'accueil" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Afficher les listes de matériaux en attente de validation sur la page d'accueil" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Afficher les articles de stock récemment modifiés sur la page d'accueil" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Afficher le stock faible" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Afficher les articles en stock bas sur la page d'accueil" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Afficher le stock épuisé" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Afficher les stocks épuisés sur la page d'accueil" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Afficher le stock nécessaire" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Afficher les pièces en stock nécessaires pour les assemblages sur la page d'accueil" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Afficher le stock expiré" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Afficher les pièces en stock expirées sur la page d'accueil" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Afficher le stock périmé" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Afficher les articles de stock périmés sur la page d'accueil" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Afficher les constructions en attente" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Afficher les constructions en attente sur la page d'accueil" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Afficher les constructions en retard" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Afficher les constructions en retard sur la page d'accueil" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Afficher les commandes en suspens" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Afficher les commandes en suspens sur la page d'accueil" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Afficher les commandes en retard" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Afficher les commandes en retard sur la page d'accueil" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Afficher les envois en suspens" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Afficher les envois en suspens sur la page d'accueil" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Afficher les envois en retard" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Afficher les envois en retard sur la page d'accueil" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Afficher les nouvelles" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Afficher les nouvelles sur la page d'accueil" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Affichage du libellé en ligne" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Afficher les étiquettes PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Imprimante d'étiquettes par défaut" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Configurer quelle imprimante d'étiquette doit être sélectionnée par défaut" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Affichage du rapport en ligne" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Afficher les rapports PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Rechercher de pièces" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Afficher les pièces dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "Recherche du fournisseur de pièces" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Afficher les pièces du fournisseur dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Rechercher les pièces du fabricant" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Afficher les pièces du fabricant dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Masquer les pièces inactives" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Exclure les pièces inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Rechercher des catégories" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Afficher les catégories de pièces dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Rechercher dans le stock" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Afficher les pièces en stock dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Cacher les pièces indisponibles" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Exclure les articles en stock qui ne sont pas disponibles de la fenêtre de prévisualisation de recherche" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Chercher des Emplacements" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Afficher les emplacements dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Rechercher les entreprises" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Afficher les entreprises dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Rechercher les commandes de construction" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Afficher les commandes de construction dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Rechercher des bons de commande" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Exclure les bons de commande inactifs" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Exclure les commandes d’achat inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Rechercher les bons de commande" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Exclure les bons de commande inactives" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Exclure les bons de commande inactifs de la fenêtre de prévisualisation de recherche" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Rechercher les commandes retournées" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Résultats de l'aperçu de la recherche" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Nombre de résultats à afficher dans chaque section de la fenêtre de prévisualisation de recherche" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Recherche Regex" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Afficher la quantité dans les formulaires" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Afficher la quantité disponible dans certains formulaires" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "La touche Echap ferme les formulaires" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Utilisez la touche Echap pour fermer les formulaires modaux" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Barre de navigation fixe" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "La position de la barre de navigation est fixée en haut de l'écran" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Format de date" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Format préféré pour l'affichage des dates" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planification des pièces" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Afficher les informations de planification des pièces" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventaire des pièces" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Longueur de la chaîne dans les Tableau" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" -msgstr "Longueur maximale des chaînes affichées dans les tableaux" +msgstr "" + +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" -#: common/models.py:2530 +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Utilisateur" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Prix" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Actif" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "Jeton" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "ID message" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Hôte" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Entête" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Corps" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" -msgstr "Id" +msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titre" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Lien" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Publié" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Auteur" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Résumé" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Lu" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" -msgstr "Image" - -#: common/models.py:3040 -msgid "Image file" -msgstr "Fichier image" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" msgstr "" -#: common/models.py:3099 -msgid "Unit symbol must be unique" +#: common/models.py:3044 +msgid "Image file" msgstr "" -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "Symbole" +msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" -msgstr "Symbole d'unité facultatif" +msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Définition" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" -msgstr "Définition de l'unité" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Pièce jointe" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Fichier manquant" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Lien externe manquant" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Sélectionnez un fichier à joindre" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Commentaire" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" msgstr "" #: common/notifications.py:314 @@ -3978,13 +3730,13 @@ msgstr "Une nouvelle commande a été créée et vous a été assignée" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "{verbose_name} annulé" +msgstr "" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "Une commande qui vous est assignée a été annulée" +msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Articles reçus" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "Erreur déclenchée par le plugin" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" -msgstr "En cours d'exécution" +msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" -msgstr "Tâches en attente" +msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "Tâches planifiées" +msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" -msgstr "Tâches échouées" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" -msgstr "ID de la tâche" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" -msgstr "ID unique de la tâche" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" -msgstr "Verrouillé" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" -msgstr "Heure verrouillé" +msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" -msgstr "Nom de la tâche" +msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" -msgstr "Fonction" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "Nom de la fonction" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Arguments" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Arguments tâche" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "Mots-clés Arguments" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "Mots-clés arguments tâche" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nom du fichier" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" msgstr "" -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" +#: common/serializers.py:372 +msgid "Function name" msgstr "" -#: common/validators.py:35 -msgid "No attachment model type provided" +#: common/serializers.py:374 +msgid "Arguments" msgstr "" -#: common/validators.py:41 -msgid "Invalid attachment model type" +#: common/serializers.py:374 +msgid "Task arguments" msgstr "" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" +#: common/serializers.py:377 +msgid "Keyword Arguments" msgstr "" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" +#: common/serializers.py:377 +msgid "Task keyword arguments" msgstr "" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Un domaine vide n'est pas autorisé." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Nom de domaine invalide : {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Pièces importées" msgid "Previous Step" msgstr "Étape précédente" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "La pièce est active" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "Le fabricant est actif" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" -msgstr "Le fournisseur de la pièce est active" +msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" -msgstr "La pièce interne est active" +msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" -msgstr "Le fournisseur est actif" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Société" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Entreprises" +msgstr "" -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Description de la société" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Description de la société" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Site web" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Site Web de la société" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Numéro de téléphone" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Numéro de téléphone de contact" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Adresse e-mail de contact" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "Contact" +msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Point de contact" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" -msgstr "Cette entreprise est-elle active ?" - -#: company/models.py:168 -msgid "Is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:165 +msgid "is customer" +msgstr "est client" + +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Vendez-vous des objets à cette entreprise?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "est fournisseur" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Est-ce que vous achetez des articles à cette entreprise?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "est fabricant" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Devise par défaut utilisée pour cette entreprise" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adresse" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Société" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Sélectionner une entreprise" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" -msgstr "Intitulé de l'adresse" +msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" -msgstr "Titre décrivant la saisie de l'adresse" +msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" -msgstr "Adresse principale" +msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "Sélectionner comme adresse principale" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Ligne 1" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Adresse" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Ligne 2" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Seconde ligne d'adresse" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Code postal" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Ville / Région" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "Code postal Ville / Région" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "État / Province" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "État ou province" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Pays" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Pays" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Notes du livreur" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Instructions pour le livreur" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Notes pour la livraison interne" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Notes internes pour la livraison" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" -msgstr "Lien vers les informations de l'adresse (externe)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Pièces du fabricant" +msgstr "" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Fabricant" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Pièces du fabricant" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Nom du paramètre" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Valeur" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Valeur du paramètre" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Unités" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Unités du paramètre" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Pièce fournisseur" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 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:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Fournisseur" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Sélectionner un fabricant" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "Lien de la pièce du fournisseur externe" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "coût de base" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Conditionnement" + +#: company/models.py:864 msgid "Part packaging" msgstr "Conditionnement de l'article" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Nombre de paquet" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "plusieurs" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Commande multiple" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Quantité disponible auprès du fournisseur" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Disponibilité mise à jour" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "En Stock" @@ -4571,8 +4257,8 @@ msgstr "En Stock" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "Supprimer la société" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "Télécharger l'image depuis l'URL" msgid "Delete image" msgstr "Supprimer image" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Client" @@ -4648,12 +4334,19 @@ msgstr "Client" msgid "Uses default currency" msgstr "Utiliser la devise par défaut" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adresse" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Téléphone" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Supprimer" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "Créer une nouvelle pièce fournisseur" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Nouvelle pièce fournisseur" @@ -4703,7 +4396,7 @@ msgstr "Pièces du fabricant" msgid "Create new manufacturer part" msgstr "Créer une nouvelle pièce de fabricant" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Nouvelle pièce de fabricant" @@ -4717,7 +4410,7 @@ msgstr "Stock fournisseur" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Nouvelle commande achat" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Fabricants" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Article de la commande" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Supprimer la pièce de fabricant" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Pièces Internes" @@ -4838,7 +4530,7 @@ msgstr "Aucune information sur le fabricant disponible" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Fournisseurs" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paramètres" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nouveau paramètre" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "Articles en stock assignés" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresses" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Pièce fournisseur" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "Actions de la pièce du fournisseur" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Commander un composant" @@ -4928,12 +4629,12 @@ msgstr "Supprimer la pièce du fournisseur" msgid "No supplier information available" msgstr "Aucune information de fournisseur disponible" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Stock de pièces du fournisseur" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Créer un nouvel article de stock" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nouvel article de stock" @@ -4966,33 +4667,29 @@ msgstr "Information sur les prix" msgid "Add Price Break" msgstr "Ajouter un prix de rupture" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Éléments en stock" @@ -5018,368 +4715,252 @@ msgstr "Clients" msgid "New Customer" msgstr "Nouveaux Clients" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Entreprises" + #: company/views.py:52 msgid "New Company" msgstr "Nouvelle Entreprise" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Placé" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Données" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "Erreurs" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Valide" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Nom de l'étiquette" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Description de l’étiquette" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Étiquette" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Fichier de modèle d'étiquette" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Activé" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Le modèle d'étiquette est activé" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Largeur [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Largeur de l'étiquette, spécifiée en mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Hauteur [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Hauteur de l'étiquette, spécifiée en mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Modèle de nom de fichier" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Modèle pour la génération des noms de fichiers d'étiquette" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filtres" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Inconnu" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "Impression" +msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "Aucun média" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "Déconnecté" +msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" -msgstr "Imprimante Etiquette" +msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "Impression directe des étiquettes pour divers articles." +msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "Emplacement Imprimante" +msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" -msgstr "Porter de l'imprimante sur un emplacement spécifique" +msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "Nom de la machine" +msgstr "" #: machine/models.py:29 msgid "Machine Type" -msgstr "Machine Type" +msgstr "" #: machine/models.py:29 msgid "Type of machine" -msgstr "Type de machine" +msgstr "" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "Pilote" +msgstr "" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "Pilote utilisé pour la machine" +msgstr "" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "Les machines peuvent être inactivées" +msgstr "" #: machine/models.py:95 msgid "Driver available" -msgstr "Pilote disponible" +msgstr "" #: machine/models.py:100 msgid "No errors" -msgstr "Aucune erreur" +msgstr "" #: machine/models.py:105 msgid "Initialized" -msgstr "Initialisé" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" #: machine/models.py:117 msgid "Machine status" -msgstr "Statut de la machine" +msgstr "" #: machine/models.py:145 msgid "Machine" -msgstr "Machine" +msgstr "" #: machine/models.py:151 msgid "Machine Config" -msgstr "Configuration de la machine" +msgstr "" #: machine/models.py:156 msgid "Config type" -msgstr "Type de configuration" +msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Prix Total" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Statut de la commande" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Référence de commande" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "Possède un Tarif" +msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Aucun bon de commande correspondant n'a été trouvé" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Commande" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" -msgstr "Commande Complétée" +msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" -msgstr "Commande En Attente" +msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Retour de commande" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" -msgstr "Description de la commande (facultatif)" +msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Créé par" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Utilisateur ou groupe responsable de cette commande" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" -msgstr "Adresse de l'entreprise pour cette commande" +msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "reçu par" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Date d'émission" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Date d'émission de la commande" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "La commande ne peut pas être terminée car aucune pièce n'a été assignée" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Contexte" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "supprimé" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Reçu" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Où l'Acheteur veut-il stocker cet article ?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "La pièce virtuelle ne peut pas être affectée à une commande" -#: order/models.py:1642 +#: order/models.py:1528 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:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Expédié" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" -msgstr "Date de Livraison" +msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Envoi" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Ligne" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Article" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" -msgstr "Devise du prix d'achat" - -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "Devise du prix d'achat" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" +#: order/serializers.py:475 +msgid "Merge Items" msgstr "" -#: order/serializers.py:568 -msgid "Internal Part Name" +#: order/serializers.py:477 +msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Entrez les numéros de série pour les articles de stock entrants" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Une quantité entière doit être fournie pour les pièces tracables" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" -msgstr "Devise du prix de vente" +msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 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:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "Les numéros de série suivants sont déjà alloués" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Perdu" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Retourné" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "En Cours" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Retour" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Réparer" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Remplacer" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Remboursement" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Refuser" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Modifier la commande" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Annuler la commande" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Marquer la commande comme complète" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Finaliser la commande" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Référence de commande" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Description de la commande" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incomplet" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6162,7 +5639,7 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "Champs fichier" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 @@ -6184,13 +5661,13 @@ msgstr "Dupliquer la sélection" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Supprimer la ligne" @@ -6231,9 +5708,18 @@ msgstr "Commande déjà traitée. Les fichiers ne peuvent pas être chargés." msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "Réception de Stock" +msgstr "" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" @@ -6243,33 +5729,33 @@ msgstr "Articles de la commande d'achat" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "Ajouter un Article de la Chaîne" +msgstr "" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "Articles de la Chaîne reçus" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "Lignes supplémentaires" +msgstr "" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "Ajoutez une Ligne Supplémentaire" +msgstr "" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "Articles reçus" +msgstr "" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" -msgstr "Référence client" +msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" -msgstr "Coût total" +msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "Détails de la Commande" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,10 +5851,9 @@ msgid "Pending Shipments" msgstr "Expéditions en attente" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" -msgstr "Actions" +msgstr "" #: order/templates/order/sales_order_detail.html:80 msgid "New Shipment" @@ -6401,1388 +5881,1255 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "ID de composant" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Nom de l'article" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Révision" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Mots-clés" #: part/admin.py:60 msgid "Part Image" -msgstr "Image pièce" +msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" -msgstr "ID catégorie" +msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" -msgstr "Nom catégorie" +msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" -msgstr "ID Emplacement par défaut" +msgstr "" #: part/admin.py:76 msgid "Default Supplier ID" -msgstr "ID Fournisseur par défaut" +msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" -msgstr "Variante de" +msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Stock Minimum" #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "Utilisé pour" +msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" -msgstr "Construction" +msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" -msgstr "Coût minimal" +msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" -msgstr "Coût maximal" +msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" -msgstr "Chemin catégorie" +msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Pièces" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" -msgstr "Profondeur" - -#: part/api.py:123 -msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" +#: part/api.py:138 +msgid "Filter by category depth" msgstr "" -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Catégorie" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" -msgstr "Utilise" +msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" -msgstr "Emplacement par défaut" +msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" -msgstr "Stock total" +msgstr "" #: part/forms.py:49 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Catégorie de composant" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" -msgstr "Structurel" +msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" -msgstr "Mots-clés par défaut" +msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" -msgstr "Est-ce que cette pièce est active ?" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" -msgstr "Création Utilisateur" +msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" -msgstr "Propriétaire responsable de cette pièce" +msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" -msgstr "Coût minimum de vente" +msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Notes additionnelles" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Activé" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Requis" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "" +#: part/models.py:3778 +msgid "Data" +msgstr "Données" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valeur par Défaut" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Surplus" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Validée" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7804,7 +7151,7 @@ msgstr "" #: part/tasks.py:37 msgid "Low stock notification" -msgstr "Notification de stock faible" +msgstr "" #: part/tasks.py:39 #, python-brace-format @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" -msgstr "Vous êtes abonné aux notifications pour cette catégorie" +msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" -msgstr "S'abonner aux notifications de cette catégorie" +msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Pièces (incluant les sous-catégories)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Nouvelle catégorie" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Prise d'inventaire" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Fabricants de composants" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Sélectionner un format de fichier" @@ -8095,15 +7438,15 @@ msgstr "Liste des composants" #: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 msgid "You are subscribed to notifications for this part" -msgstr "Vous êtes abonné aux notifications pour cette pièce" +msgstr "" #: part/templates/part/part_base.html:33 msgid "Subscribe to notifications for this part" -msgstr "S'abonner aux notifications de cette pièce" +msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Impression étiquette" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Dernier numéro de série" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Rechercher un numéro de série" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifier" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,15 +7753,15 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 msgid "Low Stock" -msgstr "Stock minimum" +msgstr "" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,199 +7845,183 @@ msgstr "Aucune action spécifiée" msgid "No matching action found" msgstr "Aucune action correspondante trouvée" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" #: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" +msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "Contributeurs d'InvenTree" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "Notifications InvenTree" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "Non du Plugin" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Extension Intégrée" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Extension" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9073,7 +8377,7 @@ msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "Identifiant de version du plugin. Laissez vide pour la dernière version." +msgstr "" #: plugin/serializers.py:106 msgid "Confirm plugin installation" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Aucun objet valide n'a été fourni au modèle" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Nom du modèle" -#: report/models.py:156 -msgid "Template description" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Modèle de nom de fichier" - -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/models.py:204 +msgid "Page size for PDF reports" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:210 +msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "Filtres" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:302 -msgid "Page size for PDF reports" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:308 -msgid "Render report in landscape orientation" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Largeur [mm]" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Largeur de l'étiquette, spécifiée en mm" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Hauteur [mm]" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Hauteur de l'étiquette, spécifiée en mm" - -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Filtres de composants" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Extrait " -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "Elément" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Requis pour" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Numéro de série" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Résultat" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Numéro de série" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "Les numéros de série doivent être une liste de nombres entiers" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 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:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 msgid "No Change" msgstr "" -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Attention requise" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Endommagé" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Détruit" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Rejeté" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "En quarantaine" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Ancienne entrée de suivi de stock" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Article en stock créé" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Article de stock modifié" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Numéro de série attribué" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stock comptabilisé" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Stock ajouté manuellement" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Stock supprimé manuellement" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Emplacement modifié" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Stock mis à jour" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Installé dans l'assemblage" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Retiré de l'assemblage" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Composant installé" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Composant retiré" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Séparer de l'élément parent" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Fractionner l'élément enfant" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Articles de stock fusionnés" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Converti en variante" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "La sortie de l'ordre de construction a été créée" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Sortie de l'ordre de construction terminée" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "La sortie de l'ordre de construction a été refusée" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Consommé par ordre de construction" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Commandes expédiées vs. ventes" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Livraisons reçues vs. commandes réalisées" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Livraisons retournées vs. commandes retournées" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Envoyé au client" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Retourné par le client" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Assemblage" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "Accéder au numéro de série suivant" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "Sélectionner la quantité à sérialiser et les numéros de série uniques." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Autorisation refusée" @@ -10690,15 +9722,15 @@ msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" -msgstr "Pièces suivies" +msgstr "" #: templates/InvenTree/index.html:52 msgid "Subscribed Categories" -msgstr "Catégories favorites" +msgstr "" #: templates/InvenTree/index.html:62 msgid "Latest Parts" -msgstr "Dernières pièces" +msgstr "" #: templates/InvenTree/index.html:77 msgid "BOM Waiting Validation" @@ -10706,7 +9738,7 @@ msgstr "" #: templates/InvenTree/index.html:106 msgid "Recently Updated" -msgstr "Mis à jour récemment" +msgstr "" #: templates/InvenTree/index.html:134 msgid "Depleted Stock" @@ -10840,12 +9872,12 @@ msgstr "Paramètres de Connexion" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "Inscription" +msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "Paramètres des Extensions" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Extensions" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Les extensions tierces ne sont pas activées pour cette installation d'InvenTree" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "Chemin d'installation" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Supprimer" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11207,18 +10239,18 @@ msgstr "Paramètres Utilisateur" #: templates/InvenTree/settings/sidebar.html:9 msgid "Account" -msgstr "Compte" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" -msgstr "Affichage" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "Paramètres du Compte" msgid "Change Password" msgstr "Changer le mot de passe" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Prénom" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Nom" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Les adresses de messagerie suivantes sont associées à votre compte :" @@ -11340,49 +10384,49 @@ msgstr "Configurer l'authentification multifacteurs" msgid "Remove multifactor" msgstr "Supprimer un facteur d'authentification" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Sessions actives" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Se déconnecter des sessions actives (sauf celle-ci)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Se déconnecter des sessions actives" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "Adresse IP" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Appareil" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Dernière activité" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "Il y a %(time)s (session actuelle)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Confirmer" @@ -11563,26 +10607,26 @@ msgstr "Confirmer" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11593,17 +10637,17 @@ msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "Voulez-vous vraiment vous déconnecter ?" +msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "Retourner au site" +msgstr "" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "Réinitialisation mot de passe" +msgstr "" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." @@ -11611,15 +10655,15 @@ msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "Réinitialiser mon mot de passe" +msgstr "" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "Cette fonction est actuellement désactivée. Veuillez contacter un administrateur." +msgstr "" #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "Mauvais jeton" +msgstr "" #: templates/account/password_reset_from_key.html:11 #, python-format @@ -11628,7 +10672,7 @@ msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "Changer de mot de passe" +msgstr "" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." @@ -11710,19 +10754,15 @@ msgstr "Étape 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Scanner le QR code ci-dessous avec un générateur de token de votre choix (par exemple Google Authenticator)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Étape 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Entrer un token généré par l'application :" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Vérifier" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Quantité requise" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Scanner le code-barres" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" -msgstr "Dernier numéro de série" +msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Ajouter" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Données QR non fournies" @@ -15038,7 +14035,7 @@ msgstr "" #: templates/socialaccount/login.html:24 msgid "Continue" -msgstr "Continuer" +msgstr "" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" @@ -15125,14 +14122,6 @@ msgstr "Paramètres de Messagerie" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Oui" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Droit défini" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Groupe" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Vue" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Droit de voir des éléments" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Droit d'ajouter des éléments" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Modifier" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Droit de modifier des élément" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Droit de supprimer des éléments" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 5a25c0d5ba0a..76fe1050c52f 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "הכנס סיסמה" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "הכנס סיסמה חדשה" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "אישור סיסמה" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "אשר סיסמה חדשה" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "אימייל (שנית)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "אישור כתובת אימייל" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "חובה לרשום את אותו אימייל בכל פעם." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "גרמנית" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "יוונית" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "אנגלית" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "ספרדית" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "ספרדית (מקסיקנית)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "צרפתית" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "עברית" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "איטלקית" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "יפנית" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "קוריאנית" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "הולנדית" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "נורווגית" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "פולנית" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "רוסית" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "שוודית" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "תאילנדית" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "טורקית" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "ווייטנאמית" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "קובץ חסר" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "חסר קישור חיצוני" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "קובץ מצורף" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "בחר קובץ לצירוף" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "קישור" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "קישור חיצוני" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "הערה" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "הערת קובץ" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "משתמש" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "תאריך העלאה" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "חובה למלא שם קובץ" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "תיקיית קובץ שגויה" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "שם הקובץ מכיל תו '{c}' שאינו חוקי" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "שגיאה בשינוי שם פריט" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "שם" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "מקור" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "שם קובץ" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "בהמתנה" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "מוקם" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "הושלם" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "מבוטל" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "אבד" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "הוחזר" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "נשלח" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "מצב טוב" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "דרושה תשומת לב" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "פגום" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "הרוס" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "נדחה" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "מיקום שונה" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "נשלח ללקוח" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "הוחזר מלקוח" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "ייצור" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "מידע אודות המערכת" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "מקור הבנייה" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "מקט" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "מקור הבנייה" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "רכיב" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "קישור חיצוני" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "כמות" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "בהמתנה" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "ייצור" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "מבוטל" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "הושלם" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,103 +2015,52 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 #: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" msgstr "" -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" +#: build/templates/build/detail.html:276 +msgid "Build Notes" msgstr "" -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" +#: build/templates/build/detail.html:434 +msgid "Allocation Complete" msgstr "" -#: common/currency.py:132 -msgid "Invalid currency code" +#: build/templates/build/detail.html:435 +msgid "All lines have been fully allocated" msgstr "" -#: common/currency.py:134 -msgid "Duplicate currency code" +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" msgstr "" -#: common/currency.py:139 -msgid "No valid currency codes provided" +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" msgstr "" -#: common/currency.py:156 -msgid "No plugin" +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" msgstr "" #: common/files.py:63 @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "משתמש" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "קישור" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "קובץ מצורף" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "קובץ חסר" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "חסר קישור חיצוני" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "בחר קובץ לצירוף" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "הערה" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "שם קובץ" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "מוקם" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5299,87 +4898,69 @@ msgstr "" msgid "Machine Config" msgstr "" -#: machine/models.py:156 -msgid "Config type" -msgstr "" - -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" -msgstr "" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" +#: machine/models.py:156 +msgid "Config type" msgstr "" -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" +#: order/admin.py:30 order/models.py:89 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 +msgid "Total Price" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "נשלח" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "אבד" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "הוחזר" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8496,110 +7843,102 @@ msgstr "לא פורטה הפעולה" #: plugin/base/action/api.py:41 msgid "No matching action found" -msgstr "פעולה מבוקשת לא נמצאה" - -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "" +msgstr "פעולה מבוקשת לא נמצאה" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 +msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "מצב טוב" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "דרושה תשומת לב" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "פגום" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "הרוס" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "נדחה" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "מיקום שונה" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "נשלח ללקוח" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "הוחזר מלקוח" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "אשר" @@ -11563,26 +10607,26 @@ msgstr "אשר" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 4f6ce2209a73..5fd43906bc41 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "तारीख दर्ज करें" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "पास वर्ड दर्ज करें" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "नया पासवर्ड दर्ज करें" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "पासवर्ड की पुष्टि करें" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "नए पासवर्ड की पुष्टि करें" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "पुराना पासवर्ड" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "ई-मेल" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index fdd0b307b462..12bfa8423ea3 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -48,38 +48,34 @@ msgstr "Hibás mennyiség" msgid "Invalid quantity supplied ({exc})" msgstr "Hibás mennyiség ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "A hiba részleteit megtalálod az admin panelen" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Megjegyzések" @@ -92,270 +88,250 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Jelszó megadása" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Új jelszó megadása" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Jelszó megerősítése" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Új jelszó megerősítése" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Régi jelszó" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (újra)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Email cím megerősítés" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Mindig ugyanazt az email címet kell beírni." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "MFA regisztráció nincs engedélyezve." - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "A megadott elsődleges email cím nem valós." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "A megadott email domain nincs jóváhagyva." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Regisztráció le van tiltva." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Hibás tartomány: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Hibás csoport-sor: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Az egyedi sorozatszámok számának ({len(serials)}) meg kell egyeznie a mennyiséggel ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arab" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bolgár" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Cseh" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dán" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Német" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Görög" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Angol" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spanyol (Mexikói)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Észt" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Fárszi/Perzsa" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finn" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francia" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Héber" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Magyar" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Olasz" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japán" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreai" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Litván" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Holland" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norvég" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Lengyel" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugál" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugál (Brazíliai)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Román" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Orosz" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Szlovák" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Szlovén" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Szerb" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Svéd" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tháj" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Török" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrán" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnámi" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kínai (egyszerűsített)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" @@ -364,310 +340,349 @@ msgstr "Kínai (Hagyományos)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Bejelentkezés" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Email" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Hiba a plugin validálása közben" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "A meta adatnak egy python dict objektumnak kell lennie" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Plugin meta adatok" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON meta adat mező, külső pluginok számára" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Helytelenül formázott minta" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Ismeretlen formátum kulcs lett megadva" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Hiányzó formátum kulcs" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Az azonosító mező nem lehet üres" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Az azonosítónak egyeznie kell a mintával" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Hiányzó fájl" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Hiányzó külső link" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Melléklet" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Válaszd ki a mellekelni kívánt fájlt" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link külső URL-re" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Megjegyzés" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Leírás, bővebb infó" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Felhasználó" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "feltöltés dátuma" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "A fájlnév nem lehet üres" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Érvénytelen melléklet mappa" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Fájlnévben érvénytelen karakter van '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Fájlnév kiterjesztése hiányzik" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Ilyen fájlnévvel már létezik melléklet" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Hiba a fájl átnevezésekor" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Név" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "szülő" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown megjegyzések (opcionális)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Felhasználónév" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Keresztnév" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "A felhasználó keresztneve" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Vezetéknév" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "A felhasználó vezetékneve" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "A felhasználó e-mail címe" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Személyzet" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Rendszergazda" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktív" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Aktív a felhasználói fiók" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Önnek nincs joga változtatni ezen a felhasználói szerepkörön." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Csak a superuser-ek hozhatnak létre felhasználókat" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Fájlnév" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Adat fájl" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Fájl kiválasztása feltöltéshez" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nem támogatott fájltípus" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Fájl túl nagy" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Nem találhatók oszlopok a fájlban" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Nincsenek adatsorok a fájlban" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Nincs adatsor megadva" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Nincs adat oszlop megadva" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Szükséges oszlop hiányzik: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikált oszlop: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Háttér folyamat ellenőrzés sikertelen" @@ -679,27 +694,223 @@ msgstr "Email backend nincs beállítva" msgid "InvenTree system health checks failed" msgstr "InvenTree rendszer állapotának ellenőrzése sikertelen" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Függőben" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Kiküldve" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Kész" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Törölve" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Elveszett" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Visszaküldve" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Folyamatban" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Kiszállítva" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "Rendben" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Ellenőrizendő" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Sérült" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Megsemmisült" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Elutasított" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Karanténban" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Örökölt készlet követési bejegyzés" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Készlet tétel létrehozva" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Szerkeszett készlet tétel" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Hozzárendelt sorozatszám" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Készlet leleltározva" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Készlet manuálisan hozzáadva" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Készlet manuálisan elvéve" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Hely megváltozott" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Készletadatok frissítve" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Gyártmányba beépült" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Gyártmányból eltávolítva" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Beépült összetevő tétel" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Eltávolított összetevő tétel" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Szülő tételből szétválasztva" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Szétválasztott gyermek tétel" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Összevont készlet tétel" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Alkatrészváltozattá alakítva" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Gyártási utasítás kimenete elkészült" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Gyártási utasítás kimenete kész" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Gyártási utasítás kimenete elutasítva" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Gyártásra felhasználva" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Vevői rendelésre kiszállítva" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Megrendelésre érkezett" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Visszavéve" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Vevőnek kiszállítva" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Vevőtől visszaérkezett" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Folyamatban" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Visszavétel" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Javítás" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Csere" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Visszatérítés" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Elutasított" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ismeretlen adatbázis" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Érvénytelen fizikai mértékegység" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Túlszállítás nem lehet negatív" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Túlszállítás nem lehet több mint 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Érvénytelen érték a túlszállításra" @@ -727,105 +938,62 @@ msgstr "Rendszerinformáció" msgid "About InvenTree" msgstr "Verzió információk" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "Lépcsőzetes" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Szülő gyártás" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "Hozzám rendelt" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Kiállította" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 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:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opcionális" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Gyártmány" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Követett" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Elérhető" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,920 +1004,709 @@ msgstr "Gyártási utasítás" msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Hibás választás a szülő gyártásra" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Meg kell adni felelős felhasználót vagy csoportot" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Azonosító" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Szülő gyártás" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Alkatrész" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:284 +#: build/models.py:222 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:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "elkészítette" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Indította" -#: build/models.py:362 +#: build/models.py:300 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:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Felelős" -#: build/models.py:371 +#: build/models.py:309 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:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Külső link" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link külső URL-re" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:651 build/models.py:778 -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:673 +#: build/models.py:581 #, 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:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:973 +#: build/models.py:811 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:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 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:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1616 +#: build/models.py:1434 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:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" -msgstr "Beépítés ebbe" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "Cél készlet tétel" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Alkatrész neve" +msgstr "Beépítés ebbe" -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "Projekt kód címke" +#: build/models.py:1588 +msgid "Destination stock item" +msgstr "Cél készlet tétel" -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:184 +#: build/serializers.py:172 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:188 +#: build/serializers.py:176 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:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:291 +#: build/serializers.py:269 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:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Hely" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "Legyártott készlet helye" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Hely" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Állapot" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:542 +#: build/serializers.py:512 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:654 -msgid "Consume Allocated Stock" -msgstr "Lefoglalt készlet felhasználása" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Lefoglalt készlet levonása" -#: build/serializers.py:655 -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:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Az összes lefoglalt tétel levonása a készletről" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:836 +#: build/serializers.py:752 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:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1058 +#: build/serializers.py:974 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:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1064 +#: build/serializers.py:980 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:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Nem sikerült az automatikus lefoglalás feladatot elindítani" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Gyártói cikkszám" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Hely neve" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Csomagolás" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Alkatrész ID" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "Alkatrész IPN" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Alkatrész leírása" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Sorozatszám" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "Lefoglalt mennyiség" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Elérhető mennyiség" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Követésre kötelezett" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Változatok" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Rendelve" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "Külső raktárkészlet" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Függőben" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Folyamatban" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "Felfüggesztve" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Törölve" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Kész" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "A gyártási utasításhoz készlet szükséges" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Késésben lévő gyártás" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" @@ -1765,8 +1722,8 @@ msgstr "Alkatrész bélyegkép" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Vonalkód műveletek" @@ -1777,7 +1734,7 @@ msgstr "Vonalkód műveletek" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR kód megjelenítése" @@ -1788,9 +1745,9 @@ msgstr "QR kód megjelenítése" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Vonalkód leválasztása" @@ -1801,7 +1758,7 @@ msgstr "Vonalkód leválasztása" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Vonalkód hozzárendelése" @@ -1825,135 +1782,121 @@ msgid "Edit Build" msgstr "Gyártás szerkesztése" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Gyártás másolása" +msgid "Cancel Build" +msgstr "Gyártás törlése" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Gyártás másolása" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Gyártás törlése" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Gyártás törlése" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Gyártás befejezése" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Gyártás leírása" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Ehhez a gyártási utasításhoz nem készült kimenet" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Gyártási utasítás elkészültnek jelölhető" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Befejezetlen gyártási kimenetek vannak" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Szükséges gyártási mennyiség még nincs meg" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Még nincs lefoglalva a szükséges készlet" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Cél dátum" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Ez a gyártás %(target)s-n volt esedékes" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Késésben" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Befejezett kimenetek" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Vevői rendelés" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Kiállította" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Prioritás" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Gyártási utasítás törlése" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Gyártási utasítás QR kódja" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Vonalkód gyártáshoz rendelése" @@ -1969,8 +1912,8 @@ msgstr "Készlet forrás" msgid "Stock can be taken from any available location." msgstr "Készlet bármely rendelkezésre álló helyről felhasználható." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Cél" @@ -1982,23 +1925,23 @@ msgstr "A cél hely nincs megadva" msgid "Allocated Parts" msgstr "Lefoglalt alkatrészek" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "Köteg" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Létrehozva" @@ -2007,8 +1950,8 @@ msgid "No target date set" msgstr "Nincs céldátum beállítva" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Kész" @@ -2016,13 +1959,13 @@ msgstr "Kész" msgid "Build not complete" msgstr "Gyártás nincs kész" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Alárendelt gyártások" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Készlet foglalása gyártáshoz" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2044,7 +1987,7 @@ msgstr "Automata foglalás" msgid "Manually allocate stock to build" msgstr "Manuális készlet foglalás a gyártáshoz" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Készlet foglalása" @@ -2059,7 +2002,7 @@ msgstr "Alkatrész rendelés" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "Az elérhető készlet szűrve lett a gyártási rendelés forrás készlethelyére" +msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" @@ -2073,19 +2016,15 @@ msgstr "Új gyártási kimenet létrehozása" msgid "New Build Output" msgstr "Új gyártási kimenet" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Felhasznált készlet" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Befejezett gyártási kimenetek" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2095,25 +2034,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Mellékletek" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Gyártási megjegyzések" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Lefoglalás kész" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Minden sor rendben lefoglalva" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Új gyártási utasítás" @@ -2121,57 +2060,10 @@ msgstr "Új gyártási utasítás" msgid "Build Order Details" msgstr "Gyártási utasítás részletei" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Sortételek" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Befejezetlen kimenetek" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Érvénytelen valuta kód" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Létező valuta kód" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Hiányzó érvényes valuta kód" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Nincsen plugin" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2210,1763 +2102,1623 @@ msgstr "{name.title()} Fájl" msgid "Select {name} file to upload" msgstr "{name} fájl kiválasztása feltöltéshez" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Frissítve" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "A site URL blokkolva van a konfigurációban" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Egyedi projektszám" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Nincs csoport" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Üres domain nem engedélyezett." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Érvénytelen domain név: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Nincsen plugin" + +#: common/models.py:1259 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Példány név használata" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Cég neve" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Belső cégnév" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Kiindulási URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Támogatott valuták" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Támogatott valuták listája" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Milyen gyakran frissítse az árfolyamokat (nulla a kikapcsoláshoz)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "nap" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Képek és fájlok letöltésének engedélyezése külső URL-ről" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "A külső URL-ről letöltéshez használt user-agent felülbírálásának engedélyezése (hagyd üresen az alapértelmezéshez)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Megerősítés igénylése" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Kérjen felhasználói megerősítést bizonyos műveletekhez" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Fa mélység" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Alapértelmezett mélység a fa nézetekben. A mélyebb szintek betöltődnek ha szükségesek." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Milyen gyakran ellenőrizze van-e új frissítés (0=soha)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Hány naponta készüljön automatikus biztonsági mentés" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Felhasználói értesítések törlése megadott nap eltelte után" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Vonalkód olvasó támogatás engedélyezése a web felületen" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Sablon" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Gyártmány" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Összetevő" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Értékesíthető" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Követésre kötelezett" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuális" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Importálás megjelenítése a nézetekben" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Import segéd megjelenítése néhány alkatrész nézetben" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "A megadott mértékegység csak a beállított lehetőségekből legyen elfogadva" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Belső árak" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Ha elérhetőek az árkalkulációkban a belső árak lesznek alapul véve" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Debug mód" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" -msgstr "Jelentési hibák naplózása" +msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" -msgstr "Jelentések generálása közben jelentkező hibák naplózása" +msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Lapméret" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Teszt riportok engedélyezése" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Teszt riportok előállításának engedélyezése" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Teszt riportok hozzáadása" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Teszt riport nyomtatáskor egy másolat hozzáadása a készlet tételhez" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Sorozatszámok automatikus kitöltése" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Sorozatszámok automatikus kitöltése a formokon" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" -msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Tulajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Beépített készlet tételek megjelenítése a készlet táblákban" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" -msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "A beépített tételeknek a szülő elem darabjegyzékében szerepelniük kell" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" +#: common/models.py:1779 +msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" -msgstr "Felelős tulajdonos szükséges" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "Minden rendeléshez felelőst kell rendelni" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" msgstr "" -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 +msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/models.py:1852 +#: common/models.py:1801 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" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/models.py:1866 +#: common/models.py:1815 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" +msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Visszavétel szerkesztésének engedélyezése befejezés után" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Beszérzési rendelések szerkesztésének engedélyezése kiküldés vagy befejezés után" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "A beszerzési rendelés automatikus befejezése ha minden sortétel beérkezett" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése SSO-n keresztül a bejelentkező oldalon" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Email szükséges" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Email kétszer" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Feliratkozás korlátozása megadott domain-ekre (vesszővel elválasztva, @-al kezdve)" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Csoport amihez a frissen regisztrált felhasználók hozzá lesznek rendelve" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "Frissítések periódikus ellenőrzésének engedélyezése a telepített pluginokra" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "Projektszámok használatának engedélyezése a projektek követéséhez" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Leltár funkció" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Leltár funkció engedélyezése a készlet mennyiség és érték számításhoz" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Külső helyek figyelmen kívül hagyása a leltár számításoknál" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Hány naponta történjen automatikus leltár (nulla egyenlő tiltva)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "Riport törlési gyakoriság" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Régi leltár riportok törlése hány naponta történjen" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" -msgstr "Teszt állomás adatok engedélyezése" +msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 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" +msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Nem aktív alkatrészek elrejtése a kezdőlapon" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Értesítésre beállított alkatrészek megjelenítése" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Alkatrész értesítések megjelenítése a főoldalon" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Értesítésre beállított kategóriák megjelenítése" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Alkatrész kategória értesítések megjelenítése a főoldalon" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Legújabb alkatrészek megjelenítése" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Legújabb alkatrészek megjelenítése a főoldalon" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" -msgstr "Hibás alkatrészjegyzékek megjelenítése" +msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Jóváhagyásra váró alkatrészjegyzékek megjelenítése a főoldalon" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Legfrissebb készlet változások megjelenítése" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Legutóbb megváltozott alkatrészek megjelenítése a főoldalon" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Alacsony készlet megjelenítése" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Alacsony készletek megjelenítése a főoldalon" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Kimerült készlet megjelenítése" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Kimerült készletek megjelenítése a főoldalon" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Gyártáshoz szükséges készlet megjelenítése" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Gyártáshoz szükséges készletek megjelenítése a főoldalon" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Lejárt készlet megjelenítése" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Lejárt készletek megjelenítése a főoldalon" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Állott készlet megjelenítése" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Álló készletek megjelenítése a főoldalon" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Függő gyártások megjelenítése" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Folyamatban lévő gyártások megjelenítése a főoldalon" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Késésben lévő gyártások megjelenítése" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Késésben lévő gyártások megjelenítése a főoldalon" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Kintlévő beszerzési rendelések megjelenítése" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Kintlévő beszerzési rendelések megjelenítése a főoldalon" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Késésben lévő megrendelések megjelenítése" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Késésben lévő megrendelések megjelenítése a főoldalon" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Függő vevői rendelések megjelenítése" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Függő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Késésben lévő vevői rendelések megjelenítése" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Késésben lévő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "Függő vevői szállítmányok megjelenítése" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "Folyamatban lévő vevői szállítmányok megjelenítése a főoldalon" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Hírek megjelenítése" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Hírek megjelenítése a főoldalon" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF címkék megjelenítése a böngészőben letöltés helyett" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Alapértelmezett címkenyomtató" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Melyik címkenyomtató legyen az alapértelmezett" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Beágyazott riport megjelenítés" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF riport megjelenítése a böngészőben letöltés helyett" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Alkatrészek keresése" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Beszállítói alkatrészek keresése" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Beszállítói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Gyártói alkatrészek keresése" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Gyártói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Inaktív alkatrészek kihagyása a keresési előnézet találataiból" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Kategóriák keresése" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Alkatrész kategóriák megjelenítése a keresési előnézetben" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Készlet keresése" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Készlet tételek megjelenítése a keresési előnézetben" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Nem elérhető készlet tételek elrejtése" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nem elérhető készlet kihagyása a keresési előnézet találataiból" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Helyek keresése" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Készlet helyek megjelenítése a keresési előnézetben" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Cégek keresése" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Cégek megjelenítése a keresési előnézetben" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Gyártási utasítások keresése" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Gyártási utasítások megjelenítése a keresés előnézet ablakban" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Beszerzési rendelések keresése" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Beszerzési rendelések megjelenítése a keresési előnézetben" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktív beszerzési rendelések kihagyása" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktív beszerzési rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Vevői rendelések keresése" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Vevői rendelések megjelenítése a keresési előnézetben" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Inaktív vevői rendelések kihagyása" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktív vevői rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Visszavétel keresése" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "Visszavételek megjelenítése a keresés előnézet ablakban" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "Inaktív visszavételek kihagyása" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "Inaktív visszavételek kihagyása a keresési előnézet találataiból" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Keresési előnézet eredményei" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "A keresési előnézetben megjelenítendő eredmények száma szekciónként" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Regex keresés" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "Reguláris kifejezések engedélyezése a keresésekben" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "Teljes szó keresés" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "A keresések csak teljes szóra egyező találatokat adjanak" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Mennyiség megjelenítése a formokon" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Rendelkezésre álló alkatrész mennyiség megjelenítése néhány formon" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "ESC billentyű zárja be a formot" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "ESC billentyű használata a modális formok bezárásához" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Rögzített menüsor" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "A menü pozíciója mindig rögzítve a lap tetején" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Dátum formátum" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Preferált dátum formátum a dátumok kijelzésekor" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Alkatrész ütemezés" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Alkatrész ütemezési információk megjelenítése" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Alkatrész leltár" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Alkatrész leltár információk megjelenítése (ha a leltár funkció engedélyezett)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Táblázati szöveg hossz" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "Maximális szöveg hossz ami megjelenhet a táblázatokban" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "Alapértelmezett alkatrész címke sablon" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "Az alapértelmezetten kiválasztott alkatrész címke sablon" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Alapértelmezett készlet címke sablon" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "Az alapértelmezetten kiválasztott készlet címke sablon" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "Alapértelmezett készlethely címke sablon" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "Az alapértelmezetten kiválasztott készlethely címke sablon" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "Hibariportok fogadása" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "Értesítések fogadása a rendszerhibákról" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" -msgstr "Utoljára használt nyomtató gépek" +msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" -msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Felhasználó" +msgstr "" -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Ár" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktív" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" -msgstr "Token" +msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Titok" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Fejléc" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Törzs" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" -msgstr "Azonosító" +msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Cím" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Link" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Közzétéve" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Szerző" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Elolvasva" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Kép" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Képfájl" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definíció" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "Mértékegység definíció" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Melléklet" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Hiányzó fájl" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Hiányzó külső link" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Válaszd ki a mellekelni kívánt fájlt" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Megjegyzés" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "Fájl mérete" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "Fájlméret bájtban" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3985,7 +3737,7 @@ msgstr "{verbose_name} megszakítva" msgid "A order that is assigned to you was canceled" msgstr "Egy hozzád rendelt megrendelés megszakítva" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Készlet érkezett" @@ -4001,103 +3753,66 @@ msgstr "Készlet érkezett vissza egy visszavétel miatt" msgid "Error raised by plugin" msgstr "Plugin hiba" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "Funkció" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Fájlnév" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "Modell típusa" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Üres domain nem engedélyezett." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Érvénytelen domain név: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4136,435 +3851,406 @@ msgstr "Importált alkatrészek" msgid "Previous Step" msgstr "Előző lépés" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "Az alkatrész aktív" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "A Gyártó Aktív" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" -msgstr "A Szállítói Alkatrész Aktív" +msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" -msgstr "A saját alkatrész Aktív" +msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" -msgstr "A Beszállító Aktív" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Cég" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Cégek" +msgstr "" -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Cég leírása" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "A cég leírása" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Weboldal" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Cég weboldala" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefonszám" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Kapcsolattartó telefonszáma" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Kapcsolattartó email címe" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Névjegy" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Kapcsolattartó" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" -msgstr "Ez a vállalat aktív?" - -#: company/models.py:168 -msgid "Is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:165 +msgid "is customer" +msgstr "vevő-e" + +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Értékesítesz alkatrészeket ennek a cégnek?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "beszállító-e" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Vásárolsz alkatrészeket ettől a cégtől?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "gyártó-e" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Gyárt ez a cég alkatrészeket?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Cég által használt alapértelmezett pénznem" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Cím" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Címek" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Cég" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Cég kiválasztása" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "Cím megnevezése" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "Címhez tartozó leírás, megnevezés" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "Elsődleges cím" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "Beállítás elsődleges címként" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "1. sor" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Cím első sora" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "2. sor" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Cím második sora" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Irányítószám" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Város/Régió" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "Irányítószám város/régió" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "Állam/Megye" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "Állam vagy megye" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Ország" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Cím országa" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Megjegyzés a futárnak" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Futárnak szóló megjegyzések" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Belső szállítási megjegyzések" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Szállítási megjegyzések belső használatra" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Gyártói alkatrész" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Kiindulási alkatrész" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Válassz alkatrészt" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Gyártó" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "MPN (Gyártói cikkszám)" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Gyártói cikkszám" -#: company/models.py:513 +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "URL link a gyártói alkatrészhez" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Gyártói alkatrész leírása" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Gyártói alkatrész" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Paraméter neve" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Érték" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Paraméter értéke" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Mértékegység" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Paraméter mértékegység" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Beszállítói alkatrész" - -#: company/models.py:719 +#: company/models.py:731 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:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" -#: company/models.py:740 +#: company/models.py:752 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:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Beszállító" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" -msgstr "Ez a szállítói termék aktív?" +msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Gyártói alkatrész kiválasztása" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "URL link a beszállítói alkatrészhez" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Megjegyzés" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "alap költség" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Csomagolás" + +#: company/models.py:864 msgid "Part packaging" msgstr "Alkatrész csomagolás" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Csomagolási mennyiség" -#: company/models.py:860 +#: company/models.py:871 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:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "többszörös" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Többszörös rendelés" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Beszállítónál elérhető mennyiség" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Elérhetőség frissítve" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "Készleten" @@ -4572,8 +4258,8 @@ msgstr "Készleten" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktív" @@ -4608,11 +4294,11 @@ msgstr "Cég törlése" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Alkatrész képe" @@ -4631,17 +4317,17 @@ msgstr "Kép letöltése URL-ről" msgid "Delete image" msgstr "Kép törlése" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Vevő" @@ -4649,12 +4335,19 @@ msgstr "Vevő" msgid "Uses default currency" msgstr "Alapértelmezett pénznemet használja" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Cím" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefonszám" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "Kép eltávolítása" @@ -4663,19 +4356,19 @@ msgid "Remove associated image from this company" msgstr "Céghez rendelt kép eltávolítása" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Törlés" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "Kép feltöltése" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "Kép letöltése" @@ -4691,7 +4384,7 @@ msgstr "Új beszállítói alkatrész létrehozása" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Új beszállítói alkatrész" @@ -4704,7 +4397,7 @@ msgstr "Gyártói alkatrészek" msgid "Create new manufacturer part" msgstr "Új gyártói alkatrész létrehozása" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Új gyártói alkatrész" @@ -4718,7 +4411,7 @@ msgstr "Beszállítói készlet" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4741,7 +4434,7 @@ msgstr "Új beszerzési rendelés" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4813,7 +4506,7 @@ msgstr "Gyártók" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Alkatrész rendelés" @@ -4828,8 +4521,7 @@ msgid "Delete manufacturer part" msgstr "Gyártói alkatrész törlése" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4839,7 +4531,7 @@ msgstr "Nincs elérhető gyártói információ" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4848,23 +4540,19 @@ msgstr "Beszállítók" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paraméterek" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Új paraméter" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "Paraméter hozzáadása" @@ -4888,6 +4576,19 @@ msgstr "Hozzárendelt készlet tételek" msgid "Contacts" msgstr "Névjegyek" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Címek" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Beszállítói alkatrész" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4896,7 +4597,7 @@ msgstr "Beszállítói alkatrész műveletek" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Alkatrész rendelése" @@ -4929,27 +4630,27 @@ msgstr "Beszállítói alkatrész törlése" msgid "No supplier information available" msgstr "Nincs elérhető beszállítói információ" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" -msgstr "SKU (leltári azonosító)" +msgstr "" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" msgstr "Beszállítói készlet" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Új készlet tétel létrehozása" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Új készlet tétel" @@ -4967,33 +4668,29 @@ msgstr "Árinformációk" msgid "Add Price Break" msgstr "Ársáv hozzáadása" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "Beszállítói alkatrész QR kód" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "Vonalkód hozzárendelése a beszállítói alkatrészhez" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "Alkatrész elérhetőség frissítése" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Készlet tételek" @@ -5019,238 +4716,136 @@ msgstr "Vevők" msgid "New Customer" msgstr "Új vevő" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Cégek" + #: company/views.py:52 msgid "New Company" msgstr "Új cég" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Kiküldve" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Oszlopok" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Adat" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "Hibák" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Érvényes" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" +#: label/api.py:247 +msgid "Error printing label" +msgstr "Címkenyomtatási hiba" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Címke neve" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Címke leírása" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Címke" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Címke sablon fájl" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Engedélyezve" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Címke sablon engedélyezve" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Szélesség [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Címke szélessége, mm-ben" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Magasság [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Címke magassága, mm-ben" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Fájlnév minta" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Minta a címke fájlnevek előállításához" -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "Lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Szűrők" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR kód" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR kód" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "Másolatok" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" -msgstr "Címkénkénti nyomtatandó mennyiség" +msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Ismeretlen" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "Nyomtatás" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "Nincs papír" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "Nincs kapcsolat" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "Címkenyomtató" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "Közvetlen címkenyomtatás különféle tételekre." +msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "Nyomtató helye" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" -msgstr "Nyomtató korlátozása egy készlethelyhez" +msgstr "" #: machine/models.py:25 msgid "Name of machine" @@ -5270,24 +4865,28 @@ msgstr "Illesztőprogram" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "Berendezéshez használható meghajtó" +msgstr "" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "A berendezések letilthatók" +msgstr "" #: machine/models.py:95 msgid "Driver available" -msgstr "Meghajtó elérhető" +msgstr "" #: machine/models.py:100 msgid "No errors" -msgstr "Nincsen hiba" +msgstr "" #: machine/models.py:105 msgid "Initialized" msgstr "Inicializálva" +#: machine/models.py:110 +msgid "Errors" +msgstr "Hibák" + #: machine/models.py:117 msgid "Machine status" msgstr "Gép állapot" @@ -5305,82 +4904,64 @@ msgid "Config type" msgstr "Konfiguráció típusa" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Teljes ár" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Rendelés állapota" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Rendelés azonosítója" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "Kintlévő" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Nincs egyező beszerzési rendelés" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Rendelés" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" -msgstr "A rendelés teljesítve" +msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" -msgstr "A rendelés függőben" +msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Visszavétel" @@ -5400,616 +4981,512 @@ msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelm msgid "Contact does not match selected company" msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Link külső weboldalra" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Készítette" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "Kapcsolattartó ehhez a rendeléshez" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "érkeztette" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Kiállítás dátuma" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Kiállítás dátuma" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:571 +#: order/models.py:545 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:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:991 +#: order/models.py:911 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:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "szállította" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "A rendelés nem teljesíthető mivel nincs hozzárendelve alkatrész" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1393 +#: order/models.py:1296 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:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Kontextus" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "törölve" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Mit szeretne a vevő hol tároljuk ezt az alkatrészt?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuális alkatrészt nem lehet vevői rendeléshez adni" -#: order/models.py:1642 +#: order/models.py:1528 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:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Kiszállítva" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 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:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 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:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Sor" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Tétel" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "Csak szériaszámos tételek rendelhetők visszaszállítási utasításhoz" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "Mikor lett visszavéve a tétel" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:2418 +#: order/models.py:2242 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:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "Kész sorok" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Beszállító neve" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 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:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:529 +#: order/serializers.py:459 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" +msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" -msgstr "Elemek összevonása" +msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 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:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Belső cikkszám" - -#: order/serializers.py:568 -msgid "Internal Part Name" msgstr "" -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:595 +#: order/serializers.py:506 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:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "A következő sorozatszámok már ki lettek osztva" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" -msgstr "Visszavétel sortétel" - -#: order/serializers.py:1758 -msgid "Line item does not match return order" -msgstr "Sortétel nem egyezik a visszavétellel" - -#: order/serializers.py:1761 -msgid "Line item has already been received" -msgstr "A sortétel már beérkezett" - -#: order/serializers.py:1790 -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:1873 -msgid "Line price currency" -msgstr "Sortétel pénzneme" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Elveszett" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Visszaküldve" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Folyamatban" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Visszavétel" +msgstr "Visszavétel sortétel" -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Javítás" +#: order/serializers.py:1652 +msgid "Line item does not match return order" +msgstr "Sortétel nem egyezik a visszavétellel" -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Csere" +#: order/serializers.py:1655 +msgid "Line item has already been received" +msgstr "A sortétel már beérkezett" -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Visszatérítés" +#: order/serializers.py:1684 +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/status_codes.py:113 -msgid "Reject" -msgstr "Elutasított" +#: order/serializers.py:1762 +msgid "Line price currency" +msgstr "Sortétel pénzneme" #: order/tasks.py:25 msgid "Overdue Purchase Order" @@ -6052,87 +5529,87 @@ msgid "Edit order" msgstr "Rendelés szerkesztése" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Rendelés másolása" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Rendelés törlése" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Rendelés másolása" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "Rendelés kiküldése" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Rendelés teljesítettnek jelölése" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Rendelés befejezése" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "Beszállítói alkatrész bélyegkép" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Rendelés azonosítója" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Rendelés leírása" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Nincs elérhető beszállítói információ" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Kész sortételek" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Hiányos" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Kiküldve" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Teljes költség" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "A teljes költség nem számolható" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "Beszerzési rendelés QR kódja" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "Vonalkód hozzáadása a beszerzési rendeléshez" @@ -6185,13 +5662,13 @@ msgstr "Kijelöltek másolása" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Sor törlése" @@ -6232,6 +5709,15 @@ msgstr "A rendelést már feldolgozták. Így már nem lehet fájlokat feltölte msgid "Step %(step)s of %(count)s" msgstr "%(step)s/%(count)s. lépés" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Sortételek" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Beérkezett készlet" @@ -6244,7 +5730,7 @@ msgstr "Beszerzési rendelés tételei" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Sortétel hozzáadása" @@ -6292,31 +5778,31 @@ msgstr "Visszavételi riport nyomtatása" msgid "Print packing list" msgstr "Csomagolási lista nyomtatása" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Vevői azonosító" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Teljes költség" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "Visszavétel QR kódja" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "Vonalkód visszavételhez rendelése" @@ -6328,36 +5814,31 @@ msgstr "Visszavétel részletei" msgid "Print sales order report" msgstr "Vevői rendelés nyomtatása" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Tételek kiszállítása" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Vevői rendelés befejezése, minden kiszállítva" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Ehhez a vevői rendeléshez nincs minden alkatrész lefoglalva" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "Vevő rendelés QR kódja" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "Vonalkód hozzáadása a vevői rendeléshez" @@ -6371,8 +5852,7 @@ msgid "Pending Shipments" msgstr "Függő szállítmányok" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Műveletek" @@ -6402,21 +5882,35 @@ msgstr "A {part} egységára {price}-ra módosítva" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "A {part} alkatrész módosított egységára {price} mennyisége pedig {qty}" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Alkatrész ID" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Alkatrész neve" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Alkatrész leírása" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" -msgstr "IPN (Belső Cikkszám)" +msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Változat" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Kulcsszavak" @@ -6424,16 +5918,15 @@ msgstr "Kulcsszavak" msgid "Part Image" msgstr "Alkatrész ábra" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "Kategória ID" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Kategória neve" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "Alapértelmezett készlethely ID" @@ -6441,11 +5934,11 @@ msgstr "Alapértelmezett készlethely ID" msgid "Default Supplier ID" msgstr "Alapértelmezett beszállító ID" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -6453,187 +5946,165 @@ msgstr "Minimális készlet" msgid "Used In" msgstr "Felhasználva ebben" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "Gyártásban" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Szülő ID" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Szülő neve" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Kategória elérési út" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Alkatrészek" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "Alkatrészjegyzék szint" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "Alkatrészjegyzék tétel ID" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "Szülő IPN" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "Alkatrész IPN" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minimum ár" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Maximum ár" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" -msgstr "Csillagozott" +msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" -msgstr "Csillagozottra szűrés" +msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" -msgstr "Mélység" +msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" -msgstr "Kategória mélységre szűrés" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "Felső szint" +msgstr "" -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" -msgstr "Szűrt eredmények tartalmazzák az alkategóriákat" +msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "Szülő" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" -msgstr "Szülő kategóriára szűrés" +msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" -msgstr "Fa kihagyása" +msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" -msgstr "Az adott kategória alkategóriáinak kihagyása" +msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" -msgstr "Van találat" +msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Beérkező beszerzési rendelés" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Kimenő vevői rendelés" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Gyártással előállított készlet" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "A gyártási utasításhoz szükséges készlet" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Érvényes" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Ennek az opciónak ki kll lennie választva" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategória" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" -msgstr "Használ" +msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Alapértelmezett hely" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Teljes készlet" @@ -6642,1148 +6113,1024 @@ msgstr "Teljes készlet" msgid "Input quantity for price calculation" msgstr "Add meg a mennyiséget az árszámításhoz" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Alkatrész kategória" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Szerkezeti" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Alapértelmezett kulcsszavak" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Ikon (opcionális)" -#: part/models.py:178 +#: part/models.py:148 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:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Hibás választás a szülő alkatrészre" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, 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:632 +#: part/models.py:551 #, 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:695 +#: part/models.py:616 #, 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:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 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:917 +#: part/models.py:801 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:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 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:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:1015 +#: part/models.py:887 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:1025 +#: part/models.py:897 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Belső cikkszám" + +#: part/models.py:912 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:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Alapértelmezett beszállító" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Alapértelmezett beszállítói alkatrész" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1130 +#: part/models.py:992 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:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1155 +#: part/models.py:1017 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:1161 +#: part/models.py:1023 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:1167 +#: part/models.py:1029 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:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 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:1185 +#: part/models.py:1041 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:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Utolsó leltár" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Dátum" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "További megjegyzések" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "Leltározta" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Riport" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "Leltár riport fájl (generált)" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Alkatrész szám" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "Leltározott alkatrészek száma" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "Felhasználó aki a leltár riportot kérte" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 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:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "A lehetőségek egyediek kell legyenek" +msgstr "" -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Teszt sablont csak követésre kötelezett alkatrészhez lehet csinálni" -#: part/models.py:3586 +#: part/models.py:3457 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" +msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" -msgstr "Teszt azonosító" +msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" -msgstr "Egyszerűsített Teszt azonosító" +msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Engedélyezve" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" -msgstr "Teszt engedélyezve?" +msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Kötelező" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3635 +#: part/models.py:3506 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:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3642 +#: part/models.py:3513 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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Lehetőségek" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "A lehetőségek egyediek kell legyenek" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Paraméter neve" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "Paraméter leírása" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: part/models.py:3793 +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "Lehetőségek" + +#: part/models.py:3645 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Szülő alkatrész" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Paraméter sablon" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Adat" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Paraméter értéke" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "Alkatrész ID vagy alkatrész név" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Egyedi alkatrész ID értéke" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Alkatrész IPN érték" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Szint" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "Alkatrészjegyzék szint" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4266 +#: part/models.py:4048 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:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Többlet" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Becsült gyártási veszteség (abszolút vagy százalékos)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4308 +#: part/models.py:4090 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:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Változatok" + +#: part/models.py:4096 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:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 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:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4572 +#: part/models.py:4354 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:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "Felsőbb szintű alkatrész kategória" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" -msgstr "Eredmények" +msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" -msgstr "Eszerint a sablon szerint rögzített eredmények száma" +msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" -msgstr "Ennyi alkatrész használja ezt a sablont" +msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Nincs kiválasztva alkatrész" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Válassz kategóriát" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:514 +#: part/serializers.py:480 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:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:539 +#: part/serializers.py:500 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:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" -msgstr "Variánsok Raktárkészlet" +msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:965 +#: part/serializers.py:880 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:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Leltár riport korlátozása bizonyos alkatrészre és variánsra" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Leltár riport korlátozása bizonyos alkatrész kategóriára és az alatta lévőkre" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Leltár riport korlátozása bizonyos készlethelyre és az alatta lévőkre" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "Külső készlet nélkül" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "Külső helyeken lévő készlet nélkül" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Riport létrehozása" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "Riport fájl létrehozása a számított leltár adatokkal" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Alaktrészek frissítése" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "Megadott alkatrészek frissítése a számított leltár adatokkal" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "Leltár funkció nincs engedélyezve" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, 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:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Gyártható" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1846 +#: part/serializers.py:1723 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:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1852 +#: part/serializers.py:1729 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:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Meglévő alkatrészjegyzék törlése" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "Meglévő alkatrészjegyzék tételek törlése a feltöltés előtt" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "Nincs megadva alkatrész oszlop" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "Több egyező alkatrész is található" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Nincs egyező alkatrész" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "Az alkatrész nem lett összetevőként jelölve" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Mennyiség nincs megadva" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Érvénytelen mennyiség" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "Legalább egy alkatrészjegyzék tétel szükséges" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Teljes mennyiség" @@ -7829,65 +7176,65 @@ msgstr "Ezt az alkatrészjegyzéket utoljára %(checker)s ellenőrizte %(check_d msgid "This BOM has not been validated." msgstr "Ez az alkatrészjegyzék még nincs jóváhagyva." -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Alkatrész kategória leltározása" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Értesítések beállítva erre a kategóriára" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Értesítések kérése erre a kategóriára" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Kategória műveletek" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Kategória törlése" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Kategória törlése" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Legfelső szintű alkatrész kategória" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Alkatrészek száma (alkategóriákkal együtt)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Alkatrész létrehozása" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Új alkatrész" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Alkatrész paraméterek" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Alkatrész kategória létrehozása" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Új kategória" @@ -7933,9 +7280,9 @@ msgid "Add stocktake information" msgstr "Leltár információ hozzáadása" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Leltár" @@ -7947,105 +7294,101 @@ msgstr "Alkatrész teszt sablonok" msgid "Add Test Template" msgstr "Teszt sablon hozzáadása" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Vevői rendeléshez foglalások" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Alkatrész megjegyzések" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Alkatrész változatok" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Új változat létrehozása" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Új változat" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Paraméter hozzáadása" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Kapcsolódó alkatrészek" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Kapcsolódó hozzáadása" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Alkatrészjegyzék" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Exportálási műveletek" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Alkatrészjegyzék exportálása" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Alkatrészjegyzék riport nyomtatása" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "Alkatrészjegyzék műveletek" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Alkatrészjegyzék feltöltése" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Alkatrészjegyzék jóváhagyása" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Alkatrészjegyzék tétel hozzáadása" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Gyártmányok" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Alkatrész gyártások" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Gyártáshoz foglalások" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Alkatrész beszállítók" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Alkatrész gyártók" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "Kapcsolódó alkatrész" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "Kapcsolódó alkatrész hozzáadása" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "Teszt eredmény sablon hozzáadása" @@ -8080,13 +7423,13 @@ msgstr "Alkatrész import sablon letöltése" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formátum" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Fájlfomátum kiválasztása" @@ -8104,7 +7447,7 @@ msgstr "Értesítések kérése erre az alkatrészre" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Címke nyomtatása" @@ -8114,7 +7457,7 @@ msgstr "Árinformációk megjelenítése" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Készlet műveletek" @@ -8126,7 +7469,7 @@ msgstr "Készlet számolása" msgid "Transfer part stock" msgstr "Készlet áthelyezése" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Készlet műveletek" @@ -8175,7 +7518,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Virtuális (nem kézzelfogható alkatrész)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Alkatrész részletei" @@ -8189,47 +7532,51 @@ msgstr "Gyártáshoz lefoglalva" msgid "Allocated to Sales Orders" msgstr "Vevő rendeléshez lefoglalva" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Gyártható" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Minimális készlet" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Ártartomány" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Legutolsó sorozatszám" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Sorozatszámra keresés" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "Alkatrész QR kódja" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "Vonalkód hozzárendelése az alkatrészhez" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "Számítás" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "Alkatrészhez rendelt kép eltávolítása" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "Nincs egyező kép" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "Részletek elrejtése" @@ -8283,13 +7630,13 @@ msgid "Variants" msgstr "Változatok" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Készlet" @@ -8325,17 +7672,17 @@ msgstr "Alkatrész árazás felülbírálása" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Szerkesztés" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Utoljára módosítva" @@ -8345,11 +7692,11 @@ msgstr "Árkategória" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "Minimum" +msgstr "" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "Maximum" +msgstr "" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" @@ -8407,9 +7754,9 @@ msgid "Update Pricing" msgstr "Árazás Frissítése" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Nincs készlet" @@ -8487,7 +7834,7 @@ msgstr "Az alkatrész képe nem található" msgid "Part Pricing" msgstr "Alkatrész árak" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin nem törölhető mivel még aktív" @@ -8499,108 +7846,100 @@ msgstr "Nincs megadva művelet" msgid "No matching action found" msgstr "Nincs egyező művelet" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Nincs egyező vonalkód" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Egyezés vonalkódra" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "Ez a vonalkód már egy másik tételé" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "Nem található megfelelő alkatrész adat" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "Nem található megfelelő beszállítói alkatrész" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "Több beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "Beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "Ez a termék már bevételezve" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "Beszállítói vonalkód nem található" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "Több egyező sortétel is található" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "Nincs egyező sortétel" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 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:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "Készlet tétel nem egyezik a sortétellel" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Nincs elegendő" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "Készlet tétel lefoglalva egy vevői rendeléshez" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "Nincs elég információ" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "A vonalkódhoz több beszállítói alkatrész is tartozik" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "A '{order}' rendeléshez több beszerzési rendelés is tartozik" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "A '{order}' rendeléshez nem tartozik beszerzési rendelés" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "A beszerzési rendelés nem egyezik a beszállítóval" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "Nem található függőben levő tétel a beszállítói alkatrészhez" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 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:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "Beszerzési rendelés tétele bevételezve" @@ -8608,90 +7947,82 @@ msgstr "Beszerzési rendelés tétele bevételezve" msgid "Scanned barcode data" msgstr "Beolvasott vonalkód" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "Tételekhez rendelendő Beszerzési Rendelés" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "Beszerzési rendelés nincs függőben" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "Bevételezési tételekhez rendelendő Beszerzési Rendelés" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "Beszerzési rendelés nincs elküdve" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "Bevételezés erre a készlet helyre" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "Struktúrális hely nem választható" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "Tételekhez rendelendő Vevői Rendelés" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "Vevői rendelés nincs függőben" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "Tételekhez rendelendő vevői rendelés sortétel" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "Tételekhez rendelendő vevői rendelés szállítmány" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "Szállítmány kiszállítva" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "Lefoglalandó mennyiség" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "Címkenyomtatás sikertelen" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "A címke PDF nyomtatása sikertelen" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "A címke HTML nyomtatása sikertelen" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" +msgstr "A címke PNG nyomtatása sikertelen" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "InventTree vonalkódok" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "Alapvető vonalkód támogatást ad" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8699,30 +8030,6 @@ msgstr "Alapvető vonalkód támogatást ad" msgid "InvenTree contributors" msgstr "InvenTree fejlesztők" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "InvenTree értesítések" @@ -8769,37 +8076,35 @@ msgstr "InvenTree Pénzváltó" msgid "Default currency exchange integration" msgstr "Alapértelmezett pénzváltó integráció" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF címkenyomtató" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "PDF címkék nyomtatásához beépített támogatás" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "Debug mód" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug mód engedélyezése - nyers HTML-t ad vissza PDF helyett" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "InvenTree címkenyomtató" +msgstr "" #: plugin/builtin/labels/inventree_machine.py:62 msgid "Provides support for printing using a machine" -msgstr "Nyomtatási támogatást nyújt egy Berendezés által" +msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "utoljára használva" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "Opciók" @@ -8823,7 +8128,7 @@ msgstr "Szegély" msgid "Print a border around each label" msgstr "Az egyes címkék körüli margó" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "Fekvő" @@ -8839,11 +8144,11 @@ msgstr "Inventree Címke Ív Nyomtató" msgid "Arrays multiple labels onto a single sheet" msgstr "Több címke egy ívre helyezése" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "Címke túl nagy a lapmérethez képest" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "Nem készült címke" @@ -8901,7 +8206,7 @@ msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" #: plugin/installer.py:197 msgid "Plugin installation is disabled" -msgstr "Plugin telepítés letiltva" +msgstr "" #: plugin/installer.py:248 msgid "Installed plugin successfully" @@ -8926,7 +8231,7 @@ msgstr "Plugin csomag neve nem található" #: plugin/installer.py:299 msgid "Plugin uninstalling is disabled" -msgstr "Plugin eltávolítás letiltva" +msgstr "" #: plugin/installer.py:303 msgid "Plugin cannot be uninstalled as it is currently active" @@ -8936,62 +8241,61 @@ msgstr "Plugin nem eltávolítható mivel még aktív" msgid "Uninstalled plugin successfully" msgstr "Plugin eltávolítása sikeres" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Plugin beállítás" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Plugin beállítások" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Kulcs" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Plugin kulcsa" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "PluginNeve a pluginnak" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Csomag neve" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "A telepített csomag neve, ha a plugin a PIP-el lett telepítve" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Aktív-e a plugin" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Beépítve" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Példa plugin" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Beépített plugin" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "Csomag plugin" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "Bővítmény" +msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Módszer" @@ -8999,17 +8303,17 @@ msgstr "Módszer" msgid "No author found" msgstr "Nincs szerző" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "A pluginhoz minimum {v} verzió kell" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "A pluginhoz maximum {v} verzió kell" @@ -9092,1193 +8396,908 @@ msgstr "Tlepítés nincs megerősítve" msgid "Either packagename of URL must be provided" msgstr "Vagy csomag nevet vagy URL-t meg kell adni" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Teljes újratöltés" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "A plugin tárolók teljes újratöltése" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Kényszerített újratöltés" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Akkor is töltse újra a plugin tárolót ha már be lett töltve" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "Pluginok begyűjtése" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "Pluginok begyűjtése és a tárolóhoz adása" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Plugin aktiválása" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "Plugin bekapcsolása" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "Konfiguráció törlése" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "Plugin konfiguráció törlése az adatbázisból" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Nincs érvényes objektum megadva a sablonhoz" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "Tételek" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "Címkenyomtatási hiba" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "A '{template}' sablon fájl hiányzik vagy nem érhető el" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Teszt riport" + +#: report/helpers.py:15 msgid "A4" -msgstr "A4" +msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" -msgstr "A3" +msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "Jogi információk" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "„Letter” méret" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Sablon neve" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Fájlnév minta" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Szűrők" +#: report/models.py:183 +msgid "Report template file" +msgstr "Riport sablon fájl" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Riport sablon leírása" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Riport verziószáma (automatikusan nő)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "Lapméret a PDF riportokhoz" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "Jelentés fekvő nézetben" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Szélesség [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Minta a riport fájlnevek előállításához" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Címke szélessége, mm-ben" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Riport sablon engedélyezve" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Magasság [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Készlet lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Címke magassága, mm-ben" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "Beépített tesztekkel együtt" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Gyártmányba beépített készlet tételek teszt eredményeivel együtt" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Gyártás szűrők" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "Haladás" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Gyártás lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Alkatrész szűrők" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "Alkatrész lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "Kimeneti Fájl" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Megrendelés lekérdezés szűrők" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Vevő rendelés lekérdezés szűrők" -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" +#: report/models.py:569 +msgid "Return order query filters" +msgstr "Visszavétel lekérdezés szűrők" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Részlet" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "Eszköz" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "Asset fájl leírása" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "Címke sablon választás" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR kód" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR kód" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "készlethely lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Szükséges alapanyagok" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Szükséges ehhez" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Beszállító törölve lett" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Egységár" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "Egyéb tételek" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Összesen" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Sorozatszám" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "Készlethely tételek" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Készlet tétel teszt riport" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Teszt eredmények" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "Teszt" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Eredmény" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Sikeres" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Sikertelen" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "Nincs eredmény (szükséges)" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Nincs eredmény" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Beépített tételek" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sorozatszám" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "A fájl nem létezik" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "A képfile nem található" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 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:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "company_image elem csak cég példánynál használható" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "Hely ID" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Hely neve" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Hely elérési út" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "Készlet tétel ID" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Státuszkód" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "Beszállítói cikkszám" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "Beszállító ID" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Beszállító neve" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "Vevő ID" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "Gyártás ID" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "Vevői rendelés ID" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "Vevői rendelés azonosító" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Felülvizsgálat szükséges" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "Törlés ha kimerül" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Lejárati dátum" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" -msgstr "Hely mélységre szűrés" - -#: stock/api.py:330 -msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" -msgstr "Szűrt eredmények tartalmazzák az alhelyeket" +msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" -msgstr "Szülő hely" +msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" -msgstr "Szülő helyre szűrés" +msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Állott" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "Készlethely típus" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "Készlethely típusok" -#: stock/models.py:91 +#: stock/models.py:90 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:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" -#: stock/models.py:189 +#: stock/models.py:167 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:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Külső" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "Ez egy külső készlethely" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Helyszín típusa" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "Tárolóhely típus" -#: stock/models.py:279 +#: stock/models.py:254 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:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:708 +#: stock/models.py:670 #, 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:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:748 +#: stock/models.py:712 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:761 +#: stock/models.py:725 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:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:799 +#: stock/models.py:763 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:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 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:830 +#: stock/models.py:794 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:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:921 +#: stock/models.py:885 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:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:960 +#: stock/models.py:924 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:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1525 +#: stock/models.py:1479 #, 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:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "A sorozatszám egész számok listája kell legyen" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" -msgstr "Ez a Teszt sablon nem létezik" +msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 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:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:1694 +#: stock/models.py:1648 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:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" -msgstr "A tesztet elvégző tesztállomás azonosítója" +msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" +#: stock/serializers.py:100 +msgid "Test template for this result" msgstr "" -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" +#: stock/serializers.py:119 +msgid "Template ID or test name must be provided" msgstr "" #: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "Az eredmény Teszt sablonja" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "Sablon azonosító vagy Teszt név szükséges" - -#: stock/serializers.py:286 msgid "The test finished time cannot be earlier than the test started time" -msgstr "A tesztet nem lehet a kezdésnél hamarabb befejezni" +msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "Szériaszám túl nagy" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Szülő tétel" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 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:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Lejárt" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Gyermek tételek" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 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:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 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:674 +#: stock/serializers.py:477 #, 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:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:817 +#: stock/serializers.py:620 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:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:947 +#: stock/serializers.py:720 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:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "Cél hely a visszatérő tételeknek" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 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:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "Felsőbb szintű készlet hely" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 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:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "Különböző állapotú készletek összevonásának engedélyezése" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "Legalább két készlet tételt meg kell adni" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "Nincs változás" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "Készlet tétel elsődleges kulcs értéke" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "Készlet tétel státusz kódja" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "Készlet tranzakció megjegyzései" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "Rendben" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Ellenőrizendő" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Sérült" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Megsemmisült" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Elutasított" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Karanténban" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Örökölt készlet követési bejegyzés" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Készlet tétel létrehozva" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Szerkeszett készlet tétel" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Hozzárendelt sorozatszám" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Készlet leleltározva" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Készlet manuálisan hozzáadva" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Készlet manuálisan elvéve" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Hely megváltozott" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Készletadatok frissítve" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Gyártmányba beépült" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Gyártmányból eltávolítva" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Beépült összetevő tétel" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Eltávolított összetevő tétel" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Szülő tételből szétválasztva" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Szétválasztott gyermek tétel" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Összevont készlet tétel" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Alkatrészváltozattá alakítva" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Gyártási utasítás kimenete elkészült" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Gyártási utasítás kimenete kész" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Gyártási utasítás kimenete elutasítva" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Gyártásra felhasználva" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Vevői rendelésre kiszállítva" +#: stock/serializers.py:1216 +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/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Megrendelésre érkezett" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "Legalább két készlet tételt meg kell adni" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Visszavéve" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "Nincs változás" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Vevőnek kiszállítva" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Vevőtől visszaérkezett" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "Készlet tétel státusz kódja" + +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "Készlet tranzakció megjegyzései" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10301,7 +9320,7 @@ msgstr "Teszt adatok" msgid "Test Report" msgstr "Teszt riport" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Teszt adatok törlése" @@ -10317,15 +9336,15 @@ msgstr "Készlet tétel megjegyzések" msgid "Installed Stock Items" msgstr "Beépített készlet tételek" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Készlet tétel beépítése" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Készlet tétel összes teszt eredményének törlése" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "Teszt eredmény hozzáadása" @@ -10338,8 +9357,8 @@ msgid "Scan to Location" msgstr "Áthelyezés kódolvasással" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Nyomtatási műveletek" @@ -10348,17 +9367,17 @@ msgid "Stock adjustment actions" msgstr "Készlet módosítási műveletek" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Leltározás" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Készlet növelése" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Készlet csökkentése" @@ -10367,12 +9386,12 @@ msgid "Serialize stock" msgstr "Sorozatszámok előállítása" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Készlet áthelyezése" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "Vevőhöz rendelése" @@ -10413,10 +9432,14 @@ msgid "Delete stock item" msgstr "Készlet tétel törlése" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Gyártás" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Szülő tétel" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nincs beállítva gyártó" @@ -10426,7 +9449,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Úgytűnik nem vagy ennek a tételnek a tulajdonosa. Ezt így nem tudod módosítani." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Csak olvasható" @@ -10470,8 +9493,12 @@ msgstr "követkető oldal" msgid "Navigate to next serial number" msgstr "Menj a következő sorozatszámhoz" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Elérhető mennyiség" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Nincs beállítva hely" @@ -10488,6 +9515,11 @@ msgstr "Ez a készlet tétel nem felelt meg az összes szükséges teszten" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Ez a készlet tétel lejárt %(item.expiry_date)s-n" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Lejárt" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10497,40 +9529,40 @@ msgstr "Ez a készlet tétel lejár %(item.expiry_date)s-n" msgid "No stocktake performed" msgstr "Még nem volt leltározva" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "készlet tétel" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "Készlet állapot szerkesztése" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "Készlet tétel QR kódja" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "Vonalkód hozzárendelése a készlet tételhez" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "Válassz a lenti alkatrész változatok közül" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Figyelem" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Ez a művelet nem vonható vissza könnyen" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "Készlet tétel konvertálása" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "Visszavétel készletre" @@ -10542,84 +9574,80 @@ msgstr "Sorszámozott készletek létrehozása ebből a készlet tételből." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Válassz mennyiséget és egyedi sorozatszámokat a sorozatszámozáshoz." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "Készlethely leltározása" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "Készlet hely keresése" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Készlet bevételezése erre a helyre" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Készlet vonalkódok beolvasása" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "Készlet tároló bevételezése erre a helyre" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "Tároló vonalkód beolvasása" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "Készlethely riport nyomtatása" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Hely műveletek" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Hely szerkesztése" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Hely törlése" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Legfelső szintű készlet hely" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Hely tulajdonosa" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Úgytűnik nem vagy ennek a készlethelynek a tulajdonosa. Ezt így nem tudod módosítani." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Új készlet hely létrehozása" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Új hely" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "készlet hely" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "Készlet tároló bevételezve erre a helyre" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "Készlet hely QR kódja" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "Vonalkód hozzárendelése a készlet helyhez" @@ -10635,6 +9663,10 @@ msgstr "Készlettörténet" msgid "Allocations" msgstr "Foglalások" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Gyermek tételek" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Hozzáférés megtagadva" @@ -10687,7 +9719,7 @@ msgstr "Az oldal jelenleg karbantartás alatt van, hamarosan újra használható #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "Index" +msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" @@ -10841,12 +9873,12 @@ msgstr "Belépési beállítások" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Kimenő email nincs beállítva. Néhány bejelentkezési és regisztrációs funkció nem fog megfelelően működni!" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Regisztráció" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "Single Sign On (SSO)" @@ -10866,7 +9898,7 @@ msgstr "Az alap URL-je ennek a pluginnak unknown on unknown" msgstr "ismeretlen az ismeretlenre" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "ismeretlen" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP cím" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Eszköz" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Legutóbbi tevékenységek" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s óta (ez a munkamenet)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s óta" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "Biztosan törölni szeretnéd a kiválasztott email címet?" @@ -11533,7 +10577,7 @@ msgid "Submit Bug Report" msgstr "Hibabejelentés küldése" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "vágólapra másolás" @@ -11555,7 +10599,7 @@ msgstr "Email cím megerősítése" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Erősítsd meg hogy a %(email)s email a %(user_display)s felhasználó email címe." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Megerősítés" @@ -11564,26 +10608,26 @@ msgstr "Megerősítés" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Ez az email megerősítő link lejárt vagy hibás. Klikk ide az új megerősítési kérelem elküldéséhez." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Bejelentkezés" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Még nem vagy regisztrálva?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Regisztráció" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Elfelejtett jelszó?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "vagy jelentkezz be a" @@ -11597,7 +10641,7 @@ msgid "Are you sure you want to sign out?" msgstr "Biztosan ki akarsz jelentkezni?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Vissza az alkalmazáshoz" @@ -11711,19 +10755,15 @@ msgstr "1. lépés" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Olvasd be a lenti QR kódot egy kiválaszott token generátorral (például a Google Authenticator-ral)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "2. lépés" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Írd be az app által létrehozott tokent:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Ellenőrzés" @@ -11788,7 +10828,7 @@ msgid "The following parts are low on required stock" msgstr "A következő alkatrészek szükséges készlete alacsony" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -11802,15 +10842,15 @@ msgid "Click on the following link to view this part" msgstr "Klikk a következő linkre az alkatrész megjelenítéséhez" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimum mennyiség" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "Nincs válasz" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "Nincs válasz az InvenTree kiszolgálótól" @@ -11822,27 +10862,27 @@ msgstr "Error 400: Rossz kérelem" msgid "API request returned error code 400" msgstr "Az API kérelem 400-as hibakódot adott vissza" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "Error 401: Nincs hitelesítve" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "Hitelesítési adatok nem lettek megadva" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "Error 403: Hozzáférés megtagadva" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "Nincs meg a szükséges jogosultságod, hogy elérd ezt a funkciót" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "Error 404: Erőforrás nem található" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "A kért erőforrás nem található a kiszolgálón" @@ -11854,11 +10894,11 @@ msgstr "Error 405: Metódus nincs engedélyezve" msgid "HTTP method not allowed at URL" msgstr "HTTP metódus nincs engedélyezve ezen az URL-n" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "Error 408: Időtúllépés" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "Időtúllépés a kiszolgálótól való adatlekérés közben" @@ -11890,27 +10930,27 @@ msgstr "Mellékletek törlése" msgid "Delete attachments" msgstr "Mellékletek törlése" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "Mellékletek műveletei" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "Nem találhatók mellékletek" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "Feltöltés dátuma" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "Melléklet törlése" @@ -11943,85 +10983,85 @@ msgid "Unknown response from server" msgstr "Ismeretlen válasz a kiszolgálótól" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "Érvénytelen válasz a szervertől" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "Nincs URL a válaszban" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "Ez törli a vonalkód hozzárendelést" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "Leválasztás" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "Készlet tétel törlése" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "Készlet bevételezése adott helyre" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "Készlet tétel vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "Bevételezés" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "Nincs vonalkód beolvasva" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "Készlet tétel már beolvasva" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "Készlet tétel már ezen a helyen van" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "Hozzáadott készlet tétel" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "Vonalkód nem egyezik egy ismert készlet tétellel sem" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "Készlet tároló bevételezése adott helyre" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "Készlet tároló vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "Készlet áthelyezése a leolvasott helyre" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" @@ -12038,8 +11078,8 @@ msgid "Row Data" msgstr "Sor adat" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12157,7 +11197,7 @@ msgstr "Alkatrészjegyzék betöltése az al-gyártmányhoz" msgid "Substitutes Available" msgstr "Vannak helyettesítők" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "Készletváltozatok engedélyezve" @@ -12177,30 +11217,30 @@ msgstr "Alkatrészjegyzék árazása nem teljes" msgid "No pricing available" msgstr "Nincsenek árak" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "Külső raktárkészlet" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "Nincs szabad" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "Változatokkal és helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "Változatokkal együtt" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Fogyóeszköz tétel" @@ -12232,7 +11272,7 @@ msgstr "Alkatrészjegyzék megtekintése" msgid "No BOM items found" msgstr "Nem találhatók alkatrészjegyzék tételek" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Szükséges alkatrész" @@ -12240,120 +11280,120 @@ msgstr "Szükséges alkatrész" msgid "Inherited from parent BOM" msgstr "Örökölve a szülő alkatrészjegyzéktől" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "Gyártási utasítás szerkesztése" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "Gyártási utasítás létrehozása" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "Gyártási utasítás törlése" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "Biztosan meg szeretnéd szakítani ezt a gyártást?" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "Ehhez a gyártáshoz készlet lett hozzárendelve" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "Ennek a gyártásnak befejezetlen kimenetei vannak" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "Gyártási utasítás készen áll a befejezésre" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "A rendelés nem jelölhető késznek mivel függő kimenetek vannak" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "Gyártási utasítás befejezetlen" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "Gyártási utasítás befejezése" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "Következő szabad sorozatszám" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "Legutolsó sorozatszám" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "Az alkatrészjegyzék követésre kötelezett alkatrészeket tartalmaz" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "A gyártási kimeneteket egyesével kell előállítani" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "A követésre kötelezett alkatrészekhez sorozatszámot lehet rendelni" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Adj meg sorozatszámokat a több egyedi gyártási kimenet létrehozásához" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "Gyártási kimenet létrehozása" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "Készlet tételek foglalása ehhez a gyártási kimenethez" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "Készlet felszabadítása a gyártási kimenetből" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "Gyártási kimenet befejezése" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "Gyártási kimenet selejtezése" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "Gyártási kimenet törlése" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Biztosan szeretnéd a már lefoglalt készlet tételeket felszabadítani ebből a gyártási utasításból?" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "Készlet tételek felszabadítása" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "Gyártási kimenetek kiválasztása" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "Legalább egy gyártási kimenetet ki kell választani" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "A kiválasztott gyártási kimenetek késznek lesznek jelölve" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "Kimenet" @@ -12377,263 +11417,231 @@ msgstr "A lefoglalt készlet már nem lesz elérhető" msgid "The completion status of the build order will not be adjusted" msgstr "A befejezési státusza a gyártásnak nem fog változni" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "Gyártási kimenetek selejtezése" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "A kiválasztott gyártási kimenetek törölve lesznek" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "A gyártási kimenet adatai véglegesen törölve lesznek" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "A lefoglalt készlet tételek újra készletre kerülnek" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "Gyártási kimenetek törlése" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 +#: templates/js/translated/build.js:960 msgid "No build order allocations found" msgstr "Nincs gyártási utasításhoz történő foglalás" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" +msgstr "Lefoglalt mennyiség" + +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "Hely nincs megadva" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "Kimenetek befejezése" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "Kimenetek selejtezése" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "Kimenetek törlése" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "gyártás kimenet" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "gyártás kimenetek" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "Gyártási kimenet műveletei" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "Nem található aktív gyártási kimenet" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "Lefoglalt sorok" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "Szükséges tesztek" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "Válassz alkatrészeket" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "Legalább egy alkatrész választása szükséges a foglaláshoz" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "Minden alkatrész lefoglalva" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "Minden kiválasztott alkatrész teljesen lefoglalva" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "Válassz forrás helyet (vagy hagyd üresen ha bárhonnan)" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "Készlet foglalása a gyártási utasításhoz" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "Nincs egyező készlethely" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "Nincs egyező készlet" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "Automatikus készlet foglalás" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "A készlet automatikusan lefoglalásra kerül ehhez a gyártási utasításhoz, a következő feltételek szerint" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Ha egy készlet hely meg van adva, akkor készlet csak arról a helyről lesz foglalva" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Ha a készlet helyettesíthetőnek minősül, akkor az első rendelkezésre álló helyről lesz lefoglalva" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Ha a helyettesítő készlet engedélyezve van, akkor ott az lesz használva ha az elsődleges alkatrésznek nincs készlete" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "Készlet tételek foglalása" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "Nincs a lekérdezéssel egyező gyártási utasítás" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Kiválaszt" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "Gyártás késésben van" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "Haladás" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "Nincs felhasználói információ" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "Foglalás szerkesztése" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "Foglalás törlése" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "gyártás sor" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "gyártás sorok" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "Nincsenek gyártási sorok" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Követésre kötelezett alkatrész" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "Mennyiségi egység" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Követett tétel" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "Egyedileg nyilvántartott tételek lefoglalása egyedi gyártási kimenetekhez" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "Készlet foglalások törlése" @@ -12780,7 +11788,7 @@ msgid "Delete Parameters" msgstr "Paraméterek törlése" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "Alkatrész rendelés" @@ -12797,34 +11805,34 @@ msgid "No manufacturer parts found" msgstr "Nincs gyártói alkatrész" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "Sablon alkatrész" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "Gyártmány alkatrész" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "Nem található paraméter" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "Paraméter törlése" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "Paraméter törlése" @@ -12878,119 +11886,119 @@ msgstr "Ársáv szerkesztése" msgid "Delete price break" msgstr "Ársáv törlése" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "igaz" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "hamis" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "Szűrő kiválasztása" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "Címkék nyomtatása" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "Riportok nyomtatása" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "Táblázat letöltése" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "Táblázat frissítése" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "Új szűrő hozzáadása" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "Összes szűrő törlése" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "Szűrő létrehozása" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "Művelet tiltva" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "Létrehozás nem engedélyezett" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "Módosítás nem engedélyezett" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "Törlés nem engedélyezett" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "Megtekintés nem engedélyezett" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "Form nyitva tartása" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "Adj meg egy érvényes számot" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Form hibák vannak" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "Nincs találat" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "Keresés" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "Bevitel törlése" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "Fájl oszlop" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "Mező név" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "Oszlopok kiválasztása" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "IGEN" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "NEM" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "Igaz" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "Hamis" @@ -12998,74 +12006,110 @@ msgstr "Hamis" msgid "No parts required for builds" msgstr "Nem szükséges alkatrész a gyártáshoz" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "Tételek kiválasztása" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "Nincs tétel kiválasztva a nyomtatáshoz" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "Nem található címke" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "Nem található címke sablon a kiválasztott tételekhez" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "kiválasztva" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "Nyomtatási beállítások" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "Címke nyomtatása" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "Címkék nyomtatása" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "Nyomtatás" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "Címke sablon választás" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "Plugin választás" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "Címkék nyomtatónak elküldve" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "Mégsem" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Küldés" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "Form megnevezése" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "Várakozás a kiszolgálóra..." -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "Hibainformációk megjelenítése" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "Elfogadás" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "Adatok betöltése" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "Rossz válasz a kiszolgálótól" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "Űrlap adat hiányzik a kiszolgálótól kapott válaszban" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "Form adat küldési hiba" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "JSON válasz hiányzó form adatok" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "Error 400: Rossz kérelem" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "A kiszolgáló 400-as hibakódot adott vissza" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "Form adat lekérése sikertelen" @@ -13075,7 +12119,7 @@ msgstr "Nem találhatók hírek" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "Azonosító" @@ -13103,404 +12147,400 @@ msgstr "Nincsenek olvasatlan értesítések" msgid "Notifications will load here" msgstr "Az értesítések itt fognak megjelenni" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "Egyéb tétel hozzáadása" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "Rendelés exportálása" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "Sor másolása" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "Sor törlése" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "Nem találhatók sortételek" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "Sor másolása" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "Sor törlése" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "Alkatrész tulajdonságok" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "Alkatrész létrehozási opciók" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "Alkatrész másolási opciók" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "Alkatrész kategória hozzáadása" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "Felsőbb szintű alkatrész kategória" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "Ikon (opcionális) - Az összes ikon felfedezése itt" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "Alkatrész kategória létrehozása" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "Új kategória létrehozása ez után" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "Alkatrész kategória létrehozva" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "Alkatrész kategória szerkesztése" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "Biztos hogy törölni szeretnéd ezt az alkatrész kategóriát?" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "Áthelyezés fentebbi kategóriába" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "Alkatrész kategória törlése" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "A kategóriában lévő alkatrészek kezelése" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "Alkategóriák kezelése" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "Alkatrész létrehozása" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "Új alkatrész létrehozása ez után" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "Alkatrész sikeresen létrehozva" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "Alkatrész szerkesztése" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "Alkatrész módosítva" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "Alkatrész változat létrehozása" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "Aktív alkatrész" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "Alkatrész nem törölhető mivel még aktív" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "Ezen alkatrész törlése nem vonható vissza" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "Ennek az alkatrésznek a teljes készlete törölve lesz" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "Ez az alkatrész minden alkatrészjegyzékből törölve lesz" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Ehhez az alkatrészhez rendelt minden beszállítói és gyártói információ törölve lesz" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Alkatrész törlése" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "Értesítések kérése erre a tételre" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "Értesítések letiltva erre a tételre" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "Az alkatrészjegyzék jóváhagyása minden sortételt jóvá fog hagyni" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "Alkatrészjegyzék jóváhagyása" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "Alkatrészjegyzék jóvá lett hagyva" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "Alkatrészjegyzék másolása" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "Alacsony készlet" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "Nincs elérhető készlet" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Igény" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Me" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "Virtuális alkatrész" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Értesítésre beállított alkatrész" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Értékesíthető alkatrész" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "Új leltár riport ütemezése." -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "Amint elkészül, az új leltár riport letölthető lesz." -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "Leltár riport létrehozása" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "Leltár riport beütemezve" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "Nincs elérhető leltár előzmény" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "Leltár bejegyzés szerkesztése" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "Leltár bejegyzés törlése" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "Nincs több változat" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "Nincs alkatrész paraméter sablon" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "Alkatrész paraméter sablon módosítása" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "Az összes erre a sablonra hivatkozó paraméter is törlésre kerül" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "Alkatrész paraméter sablon törlése" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "Nem található beszerzési rendelés" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "Ez a sortétel késésben van" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "Sortétel bevételezése" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "Nincs alkatrész" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "Kategória beállítása a kiválasztott alkatrészekhez" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "Alkatrész kategória beállítása" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "Kategória beállítása" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "alkatrész" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "alkatrészek" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "Nincs kategória" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Megjelenítés listaként" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "Megjelenítés rácsnézetként" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "Nem találhatóak alkategóriák" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Megjelenítés fában" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "Alkategóriák betöltése" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "Értesítésre beállított kategória" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "Nincs a lekérdezéssel egyező teszt sablon" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "találat" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" +msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" +msgstr "Teszt eredmény törlése" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "Ez a teszt a szülő alkatrészhez lett felvéve" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "Teszt eredmény sablon szerkesztése" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "Teszt eredmény sablon törlése" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "Nincs megadva dátum" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "A megadott dátum a múltban van" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Spekulatív" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "Az alkatrészhez nem áll rendelkezésre ütemezési információ" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "Hiba az alkatrész ütemezési információinak betöltésekor" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "Ütemezett készlet mennyiség" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Maximum mennyiség" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "Minimális készlet" @@ -13626,7 +12666,7 @@ msgstr "Beszerzési rendelés befejezése" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "Rendelés befejezettnek jelölése?" @@ -13639,6 +12679,7 @@ msgid "This order has line items which have not been marked as received." msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem érkeztek be." #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "A rendelés befejezettnek jelölésével annak adatai és sortételei a továbbiakban már nem lesznek szerkeszthetők." @@ -13685,7 +12726,7 @@ msgstr "Hozzáadás beszerzési rendeléshez" #: templates/js/translated/purchase_order.js:755 msgid "Merge" -msgstr "Összevonás" +msgstr "" #: templates/js/translated/purchase_order.js:859 msgid "No matching supplier parts" @@ -13696,12 +12737,12 @@ msgid "No matching purchase orders" msgstr "Nincsenek egyező beszerzési rendelések" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "Sortételek kiválasztása" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "Legalább egy sortételt ki kell választani" @@ -13713,137 +12754,139 @@ msgstr "Beérkezett mennyiség" msgid "Quantity to receive" msgstr "Érkező mennyiség" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "Készlet állapota" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "Vonalkód hozzáadása" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "Vonalkód eltávolítása" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "Add meg a helyet" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "Batch kód hozzáadása" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "Sorozatszám hozzáadása" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "Sorozatszámok" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "Rendelési kód" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "Érkező mennyiség" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "Bevételezés megerősítése" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "Beszerzési rendelés tételeinek bevételezése" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "Tétel vonalkód beolvasása" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Beérkezett tétel vonalkódjának leolvasása (egyik meglévő készlet tétellel sem egyezhet)" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "Érvénytelen vonalkód adat" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "Rendelés késésben" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "Tételek" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "Az összes kijelölt sortétel törlésre kerül" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "Töröljük a kiválasztott sortételeket?" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "Sortétel törlése" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "Sortétel törlése" -#: templates/js/translated/report.js:49 -msgid "Print Report" -msgstr "" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "kiválasztott tételek" -#: templates/js/translated/report.js:68 -msgid "Report print successful" -msgstr "" +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "Riport sablon kiválasztása" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" -msgstr "" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" +msgstr "Teszt riport sablon kiválasztása" + +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "Nem található riport" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" +msgstr "Nem található riport sablon a kiválasztott tételekhez" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 @@ -13874,25 +12917,25 @@ msgstr "Visszavétel törlése" msgid "Complete Return Order" msgstr "Visszavétel befejezése" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "Nem található visszavétel" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "Érvénytelen vevő" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "Visszavétel tételeinek bevételezése" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "Nincs egyező sortétel" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "Tétel bevételezve" @@ -13936,156 +12979,140 @@ msgstr "Függő szállítmányok kiszállítása" msgid "Skip" msgstr "Kihagyás" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem teljesítettek." -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "Vissza lett igazolva ez a vevői rendelés?" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "Vevői rendelés visszaigazolása" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "Vevő rendelés törlése" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "A rendelés törlésével annak adatai a továbbiakban már nem lesznek szerkeszthetők." -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "Szállítmány létrehozása" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "Nem található vevői rendelés" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "Szállítmány szerkesztése" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "Szállítmány kiszállítása" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "Szállítmány törlése" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "Szállítmány szerkesztése" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "Szállítmány törlése" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "Nincs egyező szállímány" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "Szállítmány azonosító" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "Nincs kiszállítva" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "Nyomkövetés" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "Számla" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "Szállítmány hozzáadása" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "Készlet foglalás megerősítése" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "Készlet foglalása a vevői rendeléshez" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "Nincs vevői rendeléshez történő foglalás" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "Törlési művelet megerősítése" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "Vevőnek kiszállítva" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "Készlethely nincs megadva" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "Sorozatszámok kiosztása" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "Készletrendelés" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "Árszámítás" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "Nem törölhető mivel a tételek ki lettek szállítva" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "Nem törölhető mivel tételek vannak lefoglalva" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "Sorozatszámok kiosztása" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "Egységár módosítása" @@ -14109,751 +13136,733 @@ msgstr "Eredmények összezárása" msgid "Remove results" msgstr "Eredmények eltávolítása" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "Készlet tétel sorszámozása" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "Készlet sorozatszámozás megerősítése" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "Alapértelmezett ikon minden készlethelyre melyhez nincs ikon rendelve (választható) - Válogass az ikonok közül" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "Felsőbb szintű készlet hely" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "Készlethely típus hozzáadása" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "Készlet hely szerkesztése" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "Új készlet hely" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "Új készlethely létrehozása ez után" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "Készlet hely létrehozva" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "Biztosan törölni szeretnéd ezt a készlet helyet?" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "Szülő készlet helyre mozgatás" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "Készlethely törlése" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "Műveletek az ezen a helyen lévő tételekhez" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "Műveletek az al-helyekhez" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "Ezt az alkatrészt nem lehet sorozatszámozni" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "Mennyiség hozzáadása csomagolási egységenként egyedi tételek helyett" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "Add meg a kezdeti mennyiséget ehhez a készlet tételhez" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Add meg az új készlet tételhez tartozó sorozatszámokat (vagy hagyd üresen)" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "Készlet tétel lemásolva" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "Készlet tétel másolása" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "Biztosan törölni szeretnéd ezt a készlet tételt?" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "Készlet tétel törlése" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "Készlet tétel szerkesztése" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "Új tétel létrehozása ez után" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "Készlet tétel létrehozva" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "Több készlet tétel létre lett hozva" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "Sorozatszám keresése" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "Sorozatszám megadása" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "Adj meg egy sorozatszámot" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "Nincs egyező sorozatszám" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "Több egyező eredmény is van" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "Készlet hozzárendelés jóváhagyása" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "Készlet vevőhöz rendelése" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "Figyelem: az összevonási művelet nem vonható vissza" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "Némi információ elveszik a készlet összevonás során" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "A készlettörténet törölve lesz az összevont tételeknél" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "A beszállítói alkatrész információk törlődnek az összevont tételeknél" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "Készlet összevonás megerősítése" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "Készlet tételek összevonása" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "Készlet áthelyezése" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "Áthelyezés" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "Leltározás" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "Leltár" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "Készlet csökkentése" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "Kivesz" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "Készlet növelése" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Hozzáad" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség nem módosítható" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "Készlet mennyiség megadása" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "Készlet tételek kiválasztása" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "Válassz legalább egy rendelkezésre álló készlet tételt" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "Készlet módosítás jóváhagyása" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "SIKER" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "SIKERTELEN" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "NINCS EREDMÉNY" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "Teszt sikeres" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "Teszt eredmény hozzáadása" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "Teszt eredmény szerkesztése" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "Teszt eredmény törlése" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "Nincs teszt eredmény" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "Teszt dátuma" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "Teszt elkezdődött" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "Teszt befejezve" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "Gyártásban" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "Beépítve készlet tételbe" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "Vevő rendeléshez hozzárendelve" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "Nincs hely megadva" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "Készlet állapot módosítása" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "Készlet összevonása" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "készlet tételek" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "Beolvasás helyre" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "Készlet műveletek" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "Beépített tételek betöltése" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "Készlet tétel gyártás alatt" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "Egyedi követésre kötelezett készlet tétel lefoglalva" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "Készlet tétel teljes egészében lefoglalva" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "Készlet tétel részben lefoglalva" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "Készlet tétel beépítve egy másikba" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "Készlet tétel fel lett használva egy gyártásban" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "Készlet tétel lejárt" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "Készlet tétel hamarosan lejár" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "Készlet tétel elutasítva" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "Készlet tétel elveszett" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "Készlet tétel megsemmisült" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Kimerült" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "Beszállítói alkatrész nincs megadva" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "Készletérték" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "Nincs a lekérdezésnek megfelelő készlet tétel" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "készlethelyek" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "Alhelyek betöltése" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "Részletek" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "Nincs változás" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "Alkatrész információ nem áll rendelkezésre" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "A hely már nem létezik" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "A gyártási utasítás már nem létezik" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "Beszerzési megrendelés már nem létezik" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "Vevői megrendelés már nem létezik" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "Visszavétel már nem létezik" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "Vevő már nem létezik" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "A készlet tétel már nem létezik" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "Hozzáadva" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "Eltávolítva" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "Nincsenek beépített tételek" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "Készlet tétel kiszedése" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "Válaszd ki a kiszedni való készlet tételt" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "Másik tétel beépítése ebbe a készlet tételbe" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Készlet tételek csak akkor építhetők be ha teljesítik a következő kritériumokat" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "A készlet tétel egy olyan alkatrészre mutat ami alkatrészjegyzéke ennek a készlet tételnek" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "A készlet tétel jelenleg elérhető készleten" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "A készlet tétel még nem épült be egy másik tételbe" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "A készlet tétel követett vagy sorozatszámmal vagy batch kóddal" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "Válaszd ki a beépítendő alkatrészt" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "Válassz ki egy vagy több készlet tételt" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "Kiválasztott készlet tételek" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "Készlet állapot módosítása" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "Van projektszáma" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "Rendelés állapota" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" -msgstr "" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "Kintlévő" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" +msgstr "Hozzám rendelt" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "Követésre kötelezett" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "Gyártmány alkatrész" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "Van elérhető készlete" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "Készlet változatok engedélyezése" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "Alhelyekkel együtt" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "Helyekkel együtt" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "Van készlethely típusa" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "Alkategóriákkal együtt" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "Értesítés beállítva" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "Sorozatszámos" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "Sorozatszám >=" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "Sorozatszám nagyobb vagy egyenlő mint" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "Sorozatszám <=" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "Sorozatszám kisebb vagy egyenlő mint" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "Sorozatszám" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "Batch kód" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "Aktív alkatrész" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "Aktív alkatrészek készletének megjelenítése" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "Az alkatrész egy gyártmány" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "Lefoglalt" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "Az tétel lefoglalásra került" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "Felhasználható készlet" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "Alhelyeken lévő készlettel együtt" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "Kimerült készlet tételek megjelenítése" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "Készleten lévő tételek megjelenítése" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "Gyártásban lévő tételek megjelenítése" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "Változatokkal együtt" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "Alkatrészváltozatok készletével együtt" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "Másik tételbe beépült tételek mutatása" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "Készlet tételek melyek hozzá vannak rendelve egy vevőhöz" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "Készlet állapota" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "Van batch kódja" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "Követett készlet tétel sorozatszámmal vagy batch kóddal" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "Van beszerzési ára" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "Beszerzési árral rendelkező készlet tételek megjelenítése" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "Lejárat előtt" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "Lejárat után" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "Lejárt készlet tételek megjelenítése" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "Hamarosan lejáró készlet tételek megjelenítése" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "Teszten megfelelt" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "Beépített tételekkel együtt" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "Gyártási állapot" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "Alkategóriákkal együtt" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "Aktív alkatrészek megjelenítése" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "Elérhető" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "Van mértékegysége" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "Az alkatrésznek van megadva mértékegysége" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "Van IPN-je" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "Van belső cikkszáma" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "Készleten" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "Beszerezhető" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "Volt leltár" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "Vannak lehetőségei" @@ -14925,6 +13934,10 @@ msgstr "Lapozó elrejtése/megjelenítése" msgid "Toggle" msgstr "Átváltás" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Oszlopok" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "Összes" @@ -14947,7 +13960,7 @@ msgstr "Új értesítések" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" -msgstr "Adminisztrátor" +msgstr "" #: templates/navbar.html:148 msgid "Logout" @@ -14961,22 +13974,6 @@ msgstr "Mentés" msgid "Show all notifications and history" msgstr "Összes értesítés és előzmény megjelenítése" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "Platform UI - az InvenTree új felhasználói felülete - még modernebb adminisztrációs lehetőséget biztosít." - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "Platform UI - az InvenTree új felhasználói felülete - készen áll a tesztelésre." - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "Próbáld ki most" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "itt" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Nincs QR kód adat megadva" @@ -15052,11 +14049,11 @@ msgstr "A kiválasztott SSO kiszolgáló érvénytelen, vagy nincs megfelelően #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "A %(provider_name)s fiókoddal fogsz belépni a %(site_name)s-re." +msgstr "" #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" -msgstr "Utolsó lépésként kérjük válaszoljon az alábbi kérdésekre" +msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 msgid "Provider has not been configured" @@ -15126,14 +14123,6 @@ msgstr "Email beállítások" msgid "Email settings not configured" msgstr "Email beállítások hiányoznak" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Igen" @@ -15176,7 +14165,7 @@ msgstr "A token lejárt" #: users/models.py:81 msgid "API Token" -msgstr "API Token" +msgstr "" #: users/models.py:82 msgid "API Tokens" @@ -15206,35 +14195,35 @@ msgstr "Token utolsó használata" msgid "Revoked" msgstr "Visszavonva" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Jogosultságok" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Csoport" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Nézet" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Jogosultság tételek megtekintéséhez" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Jogosultság tételek hozzáadásához" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Módosítás" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Jogosultság tételek szerkesztéséhez" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Jogosultság tételek törléséhez" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index d866386fc6af..a01f3f951252 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Detail terkait galat dapat dilihat di panel admin" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Catatan" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Masukkan sandi" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Masukkan kata sandi baru" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Konfirmasikan kata sandi" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Konfirmasi sandi baru" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Kata sandi lama" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (ulang)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Konfirmasi alamat email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Masukkan email yang sama." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Alamat surel utama yang diberikan tidak valid." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Domain surel yang diberikan tidak perbolehkan." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Hapus tag-tag HTML dari nilai ini" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Ceko" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Denmark" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Jerman" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Yunani" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Inggris" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spanyol (Meksiko)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persia" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Perancis" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Ibrani" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Hungaria" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Itali" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Jepang" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Korea" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Belanda" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norwegia" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polandia" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugis" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugis (Brasil)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Rusia" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Swedia" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turki" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnam" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Surel" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "File tidak ditemukan" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Tautan eksternal tidak ditemukan" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Lampiran" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Pilih file untuk dilampirkan" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Tautan" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Tautan menuju URL eksternal" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Komentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Komentar file" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Pengguna" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "tanggal diunggah" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Nama file tidak boleh kosong" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Direktori lampiran tidak valid" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Nama file mengandung karakter yang tidak diperkenankan '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Nama file tidak memiliki ekstensi" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Lampiran dengan nama file ini sudah ada" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Kesalahan merubah nama file" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "induk" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Nama File" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "File data" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Pilih file untuk diunggah" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Jenis file tidak didukung" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Ukuran file terlalu besar" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Tidak ditemukan kolom dalam file" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Tidak ditemukan barisan data dalam file" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Tidak ada barisan data tersedia" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Tidak ada kolom data tersedia" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Kolom yang diperlukan kurang: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Kolom duplikat: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "Pengecekan kesehatan sistem InvenTree gagal" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Diletakkan" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Selesai" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Dibatalkan" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Hilang" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Dikembalikan" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Dikirim" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Butuh perhatian" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Rusak" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Hancur" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Ditolak" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Item stok dibuat" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Item stok diubah" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Nomor seri yang ditetapkan" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Stok terhitung" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Stok yang ditambahkan manual" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Stok yang dikurangi manual" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Lokasi berubah" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Dirakit ke" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Diambil dari" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Komponen terpasang" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Komponen terlepas" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Dipisah dari item induk" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Pisah item dari barang induk" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Stok item digabungkan" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Dikonversi ke variasi" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Output order produksi dibuat" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Order output produksi selesai" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Terpakai oleh order produksi" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Terkirim ke pelanggan" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Dikembalikan pelanggan" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produksi" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Nilai kelebihan tidak boleh negatif" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Kelebihan tidak boleh melebihi 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Nilai kelebihan tidak valid" @@ -727,105 +938,62 @@ msgstr "Informasi Sistem" msgid "About InvenTree" msgstr "Tentang InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Produksi Induk" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Order Produksi" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Order Produksi" msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Pilihan produksi induk tidak valid" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referensi" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Produksi Induk" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Produksi induk dari produksi ini" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Bagian" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Order penjualan yang teralokasikan ke pesanan ini" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Tautan menuju URL eksternal" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Lokasi" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Lokasi" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produksi" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Dibatalkan" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Selesai" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Stok dibutuhkan untuk order produksi" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Tampilkan kode QR" @@ -1787,9 +1744,9 @@ msgstr "Tampilkan kode QR" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Ubah Produksi" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" +msgid "Cancel Build" +msgstr "Batalkan Produksi" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Batalkan Produksi" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Hapus Produksi" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Selesaikan Produksi" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Deskripsi Produksi" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Tidak ada hasil pesanan yang dibuat oleh pesanan ini" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Surel diperlukan" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Pengguna" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Tautan" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Lampiran" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "File tidak ditemukan" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Tautan eksternal tidak ditemukan" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Pilih file untuk dilampirkan" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Komentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nama File" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Diletakkan" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Dikirim" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Hilang" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Dikembalikan" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Tidak ada tindakan yang ditentukan" msgid "No matching action found" msgstr "Aksi tidak ditemukan" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "Lampiran perlu diunggah untuk tes ini" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Butuh perhatian" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Rusak" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Hancur" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Ditolak" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Item stok dibuat" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Item stok diubah" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Nomor seri yang ditetapkan" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stok terhitung" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Stok yang ditambahkan manual" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Stok yang dikurangi manual" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Lokasi berubah" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Dirakit ke" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Diambil dari" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Komponen terpasang" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Komponen terlepas" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Dipisah dari item induk" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Pisah item dari barang induk" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Stok item digabungkan" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Dikonversi ke variasi" +msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Output order produksi dibuat" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" +msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Order output produksi selesai" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Terpakai oleh order produksi" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Terkirim ke pelanggan" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Dikembalikan pelanggan" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Produksi" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Alamat surel berikut dikaitkan dengan akun Anda:" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "Alamat IP" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Perangkat" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Aktivitas Terakhir" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "Konfirmasi alamat surel" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Harap konfirmasikan bahwa %(email)s adalah alamat surel untuk pengguna %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Konfirmasi" @@ -11563,26 +10607,26 @@ msgstr "Konfirmasi" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Simpan" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "Pengaturan Surel" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index f5e08497eef4..440d5822c304 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,18 +17,18 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "Unità fornita non valida ({unit})" +msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" @@ -48,38 +48,34 @@ msgstr "Quantità fornita non valida" msgid "Invalid quantity supplied ({exc})" msgstr "Quantità fornita non valida ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministrazione" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Note" @@ -92,582 +88,601 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Inserire la password" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Inserire una nuova password" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Conferma la password" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Conferma la nuova password" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Vecchia password" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (ancora)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Conferma indirizzo email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "È necessario digitare la stessa e-mail ogni volta." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "L'indirizzo email principale fornito non è valido." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "L'indirizzo di posta elettronica fornito non è approvato." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "La registrazione è disabilitata." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Intervallo di gruppo non valido: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Sequenza di gruppo non valida: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Il numero di numeri di serie univoci ({len(serials)}) deve corrispondere alla quantità ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arabo" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgaro" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Ceco" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danese" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Tedesco" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Greco" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Inglese" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estone" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persiano" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finlandese" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francese" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ungherese" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italiano" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Coreano" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Lettone" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Olandese" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polacco" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portoghese" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portoghese (Brasile)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumeno" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russo" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" -msgstr "Slovacco" +msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Sloveno" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbo" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Svedese" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thailandese" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turco" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ucraino" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Cinese (Semplificato)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Accedi all'app" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Email" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "Errore nell'eseguire la convalida del plugin" +msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "I metadati devono essere un oggetto python dict" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Metadati Plugin" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Campo di metadati JSON, da utilizzare con plugin esterni" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Schema formattato impropriamente" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Formato chiave sconosciuta" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Formato chiave mancante" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Il campo di riferimento non può essere vuoto" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Il campo deve corrispondere al modello richiesto" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "File mancante" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Link esterno mancante" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Allegato" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Seleziona file da allegare" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Collegamento" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link a URL esterno" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Commento" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Commento del file" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Utente" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "data caricamento" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Il nome del file non deve essere vuoto" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Directory allegati non valida" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Il nome del file contiene caratteri non validi '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Nome file estensione mancante" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Esiste già un allegato con questo nome di file" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Errore nella rinominazione del file" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "genitore" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Note di Markdown (opzionale)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nome utente" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Nome" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Nome dell'utente" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Cognome" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Cognome dell'utente" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Indirizzo email dell'utente" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Staff" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Questo utente ha i permessi dello staff" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Superuser" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Questo utente è un superutente" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Attivo" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Questo account utente è attivo" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Non hai i permessi per cambiare il ruolo dell'utente." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Solo i superutenti possono creare nuovi utenti" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." -msgstr "Il tuo account è stato creato." +msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" -msgstr "Si prega di utilizzare la funzione di reset password per accedere" +msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" -msgstr "Benvenuto in InvenTree" +msgstr "" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Nome del file" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "File dati" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Seleziona un file per il caricamento" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Formato file non supportato" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "File troppo grande" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Nessun colonna trovata nel file" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Nessuna riga di dati trovata nel file" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Nessun dato fornito" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Nessuna colonna di dati fornita" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonna richiesta mancante: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonna duplicata: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Controllo in background non riuscito" @@ -679,27 +694,223 @@ msgstr "Server di posta non configurato" msgid "InvenTree system health checks failed" msgstr "Controlli di sistema InvenTree falliti" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "In attesa" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Inviato" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Completo" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Annullato" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Perso" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Reso" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "In corso" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Spedito" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Attenzione necessaria" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Danneggiato" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Distrutto" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Respinto" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "In quarantena" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Voce di tracciamento stock preesistente" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Elemento stock creato" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Elemento stock modificato" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Numero di serie assegnato" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Stock contato" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Stock aggiunto manualmente" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Stock rimosso manualmente" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Posizione cambiata" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Stock aggiornato" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Installato nell'assemblaggio" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Rimosso dall'assemblaggio" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Componente installato" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Elemento componente rimosso" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Diviso dall'elemento genitore" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Dividi elemento figlio" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Elemento stock raggruppato" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Convertito in variante" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Genera l'output dell'ordine creato" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Build order output completato" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Ordine di costruzione rifiutato" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Impegnato dall'ordine di costruzione" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Spedito contro l'ordine di vendita" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Ricevuto contro l'ordine di acquisto" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Restituito contro l'ordine di ritorno" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Inviato al cliente" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Restituito dal cliente" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produzione" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Indietro" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Riparare" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Sostituire" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Rimborso" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Rifiuta" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Database sconosciuto" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Unità fisica non valida" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Il sovra-valore non può essere negativo" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "L'eccesso non deve superare il 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Valore non valido per eccedenza" @@ -727,105 +938,62 @@ msgstr "Informazioni sistema" msgid "About InvenTree" msgstr "Informazioni Su InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Produzione Genitore" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Inviato da" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opzionale" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Assemblaggio" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allocato" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Disponibile" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Ordine di Produzione" msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "Assembly BOM non è stato convalidato" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "L'ordine di generazione non può essere creato per una parte inattiva" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Scelta non valida per la produzione genitore" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "L'utente o il gruppo responsabile deve essere specificato" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Riferimento" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Produzione Genitore" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Articolo" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "Completato da" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link a URL esterno" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Installa in" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Nome Articolo" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Posizione" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Posizione" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Stato" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:542 +#: build/serializers.py:512 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:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Rimuovi Giacenze Allocate" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Detrai qualsiasi scorta che è stata già assegnata a questa produzione" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1064 +#: build/serializers.py:980 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:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Codice articolo produttore" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Nome Ubicazione" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Confezionamento" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Codice Articolo" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN Articolo" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Descrizione Articolo" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Numero Seriale" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Quantità Disponibile" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Tracciabile" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Consenti Le Varianti" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Ordinato" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "In attesa" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produzione" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Annullato" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Completo" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Giacenza richiesta per l'ordine di produzione" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Ordine di produzione in ritardo" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" @@ -1764,8 +1721,8 @@ msgstr "Anteprima parte" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Azioni Barcode" @@ -1776,7 +1733,7 @@ msgstr "Azioni Barcode" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Mostra QR Code" @@ -1787,9 +1744,9 @@ msgstr "Mostra QR Code" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Scollega Codice a Barre" @@ -1800,7 +1757,7 @@ msgstr "Scollega Codice a Barre" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Collega Codice a Barre" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Modica Produzione" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Duplica Produzione" +msgid "Cancel Build" +msgstr "Annulla Produzione" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Duplica Produzione" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Annulla Produzione" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Elimina Produzione" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Completa Produzione" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Descrizione Produzione" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Nessun output di produzione è stato creato per questo ordine di produzione" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "L'ordine di produzione è pronto per essere contrassegnato come completato" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordine di produzione non può essere completato poiché gli output rimangono in sospeso" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Lo stock non è stato completamente assegnato a questo ordine di produzione" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Data scadenza" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Questa produzione era in scadenza il %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "In ritardo" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Outputs Completati" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Ordini di Vendita" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Inviato da" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Priorità" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Elimina ordine di produzione" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Genera Codice QR Ordine di produzione" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Collega il codice a barre all'ordine di produzione" @@ -1968,8 +1911,8 @@ msgstr "Risorse di magazzino" msgid "Stock can be taken from any available location." msgstr "Lo stock può essere prelevato da qualsiasi posizione disponibile." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Destinazione" @@ -1981,23 +1924,23 @@ msgstr "Posizione di destinazione non specificata" msgid "Allocated Parts" msgstr "Articoli Assegnati" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Lotto" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Creato" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Nessuna data di destinazione impostata" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Completato" @@ -2015,13 +1958,13 @@ msgstr "Completato" msgid "Build not complete" msgstr "Build Completata" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Ordine di Produzione Subordinato" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Assegna Scorte alla Produzione" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Assegnazione Automatica" msgid "Manually allocate stock to build" msgstr "Assegna manualmente le scorte per la produzione" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Assegna Scorte" @@ -2072,19 +2015,15 @@ msgstr "Crea nuova produzione" msgid "New Build Output" msgstr "Nuova Produzione" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Produzioni Completate" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Allegati" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Genera Note" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Nuovo Ordine di Produzione" @@ -2120,57 +2059,10 @@ msgstr "Nuovo Ordine di Produzione" msgid "Build Order Details" msgstr "Dettagli Ordine di Produzione" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Elementi Riga" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Output Incompleti" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1761 +2101,1621 @@ msgstr "" msgid "Select {name} file to upload" msgstr "Seleziona il file {name} da caricare" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Codice unico del progetto" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Nessun gruppo" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Un dominio vuoto non è consentito." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Nome dominio non valido: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nome azienda" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "URL Base" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "giorni" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Consenti di sovrascrivere l'user-agent utilizzato per scaricare immagini e file da URL esterno (lasciare vuoto per il predefinito)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Richiesta conferma" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Richiede una conferma esplicita dell'utente per una determinata azione." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Profondità livelli" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondità predefinita per la visualizzazione ad albero. I livelli più in alto possono essere caricati più lentamente quando necessari." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Quanto spesso controllare gli aggiornamenti (impostare a zero per disabilitare)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" - -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 -msgid "Part Revisions" -msgstr "" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "Abilita il campo revisione per l'articolo" - -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" +#: common/models.py:1429 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" +#: common/models.py:1434 +msgid "Part Revisions" msgstr "" -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +#: common/models.py:1435 +msgid "Enable revision field for Part" +msgstr "Abilita il campo revisione per l'articolo" -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Modello" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Assemblaggio" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Componente" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Acquistabile" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Vendibile" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Tracciabile" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuale" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Mostra l'importazione nelle viste" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Risoluzione DPI quando si generano file di immagine da fornire ai plugin di stampa per etichette" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Abilita Rapporto di Prova" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Allega Rapporto di Prova" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Quando si stampa un rapporto di prova, allegare una copia del rapporto di prova all'elemento di magazzino associato" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Auto Riempimento Numeri Seriali" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Auto riempimento numeri nel modulo" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di acquisto dopo che sono stati spediti o completati" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Abilita l'auto-registrazione tramite SSO per gli utenti nelle pagine di accesso" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Posta due volte" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Al momento della registrazione chiedere due volte all'utente l'indirizzo di posta elettronica" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Password due volte" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Gruppo a cui i nuovi utenti vengono assegnati al momento della registrazione" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controlla che tutti i plugin siano installati all'avvio - abilita in ambienti contenitore" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Funzionalità Dell'Inventario" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Abilita la funzionalità d'inventario per la registrazione dei livelli di magazzino e il calcolo del valore di magazzino" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Numero di giorni tra la registrazione automatica dell'inventario (imposta 0 per disabilitare)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "I rapporti d'inventario verranno eliminati dopo il numero specificato di giorni" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Mostra articoli sottoscritti" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Mostra gli articoli sottoscritti nella homepage" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Mostra gli ultimi articoli sulla homepage" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Mostra le distinte base che attendono la convalida sulla homepage" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Mostra le modifiche recenti alle giacenze" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Mostra le giacenze modificate di recente nella homepage" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Mostra disponibilità scarsa delle giacenze" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Mostra disponibilità scarsa degli articoli sulla homepage" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Mostra disponibilità scarsa delle scorte degli articoli sulla homepage" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Mostra scorte necessarie" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Mostra le scorte degli articoli necessari per la produzione sulla homepage" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Mostra gli articoli stock scaduti nella home page" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Mostra scorte obsolete" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Mostra gli elementi obsoleti esistenti sulla home page" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Mostra produzioni in attesa" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Mostra produzioni in attesa sulla homepage" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Mostra produzioni in ritardo" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Mostra produzioni in ritardo sulla home page" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Mostra ordini di produzione inevasi" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Mostra ordini di produzione inevasi sulla home page" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Mostra Ordini di Produzione in ritardo" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Mostra Ordini di Produzione in ritardo sulla home page" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Mostra Ordini di Vendita inevasi" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Mostra Ordini di Vendita inevasi sulla home page" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Mostra Ordini di Vendita in ritardo" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Mostra Ordini di Vendita in ritardo sulla home page" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Mostra Notizie" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Mostra notizie sulla home page" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Stampante per etichette predefinita" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Configura quale stampante di etichette deve essere selezionata per impostazione predefinita" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Cerca Articoli" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Mostra articoli della ricerca nella finestra di anteprima" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Mostra articoli del fornitore nella finestra di anteprima" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Cerca Articoli Produttore" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Mostra articoli del produttore nella finestra di anteprima" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Escludi articoli inattivi dalla finestra di anteprima della ricerca" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Cerca Categorie" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Mostra categorie articolo nella finestra di anteprima di ricerca" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Cerca Giacenze" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Mostra articoli in giacenza nella finestra di anteprima della ricerca" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Nascondi elementi non disponibili" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Escludi gli elementi stock che non sono disponibili dalla finestra di anteprima di ricerca" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Cerca Ubicazioni" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Mostra ubicazioni delle giacenze nella finestra di anteprima di ricerca" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Cerca Aziende" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Mostra le aziende nella finestra di anteprima di ricerca" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Cerca Ordini Di Produzione" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Mostra gli ordini di produzione nella finestra di anteprima di ricerca" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Cerca Ordini di Acquisto" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Mostra gli ordini di acquisto nella finestra di anteprima di ricerca" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Escludi Ordini D'Acquisto Inattivi" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Escludi ordini di acquisto inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Cerca Ordini Di Vendita" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Visualizzazione degli ordini di vendita nella finestra di anteprima della ricerca" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Escludi Ordini Di Vendita Inattivi" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Escludi ordini di vendita inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Cerca Ordini Di Reso" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Numero di risultati da visualizzare in ciascuna sezione della finestra di anteprima della ricerca" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Ricerca con regex" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Mostra quantità nei moduli" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Visualizzare la quantità di pezzi disponibili in alcuni moduli" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "Il tasto Esc chiude i moduli" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Utilizzare il tasto Esc per chiudere i moduli modali" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Barra di navigazione fissa" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "La posizione della barra di navigazione è fissata nella parte superiore dello schermo" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Formato Data" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Formato predefinito per visualizzare le date" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Programmazione Prodotto" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Mostra informazioni sulla pianificazione del prodotto" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventario Prodotto" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Visualizza le informazioni d'inventario dell'articolo (se la funzionalità d'inventario è abilitata)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Lunghezza Stringa Tabella" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Utente" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Prezzo" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Attivo" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Segreto" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Intestazione" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Contenuto" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titolo" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Collegamento" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Pubblicato" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autore" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Letto" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Immagine" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "File immagine" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 -msgid "Unit name must be a valid identifier" -msgstr "" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Allegato" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "File mancante" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Link esterno mancante" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Seleziona file da allegare" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Commento" - -#: common/models.py:3280 -msgid "Attachment comment" +#: common/models.py:3086 +msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3296 -msgid "Upload date" +#: common/models.py:3105 +msgid "Unit name" msgstr "" -#: common/models.py:3297 -msgid "Date the file was uploaded" +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" msgstr "" -#: common/models.py:3301 -msgid "File size" +#: common/models.py:3113 +msgid "Optional unit symbol" msgstr "" -#: common/models.py:3301 -msgid "File size in bytes" +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" msgstr "" -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" +#: common/models.py:3121 +msgid "Unit definition" msgstr "" #: common/notifications.py:314 @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Elemento ricevuto" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "Errore generato dal plugin" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nome del file" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Un dominio vuoto non è consentito." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Nome dominio non valido: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Articoli importati" msgid "Previous Step" msgstr "Passaggio Precedente" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Azienda" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Aziende" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Descrizione azienda" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Descrizione dell'azienda" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Sito Web" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Sito web aziendale" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefono" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Numero di telefono di contatto" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Indirizzo email" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Contatto" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Punto di contatto" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "è un cliente" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Vendi oggetti a questa azienda?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "è un fornitore" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Acquistate articoli da questa azienda?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "è un produttore" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Questa azienda produce articoli?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Valuta predefinita utilizzata per questa azienda" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Indirizzo" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Azienda" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Codice articolo produttore" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Articolo di base" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Seleziona articolo" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Produttore" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "Codice articolo produttore (MPN)" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Codice articolo produttore" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Descrizione articolo costruttore" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Codice articolo produttore" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Nome parametro" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Valore" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Valore del parametro" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Unità" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Unità parametri" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Articolo Fornitore" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Fornitore" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Selezionare un produttore" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Nota" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "costo base" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Confezionamento" + +#: company/models.py:864 msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Quantità Confezione" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "multiplo" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Ordine multiplo" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Quantità disponibile dal fornitore" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Disponibilità Aggiornata" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "In magazzino" @@ -4571,8 +4257,8 @@ msgstr "In magazzino" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inattivo" @@ -4607,11 +4293,11 @@ msgstr "Elimina Azienda" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "Scarica immagine dall'URL" msgid "Delete image" msgstr "Elimina immagine" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Cliente" @@ -4648,12 +4334,19 @@ msgstr "Cliente" msgid "Uses default currency" msgstr "Valuta predefinita" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Indirizzo" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefono" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Rimuovi" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "Crea nuovo fornitore" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Nuovo fornitore articolo" @@ -4703,7 +4396,7 @@ msgstr "Articoli Produttore" msgid "Create new manufacturer part" msgstr "Crea nuovo articolo produttore" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Nuovo Produttore Articoli" @@ -4717,7 +4410,7 @@ msgstr "Giacenza Fornitore" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Nuovo Ordine di Acquisto" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Produttori" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Articoli ordinati" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Cancella articolo produttore" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Articolo interno" @@ -4838,7 +4530,7 @@ msgstr "Nessuna informazione sul produttore disponibile" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Fornitori" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametri" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nuovo Parametro" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "Elementi in Giacenza Impegnati" msgid "Contacts" msgstr "Contatti" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Articolo Fornitore" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "Azioni Articolo Fornitore" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Ordine Articolo" @@ -4928,12 +4629,12 @@ msgstr "Elimina Articolo Fornitore" msgid "No supplier information available" msgstr "Nessuna informazione sul fornitore disponibile" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Fornitore articolo in giacenza" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Crea nuova allocazione magazzino" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" @@ -4966,33 +4667,29 @@ msgstr "Informazioni Prezzi" msgid "Add Price Break" msgstr "Aggiungi riduzione prezzo" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Articoli in magazzino" @@ -5018,236 +4715,134 @@ msgstr "Clienti" msgid "New Customer" msgstr "Nuovo cliente" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Aziende" + #: company/views.py:52 msgid "New Company" msgstr "Nuova Azienda" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Inviato" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Dati" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Valido" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Nome etichetta" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Descrizione etichetta" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Etichetta" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "File modello etichetta" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Abilitato" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Modello di etichetta abilitato" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Larghezza [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Larghezza dell'etichetta, specificata in mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Altezza [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Larghezza dell'etichetta, specificata in mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Formato del nome file" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Formato del nome file per la generazione etichetta" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filtri" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Sconosciuto" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Prezzo Totale" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Stato dell'ordine" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Riferimento ordine" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Nessun ordine di acquisto corrispondente trovato" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Ordine" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Restituisci ordine" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "Il contatto non corrisponde all'azienda selezionata" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Creato Da" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "Punto di contatto per questo ordine" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "ricevuto da" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "L'ordine non può essere completato perché nessun articolo è stato assegnato" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1393 +#: order/models.py:1296 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:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Contesto" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "eliminato" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Dove l'Acquirente desidera che questo elemento venga immagazzinato?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Un articolo virtuale non può essere assegnato ad un ordine di vendita" -#: order/models.py:1642 +#: order/models.py:1528 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:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Spedito" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Linea" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Elemento" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "Risultati" - -#: order/models.py:2411 -msgid "Outcome for this line item" -msgstr "" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "Risultati" -#: order/models.py:2428 -msgid "Return Order Extra Line" +#: order/models.py:2235 +msgid "Outcome for this line item" msgstr "" -#: order/serializers.py:86 -msgid "Completed Lines" +#: order/models.py:2242 +msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Nome Fornitore" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Numero Dell'articolo Interno" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Deve essere fornita una quantità intera per gli articoli rintracciabili" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "I seguenti numeri di serie sono già assegnati" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Perso" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Reso" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "In corso" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Indietro" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Riparare" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Sostituire" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Rimborso" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Rifiuta" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Ordine D'Acquisto in ritardo" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Modifica ordine" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Duplica Ordine" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Annulla l'ordine" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Duplica Ordine" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Contrassegna ordine come completato" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Completa l'ordine" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Riferimento ordine" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Descrizione Dell'Ordine" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Nessuna informazione sul fornitore disponibile" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Elementi della linea completati" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incompleto" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Emesso" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Costo totale" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Il costo totale non può essere calcolato" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "Duplica selezionati" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Elimina riga" @@ -6231,6 +5708,15 @@ msgstr "L'ordine è già elaborato. Non è possibile caricare i file." msgid "Step %(step)s of %(count)s" msgstr "Passo %(step)s di %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Elementi Riga" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Stock Ricevuto" @@ -6243,7 +5729,7 @@ msgstr "Elementi D'Ordine D'Acquisto" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Aggiungi Elemento Riga" @@ -6291,31 +5777,31 @@ msgstr "Stampa rapporto ordine di reso" msgid "Print packing list" msgstr "Stampa lista d'imballaggio" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Riferimento Cliente" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Costo Totale" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "Dettagli dell'ordine" msgid "Print sales order report" msgstr "Stampa il rapporto dell'ordine delle vendite" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Spedisci oggetti" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Completa Ordine Di Vendita" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Questo Ordine di Vendita non è stato assegnato completamente" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Spedizione in sospeso" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Azioni" @@ -6401,21 +5881,35 @@ msgstr "Aggiornato {part} prezzo unitario a {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Aggiornato {part} unità prezzo a {price} e quantità a {qty}" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Codice Articolo" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Nome Articolo" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Descrizione Articolo" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Revisione" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Parole Chiave" @@ -6423,16 +5917,15 @@ msgstr "Parole Chiave" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "Id Categoria" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Nome Categoria" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "Posizione Predefinita ID" @@ -6440,11 +5933,11 @@ msgstr "Posizione Predefinita ID" msgid "Default Supplier ID" msgstr "ID Fornitore Predefinito" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante Di" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -6452,187 +5945,165 @@ msgstr "Scorta Minima" msgid "Used In" msgstr "Utilizzato In" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "In Costruzione" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID principale" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Nome Principale" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Percorso Categoria" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Articoli" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "Livello Distinta Base" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "ID Elemento Distinta Base" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "IPN Principale" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "IPN Articolo" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Ordine D'Acquisto In Arrivo" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Ordine di Vendita in Uscita" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Giacenza prodotta dall'Ordine di Costruzione" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Giacenza richiesta per l'Ordine di Produzione" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Valido" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Questa opzione deve essere selezionata" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Categoria" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Giacenze Totali" @@ -6641,1148 +6112,1024 @@ msgstr "Giacenze Totali" msgid "Input quantity for price calculation" msgstr "Digita la quantità per il calcolo del prezzo" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strutturale" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Keywords predefinite" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Parole chiave predefinite per gli articoli in questa categoria" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Icona" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Icona (facoltativa)" -#: part/models.py:178 +#: part/models.py:148 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:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Scelta non valida per l'articolo principale" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "È Template" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Numero Dell'articolo Interno" + +#: part/models.py:912 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1130 +#: part/models.py:992 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:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Ultimo Inventario" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Data" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Note aggiuntive" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "Utente che ha eseguito questo inventario" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "File Report Inventario (generato internamente)" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Conteggio Articolo" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "Numero di articoli oggetto d'inventario" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "Utente che ha richiesto questo report inventario" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Il modello di prova può essere creato solo per gli articoli rintracciabili" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Abilitato" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Richiesto" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3635 +#: part/models.py:3506 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:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3642 +#: part/models.py:3513 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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Nome Parametro" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "Descrizione del parametro" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Articolo principale" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Modello Parametro" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Dati" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Valore del Parametro" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valore Predefinito" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "ID articolo o nome articolo" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Valore ID articolo univoco" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Valore IPN articolo" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Livello" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "Livello distinta base" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4266 +#: part/models.py:4048 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:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Eccedenza" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Quantità stimata scarti di produzione (assoluta o percentuale)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 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:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Consenti Le Varianti" + +#: part/models.py:4096 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:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4572 +#: part/models.py:4354 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:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4637 +#: part/models.py:4419 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:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:514 +#: part/serializers.py:480 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:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Limitare il report d'inventario ad un articolo particolare e a eventuali articoli varianti" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Limita il report d'inventario ad una particolare categoria articolo, e a eventuali categorie secondarie" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Limita il report d'inventario ad una particolare ubicazione di magazzino, e a eventuali ubicazioni secondarie" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Genera Report" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "Genera file di report contenente dati di inventario calcolati" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Aggiorna Articoli" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "La funzione Inventario non è abilitata" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Puoi produrre" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Cancella Distinta Base esistente" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "Rimuovi elementi distinta base esistenti prima del caricamento" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "Nessuna colonna articolo specificata" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "Trovati più articoli corrispondenti" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Nessun articolo corrispondente trovato" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "L'articolo non è indicato come componente" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Quantità non fornita" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Quantità non valida" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "Almeno un elemento della distinta base è richiesto" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Quantità Totale" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Esegui inventario per questa categoria articolo" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Sei iscritto alle notifiche di questa categoria" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Sottoscrivi notifiche per questa categoria" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Azioni Categoria" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Modifica categoria" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Modifica Categoria" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Elimina la categoria" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Cancella categoria" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Categoria articolo di livello superiore" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Articoli (incluse le sottocategorie)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Crea nuovo articolo" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Nuovo articolo" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Parametri articolo" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Crea nuova categoria articoli" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Nuova categoria" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "Aggiungi informazioni inventario" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Inventario" @@ -7946,105 +7293,101 @@ msgstr "Modelli Articoli Test" msgid "Add Test Template" msgstr "Aggiungi Modelli Test" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Assegnazione Ordine Di Vendita" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Note Articolo" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Varianti articolo" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Crea nuova variante" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Nuova variante" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Aggiungi un nuovo parametro" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Articoli correlati" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Aggiungi Correlato" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Distinta base" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Esporta azioni" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Esporta Distinta Base" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Stampa il report Distinta Base" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "Azioni Distinta Base" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Carica Distinta Base" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Valida Distinta Base" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Aggiungi elemento Distinta Base" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Assembla" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Articoli prodotti" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Costruisci le ubicazioni degli ordini" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Fornitori articoli" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "Scarica il Modello Articolo Importato" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formato" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Seleziona il formato del file" @@ -8103,7 +7446,7 @@ msgstr "Sottoscrivi le notifiche per questo articolo" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Stampa Etichetta" @@ -8113,7 +7456,7 @@ msgstr "Mostra informazioni sui prezzi" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Azioni magazzino" @@ -8125,7 +7468,7 @@ msgstr "Conta articoli magazzino" msgid "Transfer part stock" msgstr "Trasferisci giacenza" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Azioni articolo" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "L'Articolo è virtuale (non è un articolo fisico)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Mostra i Dettagli Articolo" @@ -8188,47 +7531,51 @@ msgstr "Assegnato agli Ordini di Produzione" msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Puoi produrre" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Livello minimo di giacenza" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Fascia di Prezzo" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Ultimo Numero Di Serie" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Ricerca per numero seriale" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Varianti" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Magazzino" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifica" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Nessuna giacenza" @@ -8486,7 +7833,7 @@ msgstr "Immagine articolo non trovata" msgid "Part Pricing" msgstr "Prezzo Articolo" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Nessuna azione specificata" msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "Il codice a barre corrisponde a un elemento esistente" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Scorte insufficienti disponibili" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,120 +7946,88 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "Stampa etichetta fallita" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "InvenTree Codice a Barre" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "Fornisce supporto nativo per codici a barre" -#: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/integration/core_notifications.py:35 -#: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "Contributi d'InvenTree" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" +#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/integration/core_notifications.py:35 +#: plugin/builtin/integration/currency_exchange.py:21 +#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" +msgstr "Contributi d'InvenTree" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Configurazione Plugin" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Configurazioni Plugin" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Key dei plugin" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "PluginName del plugin" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Nome Pacchetto" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Il plugin è attivo" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installato" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Plugin di esempio" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Plugin Integrato" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Metodo" @@ -8998,17 +8302,17 @@ msgstr "Metodo" msgid "No author found" msgstr "Nessun autore trovato" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "Installazione non confermata" msgid "Either packagename of URL must be provided" msgstr "Deve essere fornito uno dei nomi del pacchetto URL" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Nessun oggetto valido fornito nel modello" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Il file del modello '{template}' è mancante o non esiste" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Report test" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Nome modello" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Formato del nome file" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Filtri" +#: report/models.py:183 +msgid "Report template file" +msgstr "File modello di report" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Descrizione del modello report" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Numero di revisione del rapporto (auto-incrementi)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Larghezza [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Sequenza per generare i nomi dei file report" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Larghezza dell'etichetta, specificata in mm" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Modello report abilitato" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Altezza [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Filtri di ricerca elementi di stock (elenco separato da virgole key=coppia di valori)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Larghezza dell'etichetta, specificata in mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "Includi Test Installati" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Includi i risultati dei test per gli elementi stock installati all'interno dell'elemento assemblato" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Filtri di produzione" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Filtri di ricerca produzione (elenco separato da virgole key=coppia di valori" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Filtri Articolo" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "Filtri di ricerca articolo (elenco separato da virgole key=coppia di valori" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Ordine di Acquisto filtra la ricerca" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Ordine di Vendita filtra la ricerca" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "Report file snippet" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "Descrizione file snippet" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "Risorsa" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "Report file risorsa" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "File risorsa descrizione" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Materiali necessari" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Richiesto Per" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Il fornitore è stato eliminato" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Prezzo Unitario" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Totale" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Numero Seriale" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Test Report Elemento Stock" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Risultati Test" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Risultato" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Passaggio" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Fallito" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "Nessun risultato (richiesto)" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Nessun risultato" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Elementi installati" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seriale" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "ID Posizione" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Nome Ubicazione" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Percorso Ubicazione" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "ID Elemento Stock" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Codici di stato" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "ID Articolo Fornitore" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "ID Fornitore" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Nome Fornitore" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "ID Cliente" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installato In" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "ID Costruttore" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "ID Ordine Vendita" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "ID Ordine D'acquisto" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Revisione Necessaria" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "Elimina al esaurimento" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:189 +#: stock/models.py:167 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:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Esterno" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "Si tratta di una posizione esterna al magazzino" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 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:664 +#: stock/models.py:626 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:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:748 +#: stock/models.py:712 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:761 +#: stock/models.py:725 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:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:921 +#: stock/models.py:885 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:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "I numeri di serie devono essere numeri interi" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 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:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "Il numero di serie è troppo grande" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Elemento principale" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Scaduto" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Elementi secondari" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, 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:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Note opzionali elemento" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "Posizione di destinazione per l'elemento restituito" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 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:1444 -msgid "Allow mismatched status" -msgstr "Consenti stato non corrispondente" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "Devono essere riforniti almeno due elementi in magazzino" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "Valore di chiave primaria StockItem" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "Note sugli spostamenti di magazzino" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Attenzione necessaria" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Danneggiato" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Distrutto" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Respinto" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "In quarantena" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Voce di tracciamento stock preesistente" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Elemento stock creato" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Elemento stock modificato" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Numero di serie assegnato" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stock contato" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Stock aggiunto manualmente" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Stock rimosso manualmente" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Posizione cambiata" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Stock aggiornato" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Installato nell'assemblaggio" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Rimosso dall'assemblaggio" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Componente installato" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Elemento componente rimosso" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Diviso dall'elemento genitore" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Dividi elemento figlio" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Elemento stock raggruppato" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Convertito in variante" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Genera l'output dell'ordine creato" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Build order output completato" +msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Ordine di costruzione rifiutato" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "Consenti stato non corrispondente" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Impegnato dall'ordine di costruzione" +#: stock/serializers.py:1216 +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/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Spedito contro l'ordine di vendita" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Ricevuto contro l'ordine di acquisto" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Restituito contro l'ordine di ritorno" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "Valore di chiave primaria StockItem" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Inviato al cliente" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Restituito dal cliente" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "Note sugli spostamenti di magazzino" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "Dati di Test" msgid "Test Report" msgstr "Rapporto del Test" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Elimina Dati di Test" @@ -10316,15 +9335,15 @@ msgstr "Note Elemento di magazzino" msgid "Installed Stock Items" msgstr "Elementi di magazzino installati" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Installa Elemento Magazzino" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Elimina tutti i risultati del test per questo elemento di magazzino" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Scansiona nella posizione" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Impostazioni di stampa" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "Azioni adeguamento giacenza" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Conta giacenza" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Aggiungi giacenza" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Rimuovi giacenza" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Serializza magazzino" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Trasferisci giacenza" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "Assegna al cliente" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "Cancella elemento di magazzino" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Produzione" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Elemento principale" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nessun produttore impostato" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Non sei nell'elenco dei proprietari di questo elemento. Questo elemento di magazzino non può essere modificato." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Sola lettura" @@ -10469,8 +9492,12 @@ msgstr "pagina successiva" msgid "Navigate to next serial number" msgstr "Vai al numero di serie successivo" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Quantità Disponibile" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Nessuna posizione impostata" @@ -10487,6 +9514,11 @@ msgstr "Questo elemento di magazzino non ha superato i test richiesti" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Questo Elemento Stock è scaduto il %(item.expiry_date)s" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Scaduto" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "Questo Elemento Stock scade il %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Nessun inventario eseguito" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "Selezionare una delle varianti dell'articolo elencate sotto." -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Attenzione" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Questa azione non può essere facilmente annullata" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "Crea elementi serializzati da questo elemento di magazzino." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Seleziona la quantità da serializzare e i numeri di serie univoci." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "Esegui inventario per questa ubicazione di magazzino" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "Individua ubicazione di magazzino" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Scansiona gli elementi in magazzino in questa ubicazione" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Scansiona Elementi Stock" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "Scansiona il contenitore magazzino in questa posizione" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "Scansiona container" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Azioni posizione" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Modifica la posizione" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Elimina la posizione" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Posizione stock di livello superiore" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Proprietario Posizione" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Non sei nell'elenco dei proprietari di questa posizione. Questa posizione di giacenza non può essere modificata." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Crea nuova posizione di magazzino" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Nuova Posizione" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "Rilevamento Stock" msgid "Allocations" msgstr "Assegnazioni" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Elementi secondari" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Permesso negato" @@ -10840,12 +9872,12 @@ msgstr "Impostazioni di accesso" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "L'email in uscita non è stata configurata. Alcune funzioni di login e di registrazione potrebbero non funzionare correttamente!" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Registrati" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "Accesso singolo" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "Impostazioni articolo" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Importa Articolo" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Importa Articolo" @@ -10922,36 +9954,36 @@ msgstr "Impostazioni Plugin" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Cambiando le impostazioni qui sotto, si richiede di riavviare immediatamente il server. Non cambiare le impostazioni durante l'utilizzo." -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Plugin" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Installa Plugin" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "I plugin esterni non sono abilitati per questa installazione InvenTree" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "Plugin Errore Stack" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Messaggio" @@ -10994,7 +10026,7 @@ msgstr "Percorso d'installazione" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "Integrato" @@ -11004,7 +10036,7 @@ msgstr "Questo è un plugin integrato che non può essere disabilitato" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "Esempio" @@ -11038,20 +10070,20 @@ msgstr "Impostazioni Ordine di Acquisto" msgid "Pricing Settings" msgstr "Impostazioni Prezzi" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Tassi di cambio" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Aggiorna Ora" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Ultimo Aggiornamento" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Mai" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Elimina" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "Impostazioni Ordine di Vendita" msgid "Stock Settings" msgstr "Impostazioni Magazzino" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "Impostazioni Account" msgid "Change Password" msgstr "Modifica Password" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Nome utente" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Nome" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Cognome" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "I seguenti indirizzi email sono associati con il tuo account:" @@ -11340,49 +10384,49 @@ msgstr "Imposta multifattore" msgid "Remove multifactor" msgstr "Rimuovi multifattore" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Sessioni Attive" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Disconnetti le sessioni attive (tranne questa)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Disconnetti Sessioni Attive" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "sconosciuto su sconosciuto" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "sconosciuto" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "Indirizzo IP" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Dispositivo" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Ultima attività" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s fa (questa sessione)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s fa" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "Invia Segnalazione Bug" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "copia negli appunti" @@ -11554,7 +10598,7 @@ msgstr "Conferma l'indirizzo e-mail" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Si prega di confermare che %(email)s è un indirizzo email per l'utente %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Conferma" @@ -11563,26 +10607,26 @@ msgstr "Conferma" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Questo link di conferma email è scaduto o non è valido. Per favoreinoltra una nuova richiesta di conferma email." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Accedi" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Non sei ancora iscritto?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrati" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Password dimenticata?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "o accedi con" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Sei sicuro di voler uscire?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Ritorna al Sito" @@ -11710,19 +10754,15 @@ msgstr "Passaggio 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Scansiona il codice QR qui sotto con un generatore di token di tua scelta (per esempio Google Authenticator)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Passaggio 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Inserisci un token generato dall'app:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Verifica" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "I seguenti articoli sono pochi nel magazzino richiesto" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "Clicca il seguente link per visualizzare questo articolo" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Quantità minima" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Scansiona codice a barre" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Esistono errori nel modulo" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Invia" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "Le notifiche verranno caricate qui" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Aggiungi" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Salva" msgid "Show all notifications and history" msgstr "Mostra tutte le notifiche e la cronologia" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Dati QR non forniti" @@ -15125,14 +14122,6 @@ msgstr "Impostazioni e-mail" msgid "Email settings not configured" msgstr "Impostazioni dell'email non configurate" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Si" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Gruppo" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Visualizza" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Modificare" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 281ce186ac83..2d767bf122bb 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "エラーの詳細は管理者パネルで確認できます" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "メモ" @@ -92,270 +88,250 @@ msgstr "値 '{name}' はパターン形式で表示されません" msgid "Provided value does not match required pattern: " msgstr "指定された値が必要なパターンと一致しません: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "パスワードを入力してください" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "新しいパスワードを入力してください。" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "パスワードの確認" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "新しいパスワードの確認" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "古いパスワード" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "メールアドレス(確認用)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "メールアドレスの確認" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "毎回同じメールアドレスを入力する必要があります。" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "指定されたプライマリEメールアドレスは無効です。" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "指定されたメールドメインは承認されていません。" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "数量コードが無効です" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "この値からHTMLタグを削除" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "チェコ語" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "ドイツ語" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "ギリシャ語" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "英語" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "スペイン語" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "スペイン語(メキシコ)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "フランス語" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "ヘブライ語" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "ヒンディー語" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "ハンガリー語" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "イタリア語" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "日本語" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "韓国語" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "オランダ語" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "ノルウェー語" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "ポルトガル語" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "ポルトガル語 (ブラジル)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "ロシア語" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "スロベニア語" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "スウェーデン語" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "タイ語" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "ベトナム語" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "メールアドレス" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "プラグインメタデータ" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "外部プラグインで使用するためのJSONメタデータフィールド" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "ファイルがありません" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "外部リンクが見つかりません。" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "添付ファイル" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "添付ファイルを選択" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "リンク" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "外部 サイト へのリンク" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "コメント:" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "ファイルコメント" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "ユーザー" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "アップロード日時" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "ファイル名は空欄にできません" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "添付ファイルのディレクトリが正しくありません" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "ファイル名に無効な文字'{c}'が含まれています" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "ファイル名に拡張子がありません" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "この名前の貼付ファイルは既に存在します" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "ファイル名の変更に失敗しました" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "説明" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "親" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "マークダウンメモ (オプション)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "バーコード情報" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "サードパーティ製バーコードデータ" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "通貨" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "利用可能なオプションから通貨を選択してください" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" msgstr "" -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" +#: InvenTree/serializers.py:102 +msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." -msgstr "このユーザのロールを変更する権限がありません" +msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "ファイル名" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "データファイル" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "アップロードするファイルを選択" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "サポートされていないファイル形式" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "ファイルサイズが大きすぎます" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "ファイルに列が見つかりません" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "ファイルにデータ行がみつかりません" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "データが入力されていません" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "データ列が指定されていません" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "必須の列がありません: {name}" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "{col} 列が重複しています。" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "バックグラウンドワーカーのチェックに失敗しました" @@ -679,27 +694,223 @@ msgstr "メールアドレスが未設定です" msgid "InvenTree system health checks failed" msgstr "InvenTree システムのヘルスチェックに失敗しました" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "処理待ち" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "設置済" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "完了" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "キャンセル済" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "紛失" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "返品済" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "処理中" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "発送済み" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "注意が必要です" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "破損" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "破壊されました" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "却下済み" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "在庫商品を作成しました" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "在庫商品編集済み" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "割り当てられたシリアル番号" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "在庫数" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "手動在庫追加が完了しました" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "手動在庫削除が完了しました" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "ロケーションが変更されました" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "アセンブリへインストールしました" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "アセンブリから削除しました" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "インストール済みのコンポーネント項目" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "コンポーネント項目を削除しました" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "親アイテムから分割する" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "子項目を分割" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "商品在庫をマージしました" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "組立注文の出力が作成されました" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "組立注文の出力が完了しました" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "顧客に送信されました" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "顧客からの返品" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "生産" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "システム情報" msgid "About InvenTree" msgstr "InvenTree について" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "オプション" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "アセンブリ" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "組立注文" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "組立注文" msgid "Build Orders" msgstr "組立注文" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "パーツ" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "組立状況" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "外部リンク" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "外部 サイト へのリンク" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "数量" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "ステータス" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "シリアル番号" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "追跡可能" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "処理待ち" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "生産" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "キャンセル済" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "完了" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "組立を編集" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" +msgid "Cancel Build" +msgstr "組立をキャンセル" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "組立をキャンセル" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "組立を削除" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 -msgid "Completed Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" +#: build/templates/build/detail.html:249 +msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "テンプレート" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "アセンブリ" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "コンポーネント" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "購入可能" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "販売可能" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "追跡可能" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "デバッグモード" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "シリアル番号を自動入力" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "非アクティブな部品を非表示" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "購読中の部品を表示" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "購読中のカテゴリを表示" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "ユーザー" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "リンク" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "添付ファイル" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "ファイルがありません" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "外部リンクが見つかりません。" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "添付ファイルを選択" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "コメント:" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "ファイル名" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "連絡先メールアドレス" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "メーカー・パーツ" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "製造元" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "メーカー・パーツ" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "仕入先" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "顧客" @@ -4648,12 +4334,19 @@ msgstr "顧客" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "新しいサプライヤー・パーツを作成" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "新しいサプライヤー・パーツ" @@ -4703,7 +4396,7 @@ msgstr "メーカー・パーツ" msgid "Create new manufacturer part" msgstr "新しいメーカー・パーツを作成" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "新しいメーカ―・パーツ" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "メーカー" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "パーツの注文" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "メーカー・パーツを削除" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "内部パーツ" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "仕入先" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "パラメータ" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "新規パラメータ" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "在庫商品" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "設置済" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "外部ページへのリンク" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "発送済み" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "紛失" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "返品済" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "処理中" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "キーワード" @@ -6423,16 +5917,15 @@ msgstr "キーワード" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "カテゴリID" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "カテゴリ名" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "パーツ" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "カテゴリ" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "パーツカテゴリ" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "カテゴリを選択" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "このカテゴリの通知を受け取る" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "カテゴリを編集" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "カテゴリを編集" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "カテゴリを削除" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "カテゴリを削除" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "トップレベルのパーツカテゴリ" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "パーツ (サブカテゴリを含む)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "新規パーツを作成" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "新規パーツ" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "パーツパラメータ" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "新しいパーツカテゴリを作成" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "新規カテゴリ" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "このパーツの通知を受け取る" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "シリアル番号で検索" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "在庫" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "在庫切れ" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "アクションが指定されていません" msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "シリアル番号" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "シリアル番号が大きすぎます" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "期限切れ" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "注意が必要です" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "破損" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "破壊されました" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "却下済み" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "在庫商品を作成しました" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "在庫商品編集済み" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "割り当てられたシリアル番号" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "在庫数" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "手動在庫追加が完了しました" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "手動在庫削除が完了しました" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "ロケーションが変更されました" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "アセンブリへインストールしました" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "アセンブリから削除しました" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "インストール済みのコンポーネント項目" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "コンポーネント項目を削除しました" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "親アイテムから分割する" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "子項目を分割" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "商品在庫をマージしました" +msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "組立注文の出力が作成されました" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" +msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "組立注文の出力が完了しました" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "顧客に送信されました" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "顧客からの返品" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "組立" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "期限切れ" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "確認" @@ -11563,26 +10607,26 @@ msgstr "確認" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "このパーツを表示するには、次のリンクをクリックしてください" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "最小在庫" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "メール設定" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "パーミッション設定" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "グループ" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "表示" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "項目を表示する権限" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "項目を追加する権限" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "変更" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "項目を編集する権限" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "項目を削除する権限" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 5a9af447b350..e07c9f2839b8 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 14c02fb132d7..c123232a01e8 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,26 +2,26 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" "X-Crowdin-Language: lv\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Ievadiet datumu" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Piezīmes" @@ -92,270 +88,250 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā" msgid "Provided value does not match required pattern: " msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Ievadiet paroli" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Ievadiet jaunu paroli" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Apstiprināt paroli" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Apstiprināt jauno paroli" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Vecā parole" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-pasts (vēlreiz)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "E-pasta adreses apstiprinājums" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Katru reizi jāievada viena un tā pati e-pasta adrese." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Norādītā primārā e-pasta adrese nav derīga." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Norādītais e-pasta domēns nav apstiprināts." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Reģistrācija ir izslēgta." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Tukša sērijas numura rinda" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Atkārtojas sērijas numurs" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nederīgs grupas diapazons: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nederīga grupas secība: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Netika atrasts neviens sērijas numurs" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Unikālo sērijas numuru skaitam ({len(serials)}) jāatbilst daudzumam ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Noņemiet HTML tagus no šīs vērtības" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgāru" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Čehu" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dāņu" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Vācu" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grieķu" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Angļu" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spāņu" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spāņu (Meksikāņu)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persiešu" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Somu" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index a39ac28d76b5..3cc600c792c9 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -48,38 +48,34 @@ msgstr "Ongeldige hoeveelheid ingegeven" msgid "Invalid quantity supplied ({exc})" msgstr "Ongeldige hoeveelheid ingegeven ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Error details kunnen worden gevonden in het admin scherm" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Opmerkingen" @@ -92,270 +88,250 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Voer wachtwoord in" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Voer een nieuw wachtwoord in" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Wachtwoord bevestigen" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Nieuw wachtwoord bevestigen" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Oude wachtwoord" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-mailadres (opnieuw)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "E-mailadres bevestiging" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Er moet hetzelfde e-mailadres ingevoerd worden." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Het opgegeven primaire e-mailadres is ongeldig." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Het ingevoerde e-maildomein is niet goedgekeurd." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registratie is uitgeschakeld." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgaars" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tsjechisch" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Deens" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Duits" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grieks" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Engels" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spaans" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Perzisch" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Fins" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Frans" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Hongaars" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italiaans" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japans" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreaans" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Noors" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Pools" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugees" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugees (Braziliaans)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russisch" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Sloveens" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Servisch" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thais" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turks" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Chinees (vereenvoudigd)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" @@ -364,310 +340,349 @@ msgstr "Chinees (traditioneel)" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadata moeten een python dict object zijn" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata veld, voor gebruik door externe plugins" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Onjuist opgemaakt patroon" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Onbekende opmaaksleutel gespecificeerd" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Vereiste opmaaksleutel ontbreekt" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referentieveld mag niet leeg zijn" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referentie moet overeenkomen met verplicht patroon" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Ontbrekend bestand" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Externe link ontbreekt" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Bijlage" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Bestand als bijlage selecteren" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link naar externe URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Opmerking" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Bestand opmerking" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Gebruiker" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "uploaddatum" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Bestandsnaam mag niet leeg zijn" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Foute bijlagemap" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Bestandsnaam bevat illegale teken '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Bestandsnaam mist extensie" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Bijlage met deze bestandsnaam bestaat al" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Fout bij hernoemen bestand" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "bovenliggende" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown notitie (optioneel)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Streepjescode gegevens" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Streepjescode van derden" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Actief" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Bestandsnaam" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Data bestand" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Selecteer een bestand om te uploaden" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Niet ondersteund bestandstype" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Bestand is te groot" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Geen kolommen gevonden in het bestand" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Geen data rijen gevonden in dit bestand" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Geen data rijen opgegeven" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Geen gegevenskolommen opgegeven" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Verplichte kolom ontbreekt: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dubbele kolom: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Achtergrondwerker check is gefaald" @@ -679,27 +694,223 @@ msgstr "E-mailbackend niet geconfigureerd" msgid "InvenTree system health checks failed" msgstr "InvenTree gezondsheidschecks mislukt" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Bezig" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Geplaatst" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Voltooid" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Geannuleerd" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Kwijt" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Retour" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "In Behandeling" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Verzonden" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Aandacht nodig" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Beschadigd" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Verwoest" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Afgewezen" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "In quarantaine geplaatst" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Verouderde volgcode" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Voorraaditem gemaakt" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Bewerken voorraadartikel" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Serienummer toegewezen" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Voorraad geteld" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Voorraad handmatig toegevoegd" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Voorraad handmatig verwijderd" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Locatie veranderd" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Voorraad bijgewerkt" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Gemonteerd" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Gedemonteerd" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Geïnstalleerd componentartikel" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Verwijderd componentartikel" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Splits van bovenliggend item" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Splits onderliggende item" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Samengevoegde voorraadartikelen" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Geconverteerd naar variant" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Product aangemaakt" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Product voltooid" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Build order uitvoer afgewezen" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Verbruikt door productieorder" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Verzonden onder verkooporder" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Ontvangen onder verkooporder" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Geretourneerd onder retourorder" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Naar klant verzonden" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Geretourneerd door klant" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Productie" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Retour" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Herstel" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Vervangen" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Restitutie" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Afwijzen" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Ongeldige fysieke eenheid" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Overschotwaarde mag niet negatief zijn" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Overschot mag niet groter zijn dan 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Ongeldige waarde voor overschot" @@ -727,105 +938,62 @@ msgstr "Systeeminformatie" msgid "About InvenTree" msgstr "Over InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Bovenliggende Productie" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Uitgegeven door" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Optioneel" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Samenstelling" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Beschikbaar" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Productieorder" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Productieorder" msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Ongeldige keuze voor bovenliggende productie" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referentie" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Bovenliggende Productie" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Productieorder waar deze productie aan is toegewezen" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Onderdeel" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar deze productie aan is toegewezen" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "voltooid door" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externe Link" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link naar externe URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Onderdeel naam" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Locatie" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Locatie" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Toegewezen Voorraad Verwijderen" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Verminder alle voorraad die al is toegewezen aan deze productie" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Fabrikant artikel nummer (MPN)" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Onderdeel-id" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Onderdeel omschrijving" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Serienummer" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Volgbaar" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "In bestelling" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Bezig" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Productie" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Geannuleerd" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Voltooid" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Voorraad vereist voor productieorder" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Achterstallige Productieorder" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" @@ -1764,8 +1721,8 @@ msgstr "Miniatuurweergave van onderdeel" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Barcode acties" @@ -1776,7 +1733,7 @@ msgstr "Barcode acties" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-code weergeven" @@ -1787,9 +1744,9 @@ msgstr "QR-code weergeven" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Barcode loskoppelen" @@ -1800,7 +1757,7 @@ msgstr "Barcode loskoppelen" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Koppel Barcode" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Bewerk Productie" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Dupliceer Bouw" +msgid "Cancel Build" +msgstr "Annuleer Productie" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Dupliceer Bouw" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Annuleer Productie" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Verwijder Productie" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Voltooi Productie" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Productiebeschrijving" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Er zijn geen productuitvoeren aangemaakt voor deze productieorder" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Productieorder is gereed om te markeren als voltooid" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Productieorder kan niet worden voltooid omdat er nog producties openstaan" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Vereiste Producthoeveelheid is nog niet bereikt" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Voorraad is niet volledig toegewezen aan deze productieorder" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Streefdatum" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Deze productie was verwacht op %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Achterstallig" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Voltooide Uitvoeren" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Verkooporder" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Uitgegeven door" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Prioriteit" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "Voorraadbron" msgid "Stock can be taken from any available location." msgstr "Voorraad kan worden genomen van elke beschikbare locatie." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Bestemming" @@ -1981,23 +1924,23 @@ msgstr "Bestemmingslocatie niet opgegeven" msgid "Allocated Parts" msgstr "Toegewezen Onderdelen" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Gecreëerd" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Geen doeldatum ingesteld" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Voltooid" @@ -2015,13 +1958,13 @@ msgstr "Voltooid" msgid "Build not complete" msgstr "Productie niet compleet" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Onderliggende Productieorders" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Voorraad toewijzen aan Product" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Automatisch Toewijzen" msgid "Manually allocate stock to build" msgstr "Handmatig voorraad toewijzen aan productie" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Voorraad Toewijzen" @@ -2072,19 +2015,15 @@ msgstr "Nieuwe productieuitvoer aanmaken" msgid "New Build Output" msgstr "Nieuwe Productieuitvoer" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Verbruikte voorraad" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Voltooide Productieuitvoeren" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bijlagen" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Productie notities" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Nieuwe Productieorder" @@ -2120,57 +2059,10 @@ msgstr "Nieuwe Productieorder" msgid "Build Order Details" msgstr "Productieorderdetails" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Artikelen" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Onvolledige Productieuitvoeren" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Geen plug-in gevonden" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Bestand" msgid "Select {name} file to upload" msgstr "Kies {name} bestand om te uploaden" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Bijgewerkt" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Tijdstempel van laatste update" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Unieke projectcode" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1132 -msgid "No group" -msgstr "Geen groep" +#: common/models.py:1114 +msgid "No group" +msgstr "Geen groep" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Een leeg domein is niet toegestaan." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Ongeldige domeinnaam: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Geen plug-in gevonden" -#: common/models.py:1231 +#: common/models.py:1259 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "dagen" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Download van URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Download limiet" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Sta toe om de user-agent te overschrijven die gebruikt wordt om afbeeldingen en bestanden van externe URL te downloaden (laat leeg voor de standaard)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Bevestiging vereist" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Vereis expliciete bevestiging van de gebruiker voor bepaalde actie." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Boomstructuur Diepte" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standaard diepte voor treeview. Diepere niveaus kunnen geladen worden wanneer ze nodig zijn." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Meldingen van gebruikers worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Sjabloon" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Samenstelling" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Koopbaar" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Verkoopbaar" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Volgbaar" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtueel" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Toon Import in Weergaven" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Toon de importwizard in sommige onderdelenweergaven" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Aanmaken van eerste voorraad toestaan bij het toevoegen van een nieuw onderdeel" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Aanmaken van eerste leveranciersgegevens toestaan bij het toevoegen van een nieuw onderdeel" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Als er eenheden worden opgegeven, moeten parameterwaarden overeenkomen met de opgegeven eenheden" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimaal aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximum aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Voorraaditems ouder dan dit aantal dagen uitsluiten van prijsberekeningen" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Activeer Testrapporten" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Activeer het genereren van testrapporten" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Testrapporten Toevoegen" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Bij het afdrukken van een Testrapport, voeg een kopie van het Testrapport toe aan het bijbehorende Voorraadartikel" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Serienummers automatisch invullen" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Automatisch invullen van serienummer in formulieren" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bewerken van verkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bewerken van inkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Zelfregistratie voor gebruikers middels SSO op de inlogpagina's inschakelen" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Groep waaraan nieuwe gebruikers worden toegewezen bij registratie" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controleer of alle plug-ins zijn geïnstalleerd bij het opstarten - inschakelen in container-omgevingen" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "Activeer project codes voor het bijhouden van projecten" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Voorraadcontrole functionaliteit" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Schakel voorraadfunctionaliteit in voor het opnemen van voorraadniveaus en het berekenen van voorraadwaarde" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Aantal dagen tussen automatische voorraadopname (ingesteld op nul om uit te schakelen)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "Rapport Verwijdering Interval" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Voorraadrapportage zal worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Verberg inactieve delen bij items op de homepage" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Toon geabonneerde onderdelen" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Toon geabonneerde onderdelen op de homepage" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Toon geabonneerde categorieën" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Toon geabonneerde onderdeel categorieën op de startpagina" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Toon laatste onderdelen" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Toon laatste onderdelen op de startpagina" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Laat BOMs zien die wachten op validatie op de startpagina" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Toon recente voorraadwijzigingen" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Toon recent aangepaste voorraadartikelen op de startpagina" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Toon lage voorraad" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Toon lage voorraad van artikelen op de startpagina" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Toon lege voorraad" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Toon lege voorraad van artikelen op de startpagina" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Toon benodigde voorraad" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Toon benodigde voorraad van artikelen voor productie op de startpagina" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Toon verlopen voorraad" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Toon verlopen voorraad van artikelen op de startpagina" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Toon verouderde voorraad" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Toon verouderde voorraad van artikelen op de startpagina" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Toon openstaande producties" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Toon openstaande producties op de startpagina" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Toon achterstallige productie" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Toon achterstallige producties op de startpagina" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Toon uitstaande PO's" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Toon uitstaande PO's op de startpagina" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Toon achterstallige PO's" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Toon achterstallige PO's op de startpagina" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Toon uitstaande SO's" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Toon uitstaande SO's op de startpagina" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Toon achterstallige SO's" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Toon achterstallige SO's op de startpagina" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "Toon in behandeling SO verzendingen" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "Toon in behandeling zijnde SO verzendingen op de startpagina" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Nieuws tonen" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Nieuws op de startpagina weergeven" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Inline labelweergave" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-labels in browser weergeven, in plaats van als bestand te downloaden" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Standaard label printer" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Instellen welke label printer standaard moet worden geselecteerd" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Inline rapport weergeven" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-rapporten in de browser weergeven, in plaats van als bestand te downloaden" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Zoek Onderdelen" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Onderdelen weergeven in zoekscherm" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Zoek leveranciersonderdelen" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Leveranciersonderdelen weergeven in zoekscherm" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Fabrikant onderdelen zoeken" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Fabrikant onderdelen weergeven in zoekscherm" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Zoek categorieën" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Toon onderdeelcategorieën in zoekvenster" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Zoek in Voorraad" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Toon voorraad items in zoekvenster" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Verberg niet beschikbare voorraad items" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Voorraadartikelen die niet beschikbaar zijn niet in het zoekvenster weergeven" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Locaties doorzoeken" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Toon voorraadlocaties in zoekvenster" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Zoek bedrijven" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Toon bedrijven in zoekvenster" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Zoek Bouworders" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Inkooporders Zoeken" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Toon inkooporders in het zoekvenster" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Inactieve Inkooporders Weglaten" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inactieve inkooporders weglaten in het zoekvenster" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Verkooporders zoeken" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Toon verkooporders in het zoekvenster" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Inactieve Verkooporders Weglaten" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Zoek retourorders" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "Inactieve retourbestellingen weglaten" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "Inactieve retourorders uitsluiten in zoekvenster" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Zoekvoorbeeld resultaten" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Aantal resultaten om weer te geven in elk gedeelte van het zoekvenster" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Regex zoeken" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "Schakel reguliere expressies in zoekopdrachten in" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "Hele woorden zoeken" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "Zoekopdrachten geven resultaat voor hele woord overeenkomsten" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Toon hoeveelheid in formulieren" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Hoeveelheid beschikbare onderdelen in sommige formulieren weergeven" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "Escape-toets sluit formulieren" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Gebruik de Escape-toets om standaard formulieren te sluiten" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Vaste navigatiebalk" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "De navigatiebalk positie is gefixeerd aan de bovenkant van het scherm" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Datum formaat" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Voorkeursindeling voor weergave van datums" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Onderdeel planning" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Toon informatie voor het plannen van onderdelen" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Voorraadcontrole onderdeel" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Toon voorraadinformatie van onderdeel (als voorraadcontrole functionaliteit is ingeschakeld)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Tabel tekenreekslengte" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "Standaard sjabloon product onderdeel" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "Het onderdeellabelsjabloon dat automatisch wordt geselecteerd" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Standaard sjabloon voorraad onderdeel" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "Standaard label van voorraadlocatie" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "Foutrapportages ontvangen" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "Meldingen ontvangen van systeemfouten" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Gebruiker" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Prijs" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Actief" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Geheim" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Koptekst" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Gelezen" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Afbeelding" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Symbool" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definitie" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Bijlage" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Ontbrekend bestand" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Externe link ontbreekt" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Bestand als bijlage selecteren" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Opmerking" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Bestandsnaam" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Een leeg domein is niet toegestaan." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Ongeldige domeinnaam: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Geïmporteerde onderdelen" msgid "Previous Step" msgstr "Vorige Stap" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Bedrijf" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Bedrijven" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "URL bedrijfswebsite" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefoonnummer" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Telefoonnummer voor contact" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Contact e-mailadres" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Contactpunt" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "is klant" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "is leverancier" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "is fabrikant" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adres" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Bedrijf" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Fabrikant onderdeel" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basis onderdeel" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Onderdeel selecteren" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Fabrikant" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Fabrikant artikel nummer (MPN)" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "URL voor externe link van het fabrikant onderdeel" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Omschrijving onderdeel fabrikant" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Fabrikant onderdeel" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Parameternaam" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Waarde" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Parameterwaarde" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Eenheden" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Parameter eenheden" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Leveranciersonderdeel" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverancier" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Selecteer fabrikant onderdeel" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Opmerking" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "basisprijs" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "meerdere" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Order meerdere" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "Bedrijf verwijderen" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Afbeelding onderdeel" @@ -4630,17 +4316,17 @@ msgstr "Afbeelding downloaden van URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Klant" @@ -4648,12 +4334,19 @@ msgstr "Klant" msgid "Uses default currency" msgstr "Gebruik standaard valuta" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adres" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefoon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Nieuw leveranciers onderdeel" @@ -4703,7 +4396,7 @@ msgstr "Fabrikant onderdelen" msgid "Create new manufacturer part" msgstr "Maak nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Nieuw fabrikant onderdeel" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Nieuwe Inkooporder" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Fabrikanten" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Order onderdeel" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Fabrikant onderdeel verwijderen" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4838,7 +4530,7 @@ msgstr "Geen fabrikanten informatie beschikbaar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Leveranciers" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nieuwe Parameter" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "Toegewezen Voorraadartikelen" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Leveranciersonderdeel" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Order Onderdeel" @@ -4928,12 +4629,12 @@ msgstr "Verwijder leveranciers onderdeel" msgid "No supplier information available" msgstr "Geen leveranciersinformatie beschikbaar" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Nieuw voorraadartikel aanmaken" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nieuw Voorraadartikel" @@ -4966,33 +4667,29 @@ msgstr "Prijsinformatie" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Voorraadartikelen" @@ -5018,236 +4715,134 @@ msgstr "Klanten" msgid "New Customer" msgstr "Nieuwe Klant" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Bedrijven" + #: company/views.py:52 msgid "New Company" msgstr "Nieuw Bedrijf" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Geplaatst" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Labelnaam" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Label beschrijving" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Label template bestand" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Ingeschakeld" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Label template is ingeschakeld" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Breedte [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Label breedte, gespecificeerd in mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Hoogte [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Label hoogte, gespecificeerd in mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Bestandsnaam Patroon" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Totaalprijs" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Order Referentie" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Link naar externe pagina" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Aangemaakt Door" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Gebruiker of groep verantwoordelijk voor deze order" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "ontvangen door" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Datum van uitgifte" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Order uitgegeven op datum" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "Order kan niet worden voltooid omdat er geen onderdelen aangewezen zijn" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "verwijderd" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Waar wil de inkoper dat dit artikel opgeslagen wordt?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtueel onderdeel kan niet worden toegewezen aan een verkooporder" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Verzonden" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Zending" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Regel" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Artikel" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Intern Onderdeelnummer" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "De volgende serienummers zijn al toegewezen" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Kwijt" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Retour" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "In Behandeling" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Retour" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Herstel" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Vervangen" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Restitutie" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Afwijzen" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Achterstallige inkooporder" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Order bewerken" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Order annuleren" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Order markeren als voltooid" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Order Voltooien" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Order Referentie" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Order Beschrijving" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Geen leveranciersinformatie beschikbaar" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Afgeronde artikelen" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incompleet" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Uitgegeven" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Totale kosten" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Totale kosten konden niet worden berekend" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Rij verwijderen" @@ -6231,6 +5708,15 @@ msgstr "Order is al verwerkt. Bestanden kunnen niet meer worden geüpload." msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Artikelen" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Ontvangen Voorraadartikelen" @@ -6243,7 +5729,7 @@ msgstr "Inkooporder Artikelen" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Artikel toevoegen" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "Pakbon afdrukken" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Klantreferentie" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "Print verkooporderrapport" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Voltooi Verkooporder" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Deze Verkooporder is niet volledig toegewezen" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Verzendingen in behandeling" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Acties" @@ -6401,21 +5881,35 @@ msgstr "{part} stukprijs bijgewerkt naar {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} stukprijs bijgewerkt naar {price} en aantal naar {qty}" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Onderdeel-id" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Onderdeel naam" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Onderdeel omschrijving" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Onderdelen" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Binnenkomende Inkooporder" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Uitgaande Verkooporder" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Geproduceerde voorraad door Productieorder" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Voorraad vereist voor Productieorder" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standaard locatie" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Totale Voorraad" @@ -6641,1148 +6112,1024 @@ msgstr "Totale Voorraad" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Onderdeel Categorie" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Intern Onderdeelnummer" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Standaardleverancier" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Datum" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Aantal onderdelen" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Ingeschakeld" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Parameternaam" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Parameterwaarde" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Geen onderdelen geselecteerd" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Ongeldige hoeveelheid" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Onderdeel Parameters" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Nieuwe Categorie" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Verkoopordertoewijzingen" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Een parameter toevoegen" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Assemblages" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Productieordertoewijzingen" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Onderdeelfabrikanten" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "Formaat" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Selecteer bestandsindeling" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Label afdrukken" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Voorraad acties" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "Toegewezen aan Productieorder" msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Voorraad" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "Afbeelding van onderdeel niet gevonden" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Geen actie gespecificeerd" msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Bestandsnaam Patroon" - -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:204 +msgid "Page size for PDF reports" msgstr "" -#: report/models.py:234 -msgid "Filters" +#: report/models.py:210 +msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:302 -msgid "Page size for PDF reports" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:308 -msgid "Render report in landscape orientation" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Breedte [mm]" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Label breedte, gespecificeerd in mm" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Hoogte [mm]" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Label hoogte, gespecificeerd in mm" - -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Filters inkooporder" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Verkooporder zoekopdracht filters" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Vereist Voor" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Stukprijs" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Totaal" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Serienummer" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Aandacht nodig" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Beschadigd" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Verwoest" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Afgewezen" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "In quarantaine geplaatst" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Verouderde volgcode" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Voorraaditem gemaakt" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Bewerken voorraadartikel" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Serienummer toegewezen" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Voorraad geteld" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Voorraad handmatig toegevoegd" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Voorraad handmatig verwijderd" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Locatie veranderd" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Voorraad bijgewerkt" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Gemonteerd" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Gedemonteerd" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Geïnstalleerd componentartikel" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Verwijderd componentartikel" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Splits van bovenliggend item" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Splits onderliggende item" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Samengevoegde voorraadartikelen" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Geconverteerd naar variant" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Product aangemaakt" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Product voltooid" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Build order uitvoer afgewezen" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Verbruikt door productieorder" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Verzonden onder verkooporder" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Ontvangen onder verkooporder" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Geretourneerd onder retourorder" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Naar klant verzonden" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Geretourneerd door klant" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Scan naar Locatie" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Voorraad tellen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Voorraad overzetten" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Product" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Geen fabrikant geselecteerd" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "volgende pagina" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Geen locatie ingesteld" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Locatie acties" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Bewerk locatie" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Verwijder locatie" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "U staat niet in de lijst van eigenaars van deze locatie. Deze voorraadlocatie kan niet worden bewerkt." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Maak nieuwe voorraadlocatie" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Nieuwe Locatie" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Bericht" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "Inkooporder Instellingen" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Verwijderen" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Startpagina" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "Verkooporder Instellingen" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Bevestigen" @@ -11563,26 +10607,26 @@ msgstr "Bevestigen" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "De volgende onderdelen hebben een lage vereiste voorraad" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index c40978464596..290d59e772f5 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -17,18 +17,18 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "Ugyldig enhet angitt ({unit})" +msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" @@ -48,38 +48,34 @@ msgstr "Ugyldig mengde oppgitt" msgid "Invalid quantity supplied ({exc})" msgstr "Ugyldig mengde oppgitt ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Feildetaljer kan finnes i admin-panelet" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Notater" @@ -92,270 +88,250 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Oppgi passord" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Oppgi nytt passord" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Bekreft passord" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Bekreft nytt passord" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Gammelt passord" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-post (gjenta)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Bekreft e-postaddresse" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Du må angi samme e-post hver gang." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Den oppgitte primære e-postadressen er ikke gyldig." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Det oppgitte e-postdomenet er ikke godkjent." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registrering er deaktivert." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Duplisert serienummer" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Ugyldig gruppesekvens: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Antall unike serienumre ({len(serials)}) må samsvare med antallet ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tagger fra denne verdien" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arabisk" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarsk" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tsjekkisk" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Dansk" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Tysk" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Gresk" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Engelsk" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spansk" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spansk (Meksikansk)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estisk" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finsk" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Fransk" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italiensk" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japansk" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreansk" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Latvisk" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polsk" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasil)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumensk" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Russisk" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovakisk" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovensk" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbisk" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Svensk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrainsk" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" @@ -364,310 +340,349 @@ msgstr "Kinesisk (tradisjonell)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Logg inn på appen" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-post" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Feil under validering av utvidelse" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadata må være et python dict-objekt" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Utvidelse-metadata" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-metadatafelt, for bruk av eksterne utvidelser" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Uriktig formatert mønster" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Ukjent formatnøkkel spesifisert" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøkkel" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referansefeltet kan ikke være tomt" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referansen må samsvare påkrevd mønster" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Fil mangler" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Mangler eksternlenke" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Vedlegg" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Velg fil å legge ved" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Lenke" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Lenke til ekstern URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Kommentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Kommentar til fil" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Bruker" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "opplastet dato" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Filnavn kan ikke være tomt" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Ugyldig vedleggskatalog" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Filnavn inneholder ugyldig tegn '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Filnavn mangler filtype" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Vedlegg med dette filnavnet finnes allerede" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Feil ved endring av filnavn" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikatnavn kan ikke eksistere under samme overordnede" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "overkategori" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown-notater (valgfritt)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Strekkodedata" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Tredjeparts strekkodedata" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Strekkode-hash" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkodedata" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Brukernavn" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Fornavn" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Fornavn på brukeren" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Etternavn" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Etternavn på brukeren" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "E-postadressen til brukeren" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Personale" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Har denne brukeren personelltillatelser" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Superbruker" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Er denne brukeren en superbruker" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktiv" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Er denne brukerkontoen aktiv" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Du har ikke tillatelse til å endre denne brukerrollen." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Bare superbrukere kan opprette nye brukere" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Filnavn" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Velg datafil for opplasting" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Filtypen støttes ikke" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Ingen kolonner funnet i filen" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Ingen datarader funnet i fil" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Ingen datarader oppgitt" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Ingen datakolonner angitt" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrevd kolonne: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dupliaktkolonne: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Sjekk av bakgrunnsarbeider mislyktes" @@ -679,27 +694,223 @@ msgstr "E-post backend ikke konfigurert" msgid "InvenTree system health checks failed" msgstr "InvenTree's-systemets helsesjekker mislyktes" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ventende" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Plassert" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Fullført" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Kansellert" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Tapt" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Returnert" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Pågående" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Sendt" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Trenger oppmerksomhet" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Skadet" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Ødelagt" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Avvist" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "I Karantene" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Gammel lagervare sporingsoppføring" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagevare opprettet" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Redigerte lagervare" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Tildelte serienummer" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Lager opptelt" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Lagerbeholdning manuelt lagt til" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Lagerbeholdning manuelt fjernet" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Posisjon endret" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Lagerbeholdning oppdatert" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Montert i sammenstilling" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Fjernet fra sammenstilling" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Montert komponentartikkel" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Fjernet komponentartikkel" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Skill ut fra overordnet artikkel" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Skill ut fra underartikkel" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Sammenslåtte lagervarer" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Konvertert til variant" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Produksjonsartikkel opprettet" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Produksjonsartikkel fullført" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Produksjonsartikkel avvist" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Brukt av produksjonsordre" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Sendt mot salgsordre" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Mottatt mot innkjøpsordre" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Returnert mot returordre" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Sendt til kunde" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Returnert av kunde" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produksjon" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Retur" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Reparasjon" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Erstatt" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Refusjon" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Avvis" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ukjent database" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Ugyldig fysisk enhet" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Svinn-verdien kan ikke være negativ" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Svinn kan ikke overstige 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Ugyldig verdi for svinn" @@ -727,105 +938,62 @@ msgstr "Systeminformasjon" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Overordnet produksjon" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Utstedt av" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Sammenstilling" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Spores" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Tilgjengelig" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Produksjonsordre" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Produksjonsordre" msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "Sammenstillings-BOMen er ikke godkjent" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "Produksjonsordre kan ikke opprettes for en ulåst del" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Ugyldig valg for overordnet produksjon" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Ansvarlig bruker eller gruppe må spesifiseres" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referanse" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Overordnet produksjon" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Produksjonsordre som denne produksjonen er tildelt" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordren denne produksjonen er tildelt til" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "fullført av" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Lenke til ekstern URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "Produksjonsartikkel" +msgstr "" -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Antall" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Monteres i" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Delnavn" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "Etikett for prosjektkode" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Plassering" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "Lagerplassering for produksjonsartikkel" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Serienumre må angis for sporbare deler" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Plassering" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "Status" +msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "Bruk tildelt lagerbeholdning" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Fjern tildelt lagerbeholdning" -#: build/serializers.py:655 -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:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Trekk fra all lagerbeholdning som allerede er tildelt denne produksjonen" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Kunne ikke starte auto-tideling" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "Leverandørens delnummer" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Produsentens varenummer" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Plasseringsnavn" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "Produksjonsreferanse" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "BOM-referanse" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Emballasje" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Del-ID" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "Del -IPN" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Delbeskrivelse" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Serienummer" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "Tildelt antall" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Tilgjengelig antall" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "Delkategori-ID" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "Delkategorinavn" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Sporbar" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "Nedarvet" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Tillat Varianter" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Tildelt lagerbeholdning" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "I bestilling" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "Tilgjengelige erstatningsvarer" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "Tilgjengelige variantvarer" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "Totalt tilgjengelig lagerbeholdning" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "Ekstern lagerbeholdning" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Ventende" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produksjon" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Kansellert" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Fullført" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Lagerbeholdning kreves for produksjonsordre" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Forfalt produksjonsordre" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" @@ -1764,8 +1721,8 @@ msgstr "Miniatyrbilde for del" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Strekkodehandlinger" @@ -1776,7 +1733,7 @@ msgstr "Strekkodehandlinger" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Vis QR-kode" @@ -1787,9 +1744,9 @@ msgstr "Vis QR-kode" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Fjern strekkodekobling" @@ -1800,7 +1757,7 @@ msgstr "Fjern strekkodekobling" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Koble mot strekkode" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Rediger Produksjon" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Dupliser Produksjon" +msgid "Cancel Build" +msgstr "Kanseller produksjon" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Dupliser Produksjon" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Kanseller produksjon" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Slett Produksjon" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Fullfør Produksjon" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Produksjonsbeskrivelse" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Ingen produksjonsartikler har blitt opprettet for produksjonsordren" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Produksjonsordren er klar til å merkes som fullført" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Produksjonsordren kan ikke fullføres på grunn av utestående artikler" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Nødvendig produksjonsantall er ikke oppnådd enda" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Lagerbeholdning er ikke fullt tildelt til denne Produksjonsordren" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Måldato" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Denne produksjonsordren forfalt %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Forfalt" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Fullførte byggeresultater" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Salgsordre" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Utstedt av" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Prioritet" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Slett Produksjonsordre" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "Produksjonsordrens QR-kode" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Koble Strekkode til Produksjonsordre" @@ -1968,8 +1911,8 @@ msgstr "Lagerkilde" msgid "Stock can be taken from any available location." msgstr "Lagervare kan hentes fra alle tilgengelige plasseringer." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Destinasjon" @@ -1981,23 +1924,23 @@ msgstr "Målplassering er ikke spesifisert" msgid "Allocated Parts" msgstr "Tildelte deler" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "Parti" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Opprettet" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Ingen måldato satt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Fullført" @@ -2015,13 +1958,13 @@ msgstr "Fullført" msgid "Build not complete" msgstr "Produksjon ikke fullført" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Underordnede Produksjonsordrer" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "Produksjonsartikkel" +msgid "Allocate Stock to Build" +msgstr "Tildel Lagerbeholdning til Produksjon" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Automatisk tildeling" msgid "Manually allocate stock to build" msgstr "Manuelt tildel lagerbeholdning til produksjon" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Tildel lagerbeholdning" @@ -2058,7 +2001,7 @@ msgstr "Bestill deler" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "Tilgjengelig lagerbeholdning er filtrert basert på angitt kildeplassering for denne produksjonsordren" +msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" @@ -2072,19 +2015,15 @@ msgstr "Opprett ny produksjonsartikkel" msgid "New Build Output" msgstr "Ny Produksjonsartikkel" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Brukt lagerbeholdning" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Fullførte produksjonsartikkel" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Vedlegg" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Produksjonsnotater" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Tildeling fullført" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Alle linjer er fullt tildelt" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Ny produksjonsordre" @@ -2120,57 +2059,10 @@ msgstr "Ny produksjonsordre" msgid "Build Order Details" msgstr "Produksjonsordre-detaljer" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Linjeelementer" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Ufullstendige artikler" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "Er lenke" - -#: common/api.py:701 -msgid "Is File" -msgstr "Er fil" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Ugyldig valutakode" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Valutakode eksisterer allerede" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Ingen gyldige valutakoder angitt" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Ingen programtillegg" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1762 +2101,1622 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "Velg {name} fil som skal lastes opp" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Oppdatert" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Tidsstempel for forrige oppdatering" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" -msgstr "Nettstedets URL er låst av konfigurasjon" +msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Unik prosjektkode" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store of små bokstaver)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Ingen gruppe" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Et tomt domene er ikke tillatt." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Ugyldig domenenavn: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Ingen programtillegg" + +#: common/models.py:1259 msgid "Restart required" msgstr "Omstart kreves" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endret som krever en omstart av serveren" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Firmanavn" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Base-URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Støttede valutaer" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Liste over støttede valutakoder" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hvor ofte valutakurser skal oppdateres (sett til null for å deaktiverere)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "dager" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Tillat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Tillat overstyring av User-Agent brukt for å laste ned bilder og filer fra eksterne URLer (lå stå blank for standard)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Krev bekreftelse" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Krev eksplisitt brukerbekreftelse for visse handlinger." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Tredybde" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard tredybde for trevisning. Dypere nivåer kan lastes inn ved behov." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Tidsintervall for å se etter oppdateringer(sett til null for å skru av)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "Vis Strekkodedata" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "Vis strekkodedata som tekst" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "IPN regex" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopier BOM-data som standard når du dupliserer en del" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mal" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Sammenstilling" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponent" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Salgbar" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Sporbar" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Vis import i visninger" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Vis importveiviseren i noen deler visninger" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Tillat oppretting av innledende lagerbeholdning når en ny del opprettes" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Tillat oppretting av innledende leverandørdata når en ny del opprettes" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Hvis det er angitt en enhet, skal parameterverdiene samsvare med de angitte enhetene" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimum antall desimalplasser som skal vises når man gjengir prisdata" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalt antall desimalplasser som skal vises når man gjengir prisdata" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Unnta lagervarer som er eldre enn dette antall dager fra prisberegninger" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Interne Priser" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-oppløsning når når det genereres bildefiler for sending til utvidelser for etikettutskrift" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Sidestørrelse" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Aktiver Testrapporter" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Aktiver generering av testrapporter" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Legg ved testrapporter" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Når det skrives ut en Testrapport, legg ved en kopi av Testrapporten på den assosierte Lagervaren" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Automatisk tildeling av Serienummer" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Aumatisk fyll ut serienummer i skjemaer" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Antall dager før lagervarer er ansett som foreldet før utløp" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Tillat redigering av innkjøpsordre etter at de har blitt sendt eller fullført" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatisk merk innkjøpsordre som fullført når alle ordrelinjer er mottatt" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "E-postadresse kreves" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "E-post to ganger" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Passord to ganger" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Gruppe nye brukere blir tilknyttet ved registrering" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Sjekk at alle utvidelser er installert ved oppstart - aktiver i containermiljøer" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Aktiver prosjektkoder" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "Aktiver prosjektkoder for å spore prosjekter" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Varetellingsfunksjonalitet" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Aktiver varetellingsfunksjonalitet for å registrere lagernivåer og regne ut lagerverdi" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Eksluder lagervarer i eksterne plasseringer fra varetellinger" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Antall dager mellom automatisk varetellingsregistrering (sett til null for å deaktivere)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "Rapportslettingsintervall" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Varetellingsrapporter vil slettes etter angitt antall dager" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store og små bokstaver" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Skjul inaktive elementer" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Skjul inaktive deler i resultater som vises på hjemmesiden" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Vis abonnerte deler" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Vis abonnerte deler på startsiden" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Vis abonnerte kategorier" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Vis abonnerte delkatekorier på startsiden" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Vis nyeste deler" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Vis nyeste deler på startsiden" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Vis stykklister som venter på validering på startsiden" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Vis nylige lagerendringer" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Vis nylig endrede lagervarer på startsiden" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Vis lav lagerbeholdning" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Vis lave lagervarer på startsiden" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Vis tomme lagervarer" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Vis tom lagerbeholdning på startsiden" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Vis nødvendig lagerbeholdning" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Vis lagervarer som trengs for produksjon på startsiden" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Vis utløpt lagerbeholdning" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Vis utløpte lagervarer på startsiden" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Vis foreldet lagerbeholdning" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Vis foreldet lagerbeholdning på startsiden" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Vis ventende produksjoner" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Vi ventende produksjoner på startsiden" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Vis forfalte produksjoner" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Vis forfalte produksjoner på startsiden" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Vis utestående Innkjøpsordrer" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Vis utestående Innkjøpsordrer på startsiden" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Vis forfalte Innkjøpsordrer" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Vis forfalte Innkjøpsordrer på startsiden" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Vis utestående Salgsordrer" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Vis utestående Salgsordrer på startsiden" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Vis forfalte SOer" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Vis forfalte SOer på startsiden" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "Vis ventende SO-forsendelser" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "Vis ventende SO-forsendelser på startsiden" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Vis Nyheter" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Vis nyheter på startsiden" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Innebygd etikettvisning" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Vis PDF-etiketter i nettleseren fremfor å lastes ned som en fil" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Standard etikettskriver" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Konfigurer hvilken etikettskriver som skal være valgt som standard" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Innebygd rapportvisning" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Vis PDF-rapporter i nettleseren fremfor å lastes ned som en fil" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Søk i Deler" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Vis deler i forhåndsvsningsvinduet for søk" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Søk i Leverandørdeler" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Vis leverandørdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Søk i Produsentdeler" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Vis produsentdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Skjul Inaktive Deler" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Ekskluder inaktive deler fra forhåndsvisningsvinduet for søk" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Søk i kategorier" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Vis delkategorier i forhåndsvisningsvinduet for søk" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Søk i lagerbeholdning" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Vis lagervarer i forhåndsvisningsvinduet for søk" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Skjul utilgjengelige Lagervarer" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Ekskluder lagervarer som ikke er tilgjengelige fra forhåndsvisningsvinduet for søk" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Søk i Plasseringer" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Vis lagerplasseringer i forhåndsvisningsvinduet for søk" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Søk i Firma" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Vis firma i forhåndsvsningsvinduet for søk" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Søk i Produksjonsordrer" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Vis produksjonsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Søk i Innkjøpsordrer" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Vis innkjøpsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Ekskluder inaktive Innkjøpsordrer" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Ekskluder inaktive innkjøpsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Søk i Salgsordrer" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Vis salgsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Ekskluder Inaktive Salgsordrer" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Ekskluder inaktive salgsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Søk i Returordrer" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "Vis returordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "Ekskluder Inaktive Returordrer" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "Ekskluder inaktive returordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Forhåndsvisning av søkeresultater" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Antall resultater å vise i hver seksjon av søkeresultatsforhåndsvisningen" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Regex-søk" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "Aktiver regulære uttrykk i søkeord" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "Helordsøk" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "Søk returnerer resultater for treff med hele ord" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Vis antall i skjemaer" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Vis antall tilgjengelige deler i noen skjemaer" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "Escape-knappen lukker skjemaer" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Bruk Escape-knappen for å lukke modal-skjemaer" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Fast navigasjonsbar" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "Navigasjonsbarens posisjon er fast på toppen av skjermen" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Datoformat" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Foretrukket format for å vise datoer" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Delplanlegging" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Vis delplanleggingsinformasjon" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Lagertelling for Del" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Vis lagertellingsinformasjon for del (om lagertellingsfunksjonalitet er aktivert)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Tabellstrenglengde" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "Maksimal lengdegrense for tekst vist i tabeller" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "Standard etikettmal for del" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "Etikettmalen for del som velges automatisk" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Standard etikettmal for lagervare" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "Etikettmalen for lagervare som velges automatisk" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "Standard etikettmal for lagerplassering" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "Etikettmalen for lagerplassering som velges automatisk" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "Motta feilrapporter" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "Motta varsler om systemfeil" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Bruker" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Pris" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktiv" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "Sjetong" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Vert" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Tittel" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Brødtekst" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tittel" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Lenke" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Publisert" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Forfatter" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Les" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bilde" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Bildefil" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "Enhetssymbolet må være unikt" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" -msgstr "Enhetsnavn" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "Symbol" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "Valgfritt enhetssymbol" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "Definisjon" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "Enhetsdefinisjon" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Vedlegg" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Fil mangler" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Mangler eksternlenke" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Velg fil å legge ved" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Kommentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "Vedleggskommentar" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "Opplastet dato" +msgstr "Enhetsnavn" -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "Datoen som filen ble lastet opp" +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" +msgstr "" -#: common/models.py:3301 -msgid "File size" -msgstr "Filstørrelse" +#: common/models.py:3113 +msgid "Optional unit symbol" +msgstr "Valgfritt enhetssymbol" -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "Filstørrelse i byte" +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" +msgstr "Definisjon" -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "Ugyldig modelltype spesifisert for vedlegg" +#: common/models.py:3121 +msgid "Unit definition" +msgstr "Enhetsdefinisjon" #: common/notifications.py:314 #, python-brace-format @@ -3984,7 +3736,7 @@ msgstr "{verbose_name} kansellert" msgid "A order that is assigned to you was canceled" msgstr "En ordre som er tildelt til deg ble kansellert" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Artikler mottatt" @@ -4000,103 +3752,66 @@ msgstr "Artikler har blitt mottatt mot en returordre" msgid "Error raised by plugin" msgstr "Feil oppstått i utvidelse" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "Lås" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Filnavn" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "Modelltype" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "Ingen modelltype angitt for vedlegg" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "Ugyldig modelltype for vedlegg" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "Minste antall plasser kan ikke være mer enn største antall plasser" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "Største antall plasser kan ikke være mindre enn minste antall plasser" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Et tomt domene er ikke tillatt." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Ugyldig domenenavn: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Deler importert" msgid "Previous Step" msgstr "Forrige trinn" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "Delen er aktiv" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "Leverandør er aktiv" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" -msgstr "Leverandørdel er aktiv" +msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" -msgstr "Intern del er aktiv" +msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" -msgstr "Leverandør er aktiv" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Firma" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmaer" +msgstr "" -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Beskrivelse av firma" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Beskrivelse av firmaet" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Nettside" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Bedriftens nettside URL" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Kontakt-telefonnummer" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Kontakt e-post" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Kontaktpunkt" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" -msgstr "Er firmaet aktivt?" +msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "Er kunde" +#: company/models.py:165 +msgid "is customer" +msgstr "er kunde" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Selger du varer til dette firmaet?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "Er leverandør" +#: company/models.py:171 +msgid "is supplier" +msgstr "er leverandør" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Kjøper du varer fra dette firmaet?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "Er produsent" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "er produsent" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Produserer dette firmaet deler?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Standardvaluta brukt for dette firmaet" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adresse" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresser" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Velg selskap" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "Adressetittel" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "Tittel som beskriver addressen" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "Hovedadresse" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "Sett som hovedadresse" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Linje 1" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Adresselinje 1" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Linje 2" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Adresselinje 2" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Poststed/område" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "Postnummerets by/område" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "Delstat/provins" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "Delstat eller provins" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Adressens land" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Notater til transportør" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Notater for transportør" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Interne fraktnotater" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Fraktnotater for internt bruk" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Produsentdeler" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basisdel" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Velg del" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Produsent" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "MPN" +msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Produsentens varenummer" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "URL for ekstern produsentdel-lenke" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Produsentens delbeskrivelse" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "Produsentdel parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Produsentdeler" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Parameternavn" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Verdi" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Parameterverdi" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Enheter" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Parameterenheter" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Leverandørdel" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "Pakkeenhetene må være komptible med delens basisenhet" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "Pakkeenhet må være mer enn null" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverandør" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" -msgstr "Er denne leverandørdelen aktiv?" +msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Velg produsentdel" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "URL for ekstern leverandørdel-lenke" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Notat" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Emballasje" + +#: company/models.py:864 msgid "Part packaging" msgstr "Delemballasje" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Pakkeantall" -#: company/models.py:860 +#: company/models.py:871 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:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "flere" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Bestill flere" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Antall tilgjengelig fra leverandør" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Tilgjengelighet oppdatert" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "Leverandørens prisbrudd" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "Bedriftsnavn" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "På lager" @@ -4571,8 +4257,8 @@ msgstr "På lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktiv" @@ -4607,11 +4293,11 @@ msgstr "Slett Firma" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Bilde av del" @@ -4630,17 +4316,17 @@ msgstr "Last ned bilde fra URL" msgid "Delete image" msgstr "Slett bilde" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Kunde" @@ -4648,35 +4334,42 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "Bruker standardvaluta" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adresse" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "Fjern Bilde" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "Fjern tilknyttet bilde fra dette firmaet" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Fjern" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "Last opp bilde" +msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "Last ned Bilde" +msgstr "" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4690,7 +4383,7 @@ msgstr "Opprett ny leverandørdel" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Ny leverandørdel" @@ -4703,7 +4396,7 @@ msgstr "Produsentdeler" msgid "Create new manufacturer part" msgstr "Opprett ny produsentdel" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Ny Produsentdel" @@ -4717,7 +4410,7 @@ msgstr "Leverandørs lagerbeholdning" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Ny innkjøpsordre" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Produsenter" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Bestill del" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Slett produsentdel" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Intern del" @@ -4838,7 +4530,7 @@ msgstr "Ingen produsentinformasjon tilgjengelig" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,25 +4539,21 @@ msgstr "Leverandører" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametere" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nytt Parameter" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "Notater for leverandørdel" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" -msgstr "Legg til Parameter" +msgstr "" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" @@ -4887,6 +4575,19 @@ msgstr "Tildelte lagervarer" msgid "Contacts" msgstr "Kontakter" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresser" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Leverandørdel" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "Handlinger for leverandørdeler" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Bestill del" @@ -4928,12 +4629,12 @@ msgstr "Slett Leverandørdel" msgid "No supplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "SKU-kode" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Leverandørs lagerbeholdning" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Opprett ny lagervare" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Ny Lagervare" @@ -4966,33 +4667,29 @@ msgstr "Prisinformasjon" msgid "Add Price Break" msgstr "Legg til Prisbrudd" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "Notater for leverandørdeler" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Lagervarer" @@ -5018,236 +4715,134 @@ msgstr "Kunder" msgid "New Customer" msgstr "Ny Kunde" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmaer" + #: company/views.py:52 msgid "New Company" msgstr "Nytt Firma" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Plassert" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Gyldig" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Etikettnavn" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Etikettbeskrivelse" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Etikett" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Etikett-malfil" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktivert" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Etikettmal er aktiver" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Bredde [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Etikettbredde, spesifisert i mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Høyde [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Etiketthøyde, spesifisert i mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Filnavnmønster" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Mønster for generering av etikett-filnavn" -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "Søkefiltre (kommaseparert liste over nøkkel=verdi-par)" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filtre" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-kode" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-kode" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Ukjent" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Total pris" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Ordrestatus" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Ordrereferanse" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Ingen samsvarende innkjøpsordre funnet" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Ordre" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Returordre" @@ -5399,617 +4980,513 @@ msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" msgid "Contact does not match selected company" msgstr "Kontakten samsvarer ikke med valgt firma" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Lenke til ekstern side" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Opprettet av" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Bruker eller gruppe ansvarlig for ordren" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "Kontaktpunkt for denne ordren" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "mottatt av" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Sendt dato" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Dato bestillingen ble sendt" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "Bestillingen kan ikke fullføres da ingen deler er tilordnet" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1393 +#: order/models.py:1296 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:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Kontekst" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "slettet" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Mottatt" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Hvor vil innkjøper at artikkelen skal lagres?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuell del kan ikke tildeles salgsordre" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Sendt" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Linje" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Artikkel" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "Kun serialiserte artikler kan tilordnes en Returordre" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "Datoen denne returartikkelen ble mottatt" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Utfall" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Leverandørnavn" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Internt delnummer" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Heltallsverdi må angis for sporbare deler" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "Følgende serienummer er allerede tildelt" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:1790 +#: order/serializers.py:1684 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:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "Valuta for linje" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Tapt" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Returnert" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Pågående" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Retur" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Reparasjon" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Erstatt" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Refusjon" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Avvis" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Forfalt Innkjøpsordre" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Rediger ordre" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Dupliser ordre" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Kanseller ordre" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Dupliser ordre" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "Send ordre" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Merk ordren som fullført" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Fullfør ordre" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "Miniatyrbilde for leverandør" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Ordrereferanse" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Ordrebeskrivelse" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Fullførte elementer" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Ufullstendig" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Utstedt" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Total kostnad" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Total kostnad kunne ikke beregnes" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "Duplikatvalg" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Fjern rad" @@ -6231,6 +5708,15 @@ msgstr "Ordren er allerede behandlet. Filer kan ikke lastes opp." msgid "Step %(step)s of %(count)s" msgstr "Trinn %(step)s av %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Linjeelementer" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Mottatt lagerbeholdning" @@ -6243,7 +5729,7 @@ msgstr "Innkjøpsordreartikler" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Legg til linjeelement" @@ -6291,31 +5777,31 @@ msgstr "Skriv ut returordrerapport" msgid "Print packing list" msgstr "Skriv ut pakkeliste" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Kundereferanse" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Total kostnad" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "Ordredetaljer" msgid "Print sales order report" msgstr "Skriv ut salgsordrerapport" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Send artikler" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Fullfør Salgsordre" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Salgsordren er ikke fullstendig tildelt" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Ventende forsendelser" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Handlinger" @@ -6401,21 +5881,35 @@ msgstr "Oppdaterte {part} enhetspris to {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Oppdaterte {part} enhetspris til {price} og antall til {qty}" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Del-ID" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Delnavn" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Delbeskrivelse" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Revisjon" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Nøkkelord" @@ -6423,16 +5917,15 @@ msgstr "Nøkkelord" msgid "Part Image" msgstr "Del-bilde" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "Kategori-ID" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Kategorinavn" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "Standard plasserings-ID" @@ -6440,11 +5933,11 @@ msgstr "Standard plasserings-ID" msgid "Default Supplier ID" msgstr "Standard leverandør-ID" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variant av" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -6452,187 +5945,165 @@ msgstr "Minimal lagerbeholdning" msgid "Used In" msgstr "Brukt i" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "Produseres" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Overordnet ID" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Overordnet navn" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Sti til kategori" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Deler" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "BOM-nivå" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "BOM artikkel-ID" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "Overodnet IPN" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "Del -IPN" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minstepris" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Makspris" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Innkommende innkjøpsordre" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Utgående salgsordre" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Lagervarer produsert av en produksjonsordre" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Lagervarer påkrevd for produksjonsordre" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Gyldig" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Dette alternativet må være valgt" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategori" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard plassering" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Total lagerbeholdning" @@ -6641,1148 +6112,1024 @@ msgstr "Total lagerbeholdning" msgid "Input quantity for price calculation" msgstr "Sett inn antall for prisberegning" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Delkategori" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Standardplassering for deler i denne kategorien" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Standard nøkkelord" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Standard nøkkelord for deler i denne kategorien" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" -#: part/models.py:178 +#: part/models.py:148 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:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Ugyldig valg for overordnet del" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, 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:632 +#: part/models.py:551 #, 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:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Delnavn" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Internt delnummer" + +#: part/models.py:912 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standard leverandør" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Standard leverandørdel" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Siste lagertelling" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Antall" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Dato" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Flere notater" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "Bruker som utførte denne lagertellingen" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Rapport" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "Lagertellingsrapportfil (generert internt)" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Antall deler" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "Antall deler dekket av varetellingen" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "Bruker som forespurte varetellingsrapporten" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "Valg må være unike" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Testmaler kan bare bli opprettet for sporbare deler" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Aktivert" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3635 +#: part/models.py:3506 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:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3642 +#: part/models.py:3513 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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Valg" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "Valg må være unike" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Parameternavn" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Sjekkboks" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: part/models.py:3793 +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "Valg" + +#: part/models.py:3645 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Overordnet del" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametermal" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Parameterverdi" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standardverdi" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "Del-ID eller delnavn" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Unik del-ID-verdi" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Delens interne delnummerverdi" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Nivå" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "BOM-nivå" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4266 +#: part/models.py:4048 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:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Svinn" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Forventet produksjonssvinn (absolutt eller prosent)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Tillat Varianter" + +#: part/models.py:4096 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:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4637 +#: part/models.py:4419 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:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Ingen deler valgt" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Velg kategori" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Kopier parametere" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:514 +#: part/serializers.py:480 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:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Begrens lagerbeholdningsrapport til en bestemt del og enhver variant av delen" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Begrens lagerbeholdningsrapport til en bestemt delkategori og alle underkategorier" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Begrens lagerbeholdningsrapport til en bestemt plasering og eventuelle underplasseringer" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "Ekskluder ekstern lagerbeholdning" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "Ekskluder lagervarer i eksterne lokasjoner" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Generer rapport" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "Genererer rapport som inneholder beregnede lagerdata" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Oppdater deler" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "Oppdater spesifiserte deler med beregnede lagerbeholdningsdata" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "Lagerbeholdningsfunksjonalitet er ikke aktivert" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, 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:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Kan Produsere" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Nullstill eksisterende BOM" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "Fjern eksisterende BOM-artikler før opplastning" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "Ingen del-kolonne angitt" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "Flere samsvarende deler funnet" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Ingen samsvarende del funnet" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "Delen er ikke betegnet som en komponent" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Antall ikke oppgitt" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Ugyldig antall" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "Minst en BOM-artikkel kreves" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Totalt Antall" @@ -7828,65 +7175,65 @@ msgstr "Denne BOMen ble sist sjekket av %(checker)s den %(check_date)s" msgid "This BOM has not been validated." msgstr "Denne BOMen er ikke godkjent." -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Utfør lagertelling for denne delkategorien" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Du abonnerer på varsler for denne kategorien" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Abonner på varsler for denne kategorien" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Kategorihandlinger" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Rediger kategori" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Rediger Kategori" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Slett kategori" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Slett Kategori" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Toppnivå delkategori" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Deler (inkludert underkategorier)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Opprett ny del" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Ny Del" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Delparametere" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Opprett ny delkategori" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Ny Kategori" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "Legg til lagertellingsinformasjon" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Lagertelling" @@ -7946,105 +7293,101 @@ msgstr "Deltestmaler" msgid "Add Test Template" msgstr "Legg til Testmal" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Salgsordretildelinger" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Delnotater" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Delvarianter" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Opprett ny variant" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Ny Variant" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Legg til ny parameter" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Relaterte Deler" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Legg til relatert" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Stykkliste (BOM)" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Eksporthandlinger" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Eksporter BOM" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Skriv ut BOM-rapport" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "BOM-handlinger" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Last opp BOM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Godkjenn BOM" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Legg til BOM-artikkel" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Sammenstillinger" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Del-produksjoner" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Produksjonsordre-tildelinger" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Deleleverandører" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Deleprodusenter" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "Last ned importmal for del" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Velg filformat" @@ -8103,7 +7446,7 @@ msgstr "Abonner på varsler for denne delen" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Skriv ut etikett" @@ -8113,7 +7456,7 @@ msgstr "Vis prisinformasjon" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Lagerhandlinger" @@ -8125,7 +7468,7 @@ msgstr "Tell delbeholdning" msgid "Transfer part stock" msgstr "Overfør delbeholdning" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Delhandlinger" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Delen er virtuall (ikke en fysisk del)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Vis detaljer for del" @@ -8188,47 +7531,51 @@ msgstr "Tildelt til produksjonsordrer" msgid "Allocated to Sales Orders" msgstr "Tildelt til Salgsordrer" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Kan Produsere" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Minimalt lagerbeholdningsnivå" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Prisområde" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Siste serienummer" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Søk etter serienummer" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Varianter" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Lagerbeholdning" @@ -8324,17 +7671,17 @@ msgstr "Overstyr delprising" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Rediger" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Sist oppdatert" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Ingen lagerbeholdning" @@ -8486,7 +7833,7 @@ msgstr "Bilde for del ikke funnet" msgid "Part Pricing" msgstr "Delprising" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Ingen handling spesifisert" msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "Strekkode samsvarer med ekisterende element" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "Ingen samsvarende del-data funnet" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "Finner ingen matchende leverandørdeler" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "Flere samsvarende leverandørdeler funnet" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "Fant leverandørdel" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "Artikkelen er allerede mottatt" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "Ingen treff for leverandørstrekkode" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "Flere samsvarende elementer funnet" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "Ingen samsvarende element funnet" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "Strekkoden samsvarer ikke med eksisterende lagervare" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "Lagervare samsvarer ikke med linjeelement" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Utilstrekkelig lagerbeholdning" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "Lagervaren er tildelt en salgsordre" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "Ikke nok informasjon" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "Fant flere leverandørdeler for strekkoden" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Fant flere innkjøpsordrer som samsvarer med '{order}'" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Ingen samsvarende innkjøpsordre for '{order}'" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "Innkjøpsordre stemmer ikke med leverandør" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "Fant ikke ventende artikkel for leverandørdel" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "Mer informasjon nødvendig for å motta artikkelen" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "Mottok ordreartikkelen" @@ -8607,120 +7946,88 @@ msgstr "Mottok ordreartikkelen" msgid "Scanned barcode data" msgstr "Skannet strekkodedata" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "Innkjøpsordre å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "Innkjøpsordre er ikke ventende" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "Innkjøpsordre å motta artikler mot" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "Innkjøpsordren har ikke blitt sendt" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "Plassering å motta deler til" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "Kan ikke velge en strukturell plassering" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "Salgsordre å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "Salgsordre er ikke ventende" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "Salgsordrelinje å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "Salgsordre-forsendelse å tildele artikler mot" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "Forsendelsen er allerede levert" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "Antall å tildele" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "Utskrift av etikett mislyktes" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "InvenTree-strekkoder" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "Gir innebygd støtte for strekkoder" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "InvenTree-bidragsytere" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" +msgstr "InvenTree-bidragsytere" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" @@ -8768,21 +8075,19 @@ msgstr "InvenTree valutautveksling" msgid "Default currency exchange integration" msgstr "Standard valutaintegrasjon" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF etikettskriver" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "Gir innebygd støtte for å skrive ut PDF-etiketter" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "Feilsøkingsmodus" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Aktiver feilsøkingsmodus - returnerer rå HTML i stedet for PDF" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "Kantlinjer" msgid "Print a border around each label" msgstr "Skriv ut en kant rundt hver etikett" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "Liggende" @@ -8838,11 +8143,11 @@ msgstr "InvenTree etikett-ark skriver" msgid "Arrays multiple labels onto a single sheet" msgstr "Sprer ut flere etiketter på ett enkelt ark" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "Etiketten er for stor for sidestørrelse" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "Ingen etiketter ble generert" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Konfigurasjon av utvidelse" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Konfigurasjon av utvidelser" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Nøkkel" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Utvidelsens \"Key\"" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "Navn på utvidelsen" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Pakkenavn" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Er utvidelsen aktiv" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installert" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Eksempel-utvidelse" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Innebygd utvidelse" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Utvidelse" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Metode" @@ -8998,17 +8302,17 @@ msgstr "Metode" msgid "No author found" msgstr "Ingen forfatter funnet" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Utvidelsen krever minst versjon {v}" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Utvidelsen krever maks versjon {v}" @@ -9091,1193 +8395,908 @@ msgstr "Installasjonen ble ikke bekreftet" msgid "Either packagename of URL must be provided" msgstr "Enten pakkenavn eller URL må angis" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Full omlasting" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "Utfør en full omlasting av utvidelsesregisteret" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Tvangsomlasting" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Tving en omlasting av utvidelsesregisteret, selv om det allerede er lastet" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "Hent inn utvidelser" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "Hent inn utvidelser og legg dem til i registeret" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Aktivér utvidelse" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "Aktivér denne utvidelsen" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Ingen gyldige objekter angitt for mal" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Malfil '{template}' mangler eller eksisterer ikke" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Testrapport" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Malnavn" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Filnavnmønster" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Filtre" +#: report/models.py:183 +msgid "Report template file" +msgstr "Rapportmalfil" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Beskrivelse av rapportmal" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Rapportrevisjonsnummer (øker automatisk)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "Sidestørrelse for PDF-rapporter" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "Generer rapport i landskapsorientering" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Bredde [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Mønster for å generere rapportfilnavn" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Etikettbredde, spesifisert i mm" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Rapportmal er aktiver" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Høyde [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Lagervare-søkefilter (kommaseparert liste over nøkkel=verdi-par)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Etiketthøyde, spesifisert i mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "Inkluder installerte tester" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Inkluder testresultater for lagervarer installert i sammenstilt artikkel" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Produksjonsfiltre" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Produksjons-søkefilter (kommaseparert liste over nøkkel=verdi-par" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Delfiltre" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "Del-søkefilter (kommaseparert liste over nøkkel=verdi-par" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Innkjøpsordre-søkefilter" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Salgsordre-søkefilter" -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" +#: report/models.py:569 +msgid "Return order query filters" +msgstr "Returordre-søkefilter" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Snutt" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "Rapportsnuttfil" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "Filbeskrivelse for snutt" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "Ressurs" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "Rapportressursfil" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "Ressursfilbeskrivelse" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-kode" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-kode" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "spørringsfiltre for lagerplassering (kommadelt liste av nøkkel=verdi-par)" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Nødvendige materialer" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Kreves for" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Leverandør ble slettet" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Enhetspris" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "Ekstra linjeelementer" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Serienummer" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "Artikler ved lagerplassering" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Testrapport for lagervare" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Testresultater" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Resultat" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Bestått" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Mislykket" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "Ingen resultat (obligatorisk)" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Ingen resultat" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Installerte artikler" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Serienummer" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "Asset-filen eksisterer ikke" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "Bildefil ikke funnet" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "part_image-taggen krever en Part-instans" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "company_image-taggen krever en Company-instans" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "Plasserings-ID" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Plasseringsnavn" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Plasserings-sti" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "Lagervare-ID" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Statuskode" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "Leverandørdel-ID" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "Leverandør-ID" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Leverandørnavn" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "Kunde-ID" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installert i" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "Produksjons-ID" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "Salgsordre-ID" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "Innkjøpsordre-ID" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Gjennomgang kreves" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "Slett når oppbrukt" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Utløpsdato" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "Lagerplasseringstype" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "Lagerplasseringstyper" -#: stock/models.py:91 +#: stock/models.py:90 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:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Lagerplassering" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Eier" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Velg eier" -#: stock/models.py:189 +#: stock/models.py:167 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:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Ekstern" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "Dette er en ekstern lagerplassering" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Plasseringstype" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "Lagerplasseringstype for denne plasseringen" -#: stock/models.py:279 +#: stock/models.py:254 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:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:708 +#: stock/models.py:670 #, 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:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:921 +#: stock/models.py:885 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:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1525 +#: stock/models.py:1479 #, 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:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "Serienumre må være en liste over tall" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "Serienummeret er for høyt" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Overodnet element" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 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:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Utløpt" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Underordnede artikler" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "Lagerplassering for returnert artikkel" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "Tillat forskjellig status" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "Minst to lagervarer må oppgis" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "Lagervare primærnøkkel verdi" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "Lagervare statuskode" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "Lager transaksjonsnotater" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Trenger oppmerksomhet" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Skadet" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Ødelagt" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Avvist" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "I Karantene" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Gammel lagervare sporingsoppføring" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Lagevare opprettet" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Redigerte lagervare" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Tildelte serienummer" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Lager opptelt" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Lagerbeholdning manuelt lagt til" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Lagerbeholdning manuelt fjernet" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Posisjon endret" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Lagerbeholdning oppdatert" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Montert i sammenstilling" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Fjernet fra sammenstilling" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Montert komponentartikkel" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Fjernet komponentartikkel" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Skill ut fra overordnet artikkel" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Skill ut fra underartikkel" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Sammenslåtte lagervarer" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Konvertert til variant" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Produksjonsartikkel opprettet" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Produksjonsartikkel fullført" +msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Produksjonsartikkel avvist" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "Tillat forskjellig status" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Brukt av produksjonsordre" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Sendt mot salgsordre" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "Minst to lagervarer må oppgis" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Mottatt mot innkjøpsordre" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Returnert mot returordre" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "Lagervare primærnøkkel verdi" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Sendt til kunde" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "Lagervare statuskode" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Returnert av kunde" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "Lager transaksjonsnotater" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "Testdata" msgid "Test Report" msgstr "Testrapport" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Slett testdata" @@ -10316,15 +9335,15 @@ msgstr "Notater for lagervare" msgid "Installed Stock Items" msgstr "Installerte lagervarer" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Installer lagervare" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Slett alle testresultater for denne lagervaren" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Skann til plassering" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Utskriftshandlinger" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "Lagerjusteringshandlinger" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Tell beholdning" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Legg til lagerbeholdning" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Fjern lagerbeholdning" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Serialiser lager" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Overfør lagerbeholdning" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "Tilordne til kunde" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "Slett lagervare" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Produksjon" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Overodnet element" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Ingen produsent valgt" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Du er ikke i eierlisten til dette elementet. Denne lagervaren kan ikke redigeres." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Kun lesetilgang" @@ -10469,8 +9492,12 @@ msgstr "neste side" msgid "Navigate to next serial number" msgstr "Gå til neste serienummer" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Tilgjengelig antall" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Ingen plassering satt" @@ -10487,6 +9514,11 @@ msgstr "Denne lagervaren har ikke bestått alle påkrevde tester" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Denne lagervaren utløp %(item.expiry_date)s" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Utløpt" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "Denne lagervaren utløper %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Ingen lagertelling utført" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "Velg en av variantdelene oppført under." -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Advarsel" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Denne handlingen er vanskelig å omgjøre" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "Opprett serialiserte artikler for denne lagervaren." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Velg antall å serialisere, og unike serienummer." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "Utfør lagertelling for denne lagerplasseringen" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "Finn lagerplassering" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Skann lagervarer til denne plasseringen" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Skann inn Lagervarer" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "Skann lagerbeholder til denne plasseringen" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "Skann inn beholder" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "Skriv ut plasseringsrapport" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Plasseringshandlinger" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Rediger plassering" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Slett plassering" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Toppnivå-lagerplassering" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Plasseringens Eier" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Du er ikke i listen over eiere av denne plasseringen. Denne lagerplasseringen kan ikke redigeres." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Opprett ny lagerplassering" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Ny plassering" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "Sporing av lager" msgid "Allocations" msgstr "Tildelinger" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Underordnede artikler" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Tilgang nektet" @@ -10840,12 +9872,12 @@ msgstr "Innstillinger for innlogging" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Utgående e-post har ikke blitt kanskje. Noen innloggings- og registreringsfunksjoner fungerer kanskje ikke korrekt!" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Registrering" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "URL-segment" msgid "Part Settings" msgstr "Innstillinger for del" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Import av Del" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Importér Del" @@ -10922,36 +9954,36 @@ msgstr "Innstillinger for Utvidelser" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Endring av innstillingene nedenfor krever at du umiddelbart starter serveren på nytt. Ikke endre under aktiv bruk." -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Utvidelser" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Installer Utvidelse" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Last utvidelser på nytt" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Eksterne utvidelser er ikke aktivert for denne InvenTree-installasjonen" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "Utvidelse feilstack" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "Stadium" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Melding" @@ -10994,7 +10026,7 @@ msgstr "Installasjonssti" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "Innebygd" @@ -11004,7 +10036,7 @@ msgstr "Dette er en innebygd utvidelse som ikke kan deaktiveres" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "Eksempel" @@ -11038,20 +10070,20 @@ msgstr "Innstillinger for Innkjøpsordre" msgid "Pricing Settings" msgstr "Innstillinger for prising" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Valutakurser" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Oppdater nå" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Siste oppdatering" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Aldri" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Slett" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "Ny plasseringstype" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Startside" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "Innstillinger for salgsordre" msgid "Stock Settings" msgstr "Instillinger for lager" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "Lagerplasseringstyper" @@ -11267,6 +10299,18 @@ msgstr "Kontoinnstillinger" msgid "Change Password" msgstr "Endre passord" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Brukernavn" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Fornavn" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Etternavn" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Følgende e-postadresser er tilknyttet din konto:" @@ -11340,49 +10384,49 @@ msgstr "Sett opp multifaktor" msgid "Remove multifactor" msgstr "Fjern multifaktor" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Aktive økter" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Logg ut aktive økter (unntatt denne)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Logg Ut Aktive Økter" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "ukjent på ukjent" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "ukjent" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP-adresse" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Enhet" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Siste aktivitet" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s siden (denne økten)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s siden" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "Send feilrapport" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "kopier til utklippstavle" @@ -11554,7 +10598,7 @@ msgstr "Bekreft e-postadresse" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Vennligst bekreft at %(email)s er ne e-postadresse for bruker %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Bekreft" @@ -11563,26 +10607,26 @@ msgstr "Bekreft" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Denne e-postbekreftelseslenken er utgått eller ugyldig. Vennligst send en ny bekreftelsesforespørsel." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Logg inn" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Ikke medlem?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrer deg" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Glemt passord?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "eller logg på med" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Er du sikker på at du vil logge ut?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Gå tilbake til siden" @@ -11710,19 +10754,15 @@ msgstr "Trinn 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Skann QR-koden nedenfor med en symbolgenerator du velger (for eksempel Google Authenticator)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Trinn 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Angi et symbol generert av appen:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Bekreft" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "Følgende deler har for lav lagerbeholdning" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Antall som kreves" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "Klikk på følgende lenke for å se denne delen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimum antall" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Skann strekkode" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Skjemafeil eksisterer" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Send" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "Varsler lastes inn her" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Legg til" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Lagre" msgid "Show all notifications and history" msgstr "Vis alle varsler og historikk" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR-data ikke oppgitt" @@ -15125,14 +14122,6 @@ msgstr "E-Post-Innstillinger" msgid "Email settings not configured" msgstr "E-postinnstillinger ikke konfigurert" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -15205,35 +14194,35 @@ msgstr "Sist gang tokenet ble brukt" msgid "Revoked" msgstr "Tilbakekalt" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Tillatelse satt" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Gruppe" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Visning" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Tillatelse til å se elementer" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Tillatelse til å legge til elementer" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Endre" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Tillatelse til å endre elementer" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Tillatelse til å slette elementer" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index c6431a1394d3..66c4f00316b7 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -48,38 +48,34 @@ msgstr "Podano nieprawidłową ilość" msgid "Invalid quantity supplied ({exc})" msgstr "Niepoprawna ilość ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Uwagi" @@ -92,270 +88,250 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Wprowadź hasło" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Wprowadź nowe hasło" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Potwierdź hasło" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Potwierdź nowe hasło" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Stare hasło" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Adres email (ponownie)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Potwierdzenie adresu email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Należy ponownie wpisać ten sam adres e-mail." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Podany podstawowy adres e-mail jest nieprawidłowy." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Podany e-mail domeny nie został zatwierdzony." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Rejestracja jest wyłączona." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nieprawidłowy zakres grupy: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nieprawidłowa kolejność grup: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Liczba unikalnych numerów seryjnych ({len(serials)}) musi odpowiadać ilości ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "bułgarski" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Czeski" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Duński" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Niemiecki" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grecki" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Angielski" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Perski" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "fiński" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francuski" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "hinduski" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Węgierski" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Włoski" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japoński" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreański" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Łotewski" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polski" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazylijski)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumuński" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Słowacki" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Słoweński" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "serbski" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tajski" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turecki" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukraiński" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "chiński (uproszczony)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" @@ -364,310 +340,349 @@ msgstr "chiński (tradycyjny)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Logowanie do aplikacji" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "Adres E-Mail" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Błąd podczas walidacji wtyczki" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadane muszą być obiektem typu dict w Python" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Wtyczka Metadane" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadanych JSON, do użycia przez wtyczki zewnętrzne" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Nieprawidłowo sformatowany wzór" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Określono nieznany format klucza" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Brak wymaganego formatu klucza" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Pole odniesienia nie może być puste" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Odniesienie musi być zgodne z wymaganym wzorem" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Brak pliku" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Brak zewnętrznego odnośnika" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Załącznik" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Wybierz plik do załączenia" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Łącze" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link do zewnętrznego adresu URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Komentarz" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Komentarz pliku" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Użytkownik" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "data przesłania" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Nazwa pliku nie może być pusta" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Nieprawidłowy katalog załącznika" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Nazwa pliku zawiera niedozwolony znak '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Brak rozszerzenia w nazwie pliku" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Załącznik o tej nazwie już istnieje" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Błąd zmiany nazwy pliku" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "nadrzędny" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Notatki Markdown (opcjonalne)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktywny" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Nie masz uprawnień do zmiany tej roli użytkownika." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Tylko superużytkownicy mogą tworzyć nowych użytkowników" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Nazwa pliku" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Plik danych" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Wybierz plik danych do przesłania" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nieobsługiwany typ pliku" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Plik jest zbyt duży" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Nie znaleziono kolumn w pliku" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Nie znaleziono wierszy danych w pliku" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Nie podano wierszy danych" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Nie podano kolumn danych" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Brakuje wymaganej kolumny: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Zduplikowana kolumna: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Sprawdzenie robotnika w tle nie powiodło się" @@ -679,27 +694,223 @@ msgstr "Nie skonfigurowano backendu e-mail" msgid "InvenTree system health checks failed" msgstr "Sprawdzanie poziomu zdrowia InvenTree nie powiodło się" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "W toku" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Umieszczony" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Zakończono" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Anulowano" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Zagubiono" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Zwrócone" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "W trakcie" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Wysłane" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Wymaga uwagi" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Uszkodzone" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Zniszczone" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Odrzucone" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Poddany kwarantannie" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Starsze śledzenie wpisów stanu magazynowego" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Utworzono element magazynowy" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Edytuj pozycję magazynową" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Przypisano numer seryjny" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Zapas policzony" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Zapas dodany ręcznie" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Zapas usunięty ręcznie" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Lokalizacja zmieniona" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Zaktualizowano stan magazynu" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Zainstalowano do montażu" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Usunięto z montażu" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Zainstalowano element komponentu" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Usunięto element komponentu" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Podziel z pozycji nadrzędnej" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Podziel element podrzędny" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Scalone przedmioty magazynowe" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Przekonwertowano na wariant" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Dane wyjściowe kolejności kompilacji utworzone" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Dane wyjściowe kolejności kompilacji ukończone" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Odrzucono wynik zlecenia produkcji" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Zużyte przez kolejność kompilacji" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Wysłane na podstawie zlecenia sprzedaży" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Otrzymane na podstawie zlecenia zakupu" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Zwrócone na podstawie zlecenia zwrotu" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Wyślij do klienta" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Zwrócony od klienta" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produkcja" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Zwrot" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Naprawa" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Wymiana" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Zwrot pieniędzy" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Odrzuć" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Nieznana baza danych" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Niewłaściwa jednostka fizyczna" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Wartość przedawnienia nie może być ujemna" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Przedawnienie nie może przekroczyć 100 %" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Nieprawidłowa wartość przedawnienia" @@ -727,105 +938,62 @@ msgstr "Informacja systemowa" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Budowa nadrzędna" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Dodane przez" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 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:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Złożenie" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Dostępne" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Zlecenie Budowy" msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referencja" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Budowa nadrzędna" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Zamówienie budowy, do którego budowa jest przypisana" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Komponent" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link do zewnętrznego adresu URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, 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})" +msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Nazwa komponentu" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Lokalizacja" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Lokalizacja" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Usuń przydzielone zasoby" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Odejmij wszystkie zasoby, które zostały już przypisane do tej produkcji" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "Zaakceptuj nieprzydzielone" +msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 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" +msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" -msgstr "Wymagany stan nie został w pełni przypisany" +msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Numer producenta komponentu" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Opakowanie" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID komponentu" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN komponentu" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Numer Seryjny" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Możliwość śledzenia" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Zezwalaj na warianty" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "W Zamówieniu" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "W toku" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produkcja" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Anulowano" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Zakończono" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "Miniaturka przedmiotu" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Akcje kodów kreskowych" @@ -1776,7 +1733,7 @@ msgstr "Akcje kodów kreskowych" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Pokaż Kod QR" @@ -1787,9 +1744,9 @@ msgstr "Pokaż Kod QR" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Odłącz Kod Kreskowy" @@ -1800,7 +1757,7 @@ msgstr "Odłącz Kod Kreskowy" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Połącz Kod Kreskowy" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Edytuj Budowę" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" +msgid "Cancel Build" +msgstr "Anuluj Budowę" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Anuluj Budowę" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Data docelowa" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Zaległe" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Zamówienie zakupu" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Dodane przez" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Priorytet" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "Źródło magazynu" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Przeznaczenie" @@ -1981,23 +1924,23 @@ msgstr "Nie określono lokalizacji docelowej" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Partia" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Utworzony" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Zakończone" @@ -2015,13 +1958,13 @@ msgstr "Zakończone" msgid "Build not complete" msgstr "Budowa niezakończona" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Przydziel zapasy do budowy" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Automatyczne przypisywanie" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Przydziel zapasy" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Załączniki" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notatki tworzenia" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Nowe zlecenie budowy" @@ -2120,57 +2059,10 @@ msgstr "Nowe zlecenie budowy" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Brak wtyczki" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Plik" msgid "Select {name} file to upload" msgstr "Wybierz plik {name} do przesłania" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Zaktualizowany" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Data ostatniej aktualizacji" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Unikalny kod projektu" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Opis projektu" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Brak grupy" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Pusta domena nie jest dozwolona." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Niepoprawna nazwa domeny: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Brak wtyczki" + +#: common/models.py:1259 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nazwa firmy" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Bazowy URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "dni" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Wymagaj potwierdzenia" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Wymagaj wyraźnego potwierdzenia dla określonych działań." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Głębokość drzewa" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Domyślna głębokość drzewa dla widoku drzewa. Głębsze poziomy mogą być leniwe, gdy są potrzebne." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Szablon" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Złożenie" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponent" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Możliwość śledzenia" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Wirtualny" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" -msgstr "Pokaż powiązane części" +msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" -msgstr "Użyj cennika dostawcy" +msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" -msgstr "Nadpisanie historii zakupów" +msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatycznie oznacz zlecenia jako zakończone po odebraniu wszystkich pozycji" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Pokaż obserwowane części" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Pokaż obserwowane części na stronie głównej" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Pokaż obserwowane kategorie" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Pokaż obserwowane kategorie części na stronie głównej" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Pokaż najnowsze części" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Pokaż najnowsze części na stronie głównej" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Pokaż niski stan magazynowy" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Pokaż elementy o niskim stanie na stronie głównej" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Pokaż wymagany stan zapasów" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Szukaj części" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Ukryj nieaktywne części" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Wyszukaj zlecenia zakupu" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Wyklucz nieaktywne zlecenia zakupu" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Stały pasek nawigacyjny" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Format daty" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Preferowany format wyświetlania dat" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planowanie komponentów" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Użytkownik" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Cena" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktywny" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Sekret" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Nagłówek" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Zawartość" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Łącze" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autor" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Obraz" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Załącznik" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Brak pliku" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Brak zewnętrznego odnośnika" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Wybierz plik do załączenia" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Komentarz" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,102 +3752,65 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" -msgstr "Jest uruchomiony" +msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" -msgstr "Oczekujce zadania" +msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "Zaplanowane zadania" +msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" -msgstr "Zadania zakończone błędem" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" -msgstr "ID zadania" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" -msgstr "Unikalny identyfikator zadania" - -#: common/serializers.py:410 -msgid "Lock" -msgstr "Blokada" - -#: common/serializers.py:410 -msgid "Lock time" -msgstr "Czas blokady" - -#: common/serializers.py:412 -msgid "Task name" -msgstr "Nazwa zadania" - -#: common/serializers.py:414 -msgid "Function" -msgstr "Funkcja" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "Nazwa funkcji" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Argumenty" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Argumenty zadania" - -#: common/serializers.py:419 -msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 -msgid "Task keyword arguments" +#: common/serializers.py:368 +msgid "Lock" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nazwa pliku" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" +#: common/serializers.py:368 +msgid "Lock time" msgstr "" -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" +#: common/serializers.py:370 +msgid "Task name" msgstr "" -#: common/validators.py:35 -msgid "No attachment model type provided" +#: common/serializers.py:372 +msgid "Function" msgstr "" -#: common/validators.py:41 -msgid "Invalid attachment model type" +#: common/serializers.py:372 +msgid "Function name" msgstr "" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" +#: common/serializers.py:374 +msgid "Arguments" msgstr "" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" +#: common/serializers.py:374 +msgid "Task arguments" msgstr "" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Pusta domena nie jest dozwolona." +#: common/serializers.py:377 +msgid "Keyword Arguments" +msgstr "" -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Niepoprawna nazwa domeny: {domain}" +#: common/serializers.py:377 +msgid "Task keyword arguments" +msgstr "" #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 @@ -4122,7 +3837,7 @@ msgstr "" #: common/views.py:464 msgid "Parts imported" -msgstr "Komponenty zaimportowane" +msgstr "" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -4135,435 +3850,406 @@ msgstr "Komponenty zaimportowane" msgid "Previous Step" msgstr "Poprzedni krok" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" -msgstr "Komponent jest aktywny" +msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" -msgstr "Producent jest aktywny" +msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Firma" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Firmy" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Opis firmy" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Opis firmy" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Strona WWW" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Witryna internetowa firmy" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Numer telefonu" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Numer telefonu kontaktowego" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Kontaktowy adres e-mail" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Punkt kontaktowy" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "jest klientem" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Czy sprzedajesz produkty tej firmie?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "jest dostawcą" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Czy kupujesz przedmioty od tej firmy?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "jest producentem" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adres" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Firma" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" -msgstr "Kod pocztowy miasto/region" +msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" -msgstr "Stan/Województwo" +msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" -msgstr "Stan lub województwo" +msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" -msgstr "Kraj" +msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" -msgstr "Notatki przewozowe kuriera" +msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" -msgstr "Notatki dla kuriera" +msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" -msgstr "Wewnętrzne notatki przewozowe" +msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" -msgstr "Notatki wysyłkowe do użytku wewnętrznego" +msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Komponent producenta" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Część bazowa" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Wybierz część" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Producent" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Numer producenta komponentu" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Komponent producenta" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" -msgstr "Nazwa parametru" +msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Wartość" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" -msgstr "Wartość parametru" +msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Jednostki" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Jednostki parametru" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Dostawca" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Uwaga" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Opakowanie" + +#: company/models.py:864 msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" -msgstr "Ilość w opakowaniu" +msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "wielokrotność" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" -msgstr "Zamów wiele" +msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" -msgstr "Dostępność zaktualizowana" - -#: company/models.py:899 -msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" +#: company/models.py:910 +msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "Na stanie" @@ -4571,8 +4257,8 @@ msgstr "Na stanie" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Nieaktywny" @@ -4607,13 +4293,13 @@ msgstr "Usuń firmę" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" -msgstr "Obraz części" +msgstr "" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 @@ -4628,19 +4314,19 @@ msgstr "Pobierz obraz z adresu URL" #: company/templates/company/company_base.html:66 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "Usuń obraz" +msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Klient" @@ -4648,35 +4334,42 @@ msgstr "Klient" msgid "Uses default currency" msgstr "Używa domyślnej waluty" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adres" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "Usuń obraz" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "Usuń przypisany obraz z tej firmy" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" -msgstr "Usuń" +msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "Prześlij obraz" +msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "Pobierz obraz" +msgstr "" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4690,7 +4383,7 @@ msgstr "Utwórz nowego dostawcę części" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Nowy dostawca części" @@ -4703,7 +4396,7 @@ msgstr "Części producenta" msgid "Create new manufacturer part" msgstr "Utwórz nową część producenta" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Nowa część producenta" @@ -4717,7 +4410,7 @@ msgstr "Zapasy dostawcy" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Nowe zamówienie zakupu" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4794,16 +4487,16 @@ msgstr "" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "Dodaj kontakt" +msgstr "" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "Adres firmy" +msgstr "" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "Dodaj adres" +msgstr "" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 @@ -4812,7 +4505,7 @@ msgstr "Producenci" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Zamów komponent" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Usuń komponent producenta" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Dostawcy" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametry" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Nowy parametr" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Zamów komponent" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Utwórz nowy towar" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nowy towar" @@ -4966,33 +4667,29 @@ msgstr "Informacja cenowa" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Towary" @@ -5018,258 +4715,156 @@ msgstr "Klienci" msgid "New Customer" msgstr "Nowy klient" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Firmy" + #: company/views.py:52 msgid "New Company" msgstr "Nowa firma" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Umieszczony" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Dane" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Ważny" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Nazwa etykiety" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Opis etykiety" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Etykieta" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktywne" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Szerokość [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Wysokość [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Wzór nazwy pliku" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filtry" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "Kopie" +msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" -msgstr "Liczba kopii do wydrukowania dla każdej etykiety" +msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" -msgstr "Połączono" +msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" -msgstr "Nieznany" +msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "Drukowanie" +msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "Brak mediów" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "Rozłączono" +msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" -msgstr "Drukarka etykiet" +msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "Bezpośrednio wydrukuj etykiety dla różnych elementów." +msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "Lokalizacja drukarki" +msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "Nazwa maszyny" +msgstr "" #: machine/models.py:29 msgid "Machine Type" -msgstr "Typ maszyny" +msgstr "" #: machine/models.py:29 msgid "Type of machine" -msgstr "Typ maszyny" +msgstr "" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "Sterownik" +msgstr "" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "Sterownik użyty dla tego urządzenia" +msgstr "" #: machine/models.py:39 msgid "Machines can be disabled" @@ -5281,11 +4876,15 @@ msgstr "" #: machine/models.py:100 msgid "No errors" -msgstr "Brak błędów" +msgstr "" #: machine/models.py:105 msgid "Initialized" -msgstr "Zainicjalizowany" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" #: machine/models.py:117 msgid "Machine status" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Cena całkowita" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Status zamówienia" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Numer zamówienia" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "Posiada ceny" +msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Nie znaleziono pasującego zlecenia zakupu" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Zamówienie" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" -msgstr "Zamówienie oczekujące" +msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "Utworzony przez" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "odebrane przez" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:991 -msgid "Company to which the items are being sold" -msgstr "" - -#: order/models.py:1003 -msgid "Sales order status" +#: order/models.py:911 +msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Odebrane" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Wysłane" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Linia" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Komponent" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Zagubiono" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Zwrócone" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "W trakcie" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Zwrot" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Naprawa" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Wymiana" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Zwrot pieniędzy" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Odrzuć" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Zaległe zlecenie zakupu" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Edytuj zamówienie" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Anuluj zamówienie" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Oznacz zamówienie jako zakończone" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Kompletne zamówienie" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Numer zamówienia" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Opis zamówienia" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Niekompletny" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Wydany" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "Duplikuj wybrane" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Usuń wiersz" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "Pozycje zlecenia zakupu" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Dodaj element zamówienia" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Całkowity Koszt" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Oczekujące przesyłki" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Akcje" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "ID komponentu" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Nazwa komponentu" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Wersja" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Słowa kluczowe" @@ -6423,16 +5917,15 @@ msgstr "Słowa kluczowe" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "ID kategorii" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Wariant" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -6452,187 +5945,165 @@ msgstr "Minimalny stan magazynowy" msgid "Used In" msgstr "Użyte w" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Ścieżka kategorii" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Części" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "IPN komponentu" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Nadchodzące zlecenie zakupu" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Ważny" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Ta opcja musi być zaznaczona" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategoria" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Domyślne słowa kluczowe" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Nieprawidłowy wybór dla części nadrzędnej" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1161 +#: part/models.py:1023 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:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Ostatnia inwentaryzacja" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Data" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Aktywne" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Wymagane" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Dane" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Wartość parametru" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Unikalny wartość ID komponentu" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Wartość IPN części" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Poziom" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Zezwalaj na warianty" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Wyczyść istniejący BOM" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Nie podano ilości" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Nieprawidłowa ilość" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Masz włączone powiadomienia dla tej kategorii" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Włącz powiadomienia dla tej kategorii" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Akcje kategorii" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Kategoria najwyższego poziomu" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Części (w tym podkategorie)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Utwórz nową część" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Nowy komponent" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Parametry części" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Stwórz nową kategorię komponentów" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Nowa kategoria" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Warianty Części" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Utwórz nowy wariant" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Nowy wariant" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Powiązane części" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Dodaj powiązane" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Zestawienie materiałowe" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Akcje eksportu" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Eksportuj BOM" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Drukuj raport BOM" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Wgraj BOM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Weryfikuj BOM" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Dodaj część do BOM" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Złożenia" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Dostawcy Części" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Producenci części" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Wybierz format pliku" @@ -8103,7 +7446,7 @@ msgstr "Włącz powiadomienia dla tej części" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Drukuj etykietę" @@ -8113,7 +7456,7 @@ msgstr "Pokaż informacje o cenach" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Akcje magazynowe" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Część jest wirtualna (nie fizyczna)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "Przypisane do zamówień sprzedaży" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Minimalny poziom stanu magazynowego" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Ostatni numer seryjny" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Szukaj numeru seryjnego" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Warianty" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Stan" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Brak w magazynie" @@ -8486,7 +7833,7 @@ msgstr "Nie znaleziono obrazka części" msgid "Part Pricing" msgstr "Cennik części" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Nie określono działania" msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Nie znaleziono wyników dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Znaleziono wyniki dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "Kod kreskowy pasuje do istniejącego elementu" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "Brak dopasowania dla kodu kreskowego dostawcy" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "Kod kreskowy nie pasuje do istniejących pozycji magazynowych" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Znaleziono wiele zleceń zakupu pasujących do '{order}'" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Nie znaleziono pasującego zlecenia zakupu dla '{order}'" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "Zlecenie zakupu nie pasuje do dostawcy" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "Nie znaleziono pozycji oczekującej dla części od dostawcy" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "Dalsze informacje wymagane do odbioru pozycji" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "Otrzymana pozycja zlecenia zakupu" @@ -8607,90 +7946,82 @@ msgstr "Otrzymana pozycja zlecenia zakupu" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "Zlecenie zakupu nie jest oczekujące" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "Zlecenie zakupu nie zostało złożone" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Konfiguracja wtyczki" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Konfiguracja wtyczek" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Klucz" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Klucz wtyczki" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "Nazwa wtyczki" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Nazwa pakietu" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Czy wtyczka jest aktywna" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Zainstalowane" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Wtyczka wbudowana" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Wtyczka" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Metoda" @@ -8998,17 +8302,17 @@ msgstr "Metoda" msgid "No author found" msgstr "Nie znaleziono autora" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "Instalacja nie została potwierdzona" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Pełne przeładowanie" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "Wykonaj pełne przeładowanie rejestru wtyczek" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Wymuś przeładowanie" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Wymuś przeładowanie rejestru wtyczek, nawet jeśli jest już załadowany" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "Zbierz wtyczki" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "Zbierz wtyczki i dodaj je do rejestru" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Aktywuj wtyczkę" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "Aktywuj tę wtyczkę" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Brak prawidłowych obiektów do szablonu" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Plik szablonu '{template}' jest brakujący lub nie istnieje" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Raporty z testów" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Nazwa szablonu" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Wzór nazwy pliku" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Filtry" +#: report/models.py:183 +msgid "Report template file" +msgstr "Plik szablonu raportu" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Opis szablonu raportu" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Numer zmiany raportu (przyrasta automatycznie)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "Renderuj raport w orientacji poziomej" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Szerokość [mm]" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Wzorzec generowania nazw plików raportu" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Wysokość [mm]" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Szablon raportu jest włączony" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Filtr części" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Filtry zapytania zleceń zakupu" + +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Cena jednostkowa" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Razem" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Numer Seryjny" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Wynik" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Zaliczone" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Niezaliczone" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Zainstalowane elementy" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Numer seryjny" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "ID lokalizacji" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Ścieżka lokalizacji" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "ID części dostawcy" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "ID zlecenia zakupu" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Data ważności" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Wybierz właściciela" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Element nadrzędny" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Termin minął" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Elementy podrzędne" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Wymaga uwagi" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Uszkodzone" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Zniszczone" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Odrzucone" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Poddany kwarantannie" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Starsze śledzenie wpisów stanu magazynowego" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Utworzono element magazynowy" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Edytuj pozycję magazynową" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Przypisano numer seryjny" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Zapas policzony" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Zapas dodany ręcznie" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Zapas usunięty ręcznie" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Lokalizacja zmieniona" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Zaktualizowano stan magazynu" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Zainstalowano do montażu" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Usunięto z montażu" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Zainstalowano element komponentu" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Usunięto element komponentu" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Podziel z pozycji nadrzędnej" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Podziel element podrzędny" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Scalone przedmioty magazynowe" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Przekonwertowano na wariant" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Dane wyjściowe kolejności kompilacji utworzone" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Dane wyjściowe kolejności kompilacji ukończone" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Odrzucono wynik zlecenia produkcji" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Zużyte przez kolejność kompilacji" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Wysłane na podstawie zlecenia sprzedaży" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Otrzymane na podstawie zlecenia zakupu" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Zwrócone na podstawie zlecenia zwrotu" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Wyślij do klienta" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Zwrócony od klienta" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Skanuj do lokacji" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Akcje druku" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Przelicz stan magazynowy" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Usuń stan magazynowy" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Przenieś stan magazynowy" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Budowa" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Element nadrzędny" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Nie ustawiono producenta" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Tylko do odczytu" @@ -10469,8 +9492,12 @@ msgstr "następna strona" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Lokacje nie są ustawione" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Termin minął" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Ostrzeżenie" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Edytuj lokację" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Nowa lokalizacja" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Elementy podrzędne" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Odmowa dostępu" @@ -10840,12 +9872,12 @@ msgstr "Ustawienia logowania" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Rejestracja" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "Ustawienia części" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Import części" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Import części" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Wtyczki" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Instaluj wtyczkę" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "Błąd stosu wtyczki" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "Etap" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Wiadomość" @@ -10994,7 +10026,7 @@ msgstr "Ścieżka instalacji" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "Ustawienia zlecenia zakupu" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Kurs wymiany" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Aktualizuj teraz" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Ostatnia Aktualizacja" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Nigdy" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Usuń" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Strona główna" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "Ustawienia konta" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Aktywne sesje" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Wyloguj aktywne sesje (z wyjątkiem tej sesji)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Wyloguj aktywne sesje" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "nieznany na nieznanym" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "nieznany" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "Adres IP" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Urządzenie" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Ostatnia aktywność" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s temu (ta sesja)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s temu" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "Prześlij raport o błędzie" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "skopiuj do schowka" @@ -11554,7 +10598,7 @@ msgstr "Potwierdź adres e-mail" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Proszę potwierdzić że %(email)s jest adresem e-mail dla użytkownika %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Potwierdź" @@ -11563,26 +10607,26 @@ msgstr "Potwierdź" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Ten link potwierdzający adres e-mail wygasł, bądź jest nieprawidłowy. Proszę o zażądanie nowego e-maila potwierdzającego adres e-mail." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Zaloguj się" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Zarejestruj się" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Zapomniałeś hasła?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Jesteś pewien, że chcesz się wylogować?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "Krok 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Zeskanuj poniższy kod QR za pomocą wybranego przez Ciebie generatora tokenów (np. Google Authenticator)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Krok 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Wprowadź token wygenerowany przez aplikację:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Zweryfikuj" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimalna ilość" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Zeskanuj kod kreskowy" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Istnieją błędy formularza" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Zatwierdź" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Dodaj" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Zapisz" msgid "Show all notifications and history" msgstr "Pokaż wszystkie powiadomienia i historię" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Dane QR nie zostały dostarczone" @@ -15125,14 +14122,6 @@ msgstr "Ustawienia e-maila" msgid "Email settings not configured" msgstr "Ustawienia e-mail nie zostały skonfigurowane" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Tak" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Grupa" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Widok" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Zmień" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 7d9c658a97d2..63d0044f625a 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,830 +2,998 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" -"Language-Team: Portuguese\n" -"Language: pt_PT\n" +"Language-Team: Portuguese, Brazilian\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: pt-PT\n" +"X-Crowdin-Language: pt-BR\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" -msgstr "API endpoint não encontrado" +msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" -msgstr "Usuário não tem permissão para ver este modelo" +msgstr "" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "Unidade inválida fornecida ({unit})" +msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" -msgstr "Nenhum valor fornecido" +msgstr "" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "Não foi possível converter {original} para {unit}" +msgstr "" #: InvenTree/conversion.py:206 msgid "Invalid quantity supplied" -msgstr "Quantidade fornecida inválida" +msgstr "" #: InvenTree/conversion.py:220 #, python-brace-format msgid "Invalid quantity supplied ({exc})" -msgstr "Quantidade fornecida inválida ({exc})" +msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "Detalhes do erro podem ser encontrados no painel de administrador" +msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" -msgstr "Insira uma Data" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +msgstr "" + +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" -msgstr "Anotações" +msgstr "" #: InvenTree/format.py:164 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "Valor '{name}' não está no formato correto" +msgstr "" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " -msgstr "O valor fornecido não corresponde ao padrão exigido: " +msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" -msgstr "Digite a senha" +msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" -msgstr "Insira uma nova senha" +msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" -msgstr "Confirmar senha" +msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" -msgstr "Confirmar nova senha" +msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" -msgstr "Senha atual" +msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" -msgstr "E-mail (novamente)" +msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" -msgstr "Confirmação do endereço de email" +msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." -msgstr "Você deve digitar o mesmo e-mail todas as vezes." - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." msgstr "" -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." -msgstr "O endereço primário de e-mail não é válido." +msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." -msgstr "O domínio de e-mail providenciado não foi aprovado." +msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." -msgstr "Cadastro está desativado." +msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" -msgstr "Quantidade fornecida inválida" +msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" -msgstr "Número serial em branco" +msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" -msgstr "Número de série duplicado" +msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" -msgstr "Intervalo de grupo inválido: {group}" +msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" -msgstr "Sequência de grupo inválida:{group}" +msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" -msgstr "Nenhum número de série foi encontrado" +msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "Números de série únicos ({len(serials)}) deve corresponder a quantidade ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" -msgstr "Remova as \"tags\" HTML deste valor" +msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" -msgstr "Erro de conexão" +msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" -msgstr "O servidor respondeu com código estado inválido" +msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" -msgstr "Ocorreu uma exceção" +msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" -msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" +msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" -msgstr "Tamanho da imagem muito grande" +msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" -msgstr "O download da imagem excedeu o tamanho máximo" +msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" -msgstr "O servidor remoto retornou resposta vazia" +msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" -msgstr "A URL fornecida não é um arquivo de imagem válido" +msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" +msgid "Bulgarian" msgstr "" #: InvenTree/locales.py:19 -msgid "Bulgarian" -msgstr "Búlgaro" - -#: InvenTree/locales.py:20 msgid "Czech" -msgstr "Tcheco" +msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" -msgstr "Dinamarquês" +msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" -msgstr "Alemão" +msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" -msgstr "Grego" +msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" -msgstr "Inglês" +msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" -msgstr "Espanhol" +msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" -msgstr "Espanhol (Mexicano)" - -#: InvenTree/locales.py:27 -msgid "Estonian" msgstr "" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" -msgstr "Persa" +msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" -msgstr "Finlandês" +msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" -msgstr "Francês" +msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" -msgstr "Hebraico" +msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindu" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" -msgstr "Húngaro" +msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" -msgstr "Italiano" +msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" -msgstr "Japonês" +msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" -msgstr "Coreano" +msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Letão" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" -msgstr "Holandês" +msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" -msgstr "Norueguês" +msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" -msgstr "Polonês" +msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" -msgstr "Português" +msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" -msgstr "Português (Brasileiro)" - -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Romeno" +msgstr "" -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" -msgstr "Russo" +msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" -msgstr "Eslovaco" +msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" -msgstr "Esloveno" +msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" -msgstr "Sérvio" +msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" -msgstr "Sueco" +msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" -msgstr "Tailandês" +msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" -msgstr "Turco" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ucraniano" +msgstr "" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" -msgstr "Vietnamita" +msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" -msgstr "Chinês (Simplificado)" +msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" -msgstr "Chinês (Tradicional)" +msgstr "" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Entre no aplicativo" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "Email" +msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "Erro ao executar validação do plugin" +msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Metadados deve ser um objeto dict python" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "Metadados da Extensão" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "Campo de metadados JSON, para uso por extensões externas" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" -msgstr "Padrão formatado incorretamente" +msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" -msgstr "Chave de formato desconhecida especificada" +msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" -msgstr "Chave de formato obrigatória ausente" +msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" -msgstr "O campo de referência não pode ficar vazio" +msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" -msgstr "A referência deve corresponder ao padrão exigido" +msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" -msgstr "O número de referência é muito grande" +msgstr "" + +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" -msgstr "Nomes duplicados não podem existir sob o mesmo parental" +msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" -msgstr "Escolha inválida" +msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "Nome" +msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "Descrição" +msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" -msgstr "Descrição (opcional)" +msgstr "" + +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" -msgstr "Caminho" +msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" -msgstr "Notas Markdown (opcional)" +msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" -msgstr "Dados de código de barras" +msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" -msgstr "Dados de código de barras de terceiros" +msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" -msgstr "Hash de código de barras" +msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" -msgstr "Hash exclusivo de dados de código de barras" +msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" -msgstr "Código de barras existente encontrado" +msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" -msgstr "Erro de servidor" +msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." -msgstr "Log de erro salvo pelo servidor." +msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" -msgstr "Preicsa ser um numero valido" +msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "Moeda" +msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" -msgstr "Selecione a Moeda nas opções disponíveis" +msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Nome de usuário" +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." +msgstr "" -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Primeiro Nome" +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" +msgstr "" -#: InvenTree/serializers.py:409 -msgid "First name of the user" +#: InvenTree/serializers.py:472 +msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Sobrenome" +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:596 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:597 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:614 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:620 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:641 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:644 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:757 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:760 +msgid "No data columns supplied" +msgstr "" -#: InvenTree/serializers.py:412 -msgid "Last name of the user" +#: InvenTree/serializers.py:827 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:836 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:859 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:860 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:878 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1161 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:70 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:73 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" msgstr "" -#: InvenTree/serializers.py:415 -msgid "Email address of the user" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" msgstr "" -#: InvenTree/serializers.py:439 -msgid "Staff" +#: InvenTree/status_codes.py:105 +msgid "Location changed" msgstr "" -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" +#: InvenTree/status_codes.py:106 +msgid "Stock updated" msgstr "" -#: InvenTree/serializers.py:442 -msgid "Superuser" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" msgstr "" -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" msgstr "" -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Ativo" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" msgstr "" -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "Não tem permissões para alterar este papel do usuário." - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "Apenas superusuários podem criar novos usuários" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "Sua conta foi criada." +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" -msgstr "Por favor, use a função de redefinir senha para acessar" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "Bem-vindo(a) ao InvenTree" +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" -#: InvenTree/serializers.py:561 -msgid "Invalid value" -msgstr "Valor inválido" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 -msgid "Data File" -msgstr "Arquivo de dados" +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" -#: InvenTree/serializers.py:582 -msgid "Select data file for upload" -msgstr "Selecione um arquivo de dados para enviar" +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" -#: InvenTree/serializers.py:599 -msgid "Unsupported file type" -msgstr "Tipo de arquivo não suportado" +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" -#: InvenTree/serializers.py:605 -msgid "File is too large" -msgstr "O arquivo é muito grande" +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" -#: InvenTree/serializers.py:626 -msgid "No columns found in file" -msgstr "Nenhuma coluna encontrada no arquivo" +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" -#: InvenTree/serializers.py:629 -msgid "No data rows found in file" -msgstr "Nenhuma linha de dados encontrada no arquivo" +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/serializers.py:742 -msgid "No data rows provided" -msgstr "Nenhuma linha de dados fornecida" +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" -#: InvenTree/serializers.py:745 -msgid "No data columns supplied" -msgstr "Nenhuma coluna de dados fornecida" +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" -#: InvenTree/serializers.py:812 -#, python-brace-format -msgid "Missing required column: '{name}'" -msgstr "Falta a coluna obrigatória: '{name}'" +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" -#: InvenTree/serializers.py:821 -#, python-brace-format -msgid "Duplicate column: '{col}'" -msgstr "Coluna duplicada: \"{col}\"" +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" -#: InvenTree/serializers.py:861 -msgid "Remote Image" -msgstr "Imagens Remota" +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "URL do arquivo de imagem remoto" +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "Baixar imagens de URL remota não está habilitado" +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" -msgstr "Falha em verificar o histórico do trabalhador" +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" -#: InvenTree/status.py:70 -msgid "Email backend not configured" -msgstr "Serviço de fundo do e-mail não foi configurado" +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" -msgstr "Verificação de saúde do sistema InvenTree falhou" +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" -msgstr "Banco de dados desconhecido" +msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" -msgstr "Unidade física inválida" +msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" -msgstr "Não é um código de moeda válido" +msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" -msgstr "Valor excedente não deve ser negativo" +msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" -msgstr "Excedente não deve exceder 100%" +msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" -msgstr "Valor de excedente inválido" +msgstr "" #: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 msgid "Edit User Information" -msgstr "Editar informações do usuário" +msgstr "" #: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 msgid "Set Password" -msgstr "Definir senha" +msgstr "" #: InvenTree/views.py:434 msgid "Password fields must match" -msgstr "Os campos de senha devem coincidir" +msgstr "" #: InvenTree/views.py:442 msgid "Wrong password provided" -msgstr "Senha incorreta fornecida" +msgstr "" #: InvenTree/views.py:650 templates/navbar.html:160 msgid "System Information" -msgstr "Informação do Sistema" +msgstr "" #: InvenTree/views.py:657 templates/navbar.html:171 msgid "About InvenTree" -msgstr "Sobre o InvenTree" - -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" msgstr "" -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Produção Progenitor" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" +#: build/api.py:238 +msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Emitido por" - -#: build/api.py:125 -msgid "Assigned To" +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 +msgid "Consumable" msgstr "" -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "Produção deve ser cancelada antes de ser deletada" - -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "Consumível" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" -msgstr "Opcional" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Montagem" +msgstr "" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" -msgstr "Monitorado" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" -msgstr "Alocado" +msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" -msgstr "Disponível" +msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" -msgstr "Ordem de Produção" +msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -834,928 +1002,717 @@ msgstr "Ordem de Produção" #: templates/InvenTree/settings/sidebar.html:55 #: templates/js/translated/search.js:186 users/models.py:207 msgid "Build Orders" -msgstr "Ordens de Produções" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" -msgstr "Escolha de Produção parental inválida" +msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Usuário ou grupo responsável deve ser especificado" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" -msgstr "Peça da ordem de produção não pode ser alterada" +msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" -msgstr "Referência do pedido de produção" +msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" -msgstr "Referência" +msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" -msgstr "Breve descrição da produção (opcional)" +msgstr "" + +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" -#: build/models.py:262 +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" -msgstr "Pedido de produção para qual este serviço está alocado" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +msgstr "" + +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" -msgstr "Peça" +msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" -msgstr "Selecionar peça para produção" +msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" -msgstr "Referência do pedido de venda" +msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" -msgstr "Pedido de Venda para qual esta produção está alocada" +msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" -msgstr "Local de Origem" +msgstr "" -#: build/models.py:293 +#: build/models.py:231 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)" +msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" -msgstr "Local de Destino" +msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" -msgstr "Selecione o local onde os itens concluídos serão armazenados" +msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" -msgstr "Quantidade de Produção" +msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" -msgstr "Número de itens em estoque para produzir" +msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" -msgstr "Itens concluídos" +msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" -msgstr "Número de itens em estoque concluídos" +msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" -msgstr "Progresso da produção" +msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" -msgstr "Código de situação da produção" +msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" -msgstr "Código de Lote" +msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" -msgstr "Código do lote para esta saída de produção" +msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" -msgstr "Criado em" +msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" -msgstr "Data alvo final" +msgstr "" -#: build/models.py:344 +#: build/models.py:282 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." +msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" -msgstr "Data de conclusão" +msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" -msgstr "Concluído por" +msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" -msgstr "Emitido por" +msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" -msgstr "Usuário que emitiu este pedido de produção" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +msgstr "" + +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" -msgstr "Responsável" +msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" -msgstr "Usuário ou grupo responsável para este pedido de produção" +msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" -msgstr "Link Externo" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link para URL externa" +msgstr "" -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" -msgstr "Prioridade de Produção" +msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" -msgstr "Prioridade deste pedido de produção" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +msgstr "" + +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" -msgstr "Código do projeto" +msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" -msgstr "Código do projeto para este pedido de produção" - -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "Falha ao descarregar tarefa para concluir alocações de construção" +msgstr "" -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "O Pedido de produção {build} foi concluído!" +msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" -msgstr "Um pedido de produção foi concluído" +msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" -msgstr "Nenhuma saída de produção especificada" +msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" -msgstr "Saída de produção já completada" +msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" -msgstr "Saída da produção não corresponde ao Pedido de Produção" +msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" -msgstr "Quantidade deve ser maior que zero" +msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" -msgstr "Quantidade não pode ser maior do que a quantidade de saída" +msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, 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:1465 -msgid "Build Order Line Item" -msgstr "Item da linha de Produção" +msgstr "" -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" -msgstr "Objeto de produção" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +msgstr "" + +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" -msgstr "Quantidade" +msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" -msgstr "Quantidade necessária para o pedido de produção" +msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 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" +msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, 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})" +msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" -msgstr "O item do estoque está sobre-alocado" +msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" -msgstr "Quantidade alocada deve ser maior que zero" +msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" -msgstr "Quantidade deve ser 1 para estoque serializado" +msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" -msgstr "Item estoque selecionado não coincide com linha da LDM" +msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" -msgstr "Item de estoque" +msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" -msgstr "Origem do item em estoque" +msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" -msgstr "Quantidade do estoque para alocar à produção" +msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" -msgstr "Instalar em" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "Destino do Item do Estoque" - -#: build/serializers.py:91 -msgid "Build Level" msgstr "" -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Nome da Peça" - -#: build/serializers.py:111 -msgid "Project Code Label" +#: build/models.py:1588 +msgid "Destination stock item" msgstr "" -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" -msgstr "Saída da Produção" +msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" -msgstr "Saída de produção não coincide com a produção progenitora" +msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 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" +msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" -msgstr "Esta saída de produção já foi concluída" +msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" -msgstr "A saída de produção não está completamente alocada" +msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" -msgstr "Entre a quantidade da saída de produção" +msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" -msgstr "Quantidade inteira necessária para peças rastreáveis" +msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 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" +msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" -msgstr "Números de Série" +msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" -msgstr "Digite os números de série para saídas de produção" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Local" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "Local de estoque para a produção" +msgstr "" -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" -msgstr "Alocar Números de Série Automaticamente" +msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 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:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Números de série devem ser fornecidos para peças rastreáveis" +msgstr "" -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 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" +msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "Uma lista de saídas de produção deve ser fornecida" +msgstr "" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" -msgstr "Local de estoque para saídas recicladas" +msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" -msgstr "Descartar alocações" +msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" +msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" -msgstr "Motivo para sucatear saída(s) de produção" +msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "Local para saídas de produção concluídas" +msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "Situação" +msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" -msgstr "Aceitar Alocação Incompleta" +msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" +msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "Consumir Estoque Alocado" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "" -#: build/serializers.py:655 -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:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" -msgstr "Remover Saídas Incompletas" +msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" +msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" -msgstr "Não permitido" +msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" -msgstr "Aceitar conforme consumido por esta ordem de produção" +msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" -msgstr "Desatribua antes de completar este pedido de produção" +msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" -msgstr "Estoque sobrealocado" +msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 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" +msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" -msgstr "Alguns itens de estoque foram sobrealocados" +msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "Aceitar não alocados" +msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 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" +msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" -msgstr "Estoque obrigatório não foi totalmente alocado" +msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" -msgstr "Aceitar Incompleto" +msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "Quantidade de produção requerida não foi concluída" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:777 -msgid "Build order must be in production state" +#: build/serializers.py:695 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" -msgstr "Pedido de produção tem saídas incompletas" +msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" -msgstr "Linha de produção" +msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" -msgstr "Saída da Produção" +msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" -msgstr "Saída de produção deve indicar a mesma produção" +msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" -msgstr "Item da linha de produção" +msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 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" +msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" -msgstr "Item deve estar em estoque" +msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "Quantidade disponível ({q}) excedida" +msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 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" +msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 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" +msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" -msgstr "Alocação do Item precisa ser fornecida" +msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 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)" +msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" -msgstr "Local não incluso" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "Não incluir itens de estoque deste local" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "Estoque permutável" - -#: build/serializers.py:1064 -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:1069 -msgid "Substitute Stock" -msgstr "Substituir Estoque" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "Permitir alocação de peças substitutas" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "Itens opcionais" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "Alocar itens LDM opcionais para o pedido de produção" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Falha ao iniciar tarefa de auto-alocação" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" msgstr "" -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Número de Peça do Fabricante" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Nome do Local" - -#: build/serializers.py:1184 -msgid "Build Reference" +#: build/serializers.py:974 +msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1185 -msgid "BOM Reference" +#: build/serializers.py:979 +msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Embalagem" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID da Peça" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN da Peça" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Descrição da Peça" - -#: build/serializers.py:1195 -msgid "BOM Part ID" +#: build/serializers.py:980 +msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1196 -msgid "BOM Part Name" +#: build/serializers.py:985 +msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Número de Sério" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "Quantidade Alocada" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Quantidade Disponível" - -#: build/serializers.py:1283 -msgid "Part Category ID" +#: build/serializers.py:986 +msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1284 -msgid "Part Category Name" +#: build/serializers.py:991 +msgid "Optional Items" msgstr "" -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Rastreável" - -#: build/serializers.py:1292 -msgid "Inherited" +#: build/serializers.py:992 +msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Permitir variações" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" -msgstr "Item LDM" +msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" -msgstr "Estoque Alocado" +msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" -msgstr "No pedido" +msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" -msgstr "Em Produção" +msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" -msgstr "Estoque Disponível" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Pendente" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produção" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" msgstr "" -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Cancelado" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Completado" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" -msgstr "Estoque obrigatório para o pedido de produção" +msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" -msgstr "Pedido de produção vencido" +msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "Pedido de produção {bo} está atrasada" +msgstr "" #: build/templates/build/build_base.html:18 msgid "Part thumbnail" -msgstr "Miniatura da parte" +msgstr "" #: build/templates/build/build_base.html:38 #: company/templates/company/supplier_part.html:35 @@ -1764,10 +1721,10 @@ msgstr "Miniatura da parte" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" -msgstr "Ações de código de barras" +msgstr "" #: build/templates/build/build_base.html:42 #: company/templates/company/supplier_part.html:39 @@ -1776,9 +1733,9 @@ msgstr "Ações de código de barras" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" -msgstr "Mostrar QR Code" +msgstr "" #: build/templates/build/build_base.html:45 #: company/templates/company/supplier_part.html:41 @@ -1787,11 +1744,11 @@ msgstr "Mostrar QR Code" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" -msgstr "Desatribuir Código de Barras" +msgstr "" #: build/templates/build/build_base.html:47 #: company/templates/company/supplier_part.html:43 @@ -1800,291 +1757,273 @@ msgstr "Desatribuir Código de Barras" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" -msgstr "Atribuir Código de Barras" +msgstr "" #: build/templates/build/build_base.html:56 #: order/templates/order/order_base.html:46 #: order/templates/order/return_order_base.html:55 #: order/templates/order/sales_order_base.html:55 msgid "Print actions" -msgstr "Ações de impressão" +msgstr "" #: build/templates/build/build_base.html:60 msgid "Print build order report" -msgstr "Imprimir relatório do pedido de produção" +msgstr "" #: build/templates/build/build_base.html:67 msgid "Build actions" -msgstr "Ações de produção" +msgstr "" #: build/templates/build/build_base.html:71 msgid "Edit Build" -msgstr "Editar produção" +msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Duplicar produção" +msgid "Cancel Build" +msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Cancelar produção" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" -msgstr "Excluir produção" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" msgstr "" -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" -msgstr "Concluir produção" +msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" -msgstr "Descrição da produção" +msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "Nenhuma saída de produção foi criada para este pedido de produção" +msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" -msgstr "Pedido de produção está pronta para ser marcada como concluída" +msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "Pedido de produção não pode ser concluída, os resultados pendentes permanecem" +msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" -msgstr "A quantidade de produção necessária ainda não foi concluída" +msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" -msgstr "Estoque não foi totalmente alocado para este Pedido de Produção" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +msgstr "" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" -msgstr "Data alvo" +msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" -msgstr "Essa produção expirou em %(target)s" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +msgstr "" + +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" -msgstr "Expirou" +msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "Saídas Concluídas" +msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" -msgstr "Pedido de Venda" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "Prioridade" +msgstr "" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" -msgstr "Excluir Pedido de Produção" +msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" -msgstr "QR Code do Pedido de Produção" +msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" -msgstr "Vincular código de barras ao Pedido de Produção" +msgstr "" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "Detalhes da produção" +msgstr "" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "Origem do estoque" +msgstr "" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "O estoque pode ser tirado de qualquer local disponível." +msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" -msgstr "Destino" +msgstr "" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "Loca de destino não especificado" +msgstr "" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "Peças alocadas" +msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "Lote" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" -msgstr "Criado" +msgstr "" #: build/templates/build/detail.html:144 msgid "No target date set" -msgstr "Sem data alvo definida" +msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" -msgstr "Concluído" +msgstr "" #: build/templates/build/detail.html:153 msgid "Build not complete" -msgstr "Produção não concluída" +msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" -msgstr "Pedido de Produção Filho" +msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 msgid "Deallocate stock" -msgstr "Desalocar estoque" +msgstr "" #: build/templates/build/detail.html:182 msgid "Deallocate Stock" -msgstr "Desalocar estoque" +msgstr "" #: build/templates/build/detail.html:184 msgid "Automatically allocate stock to build" -msgstr "Alocar o estoque para produção automaticamente" +msgstr "" #: build/templates/build/detail.html:185 msgid "Auto Allocate" -msgstr "Alocar automaticamente" +msgstr "" #: build/templates/build/detail.html:187 msgid "Manually allocate stock to build" -msgstr "Alocar estoque para a produção manualmente" +msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "Alocar estoque" +msgstr "" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "Pedir peças necessárias" +msgstr "" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 msgid "Order Parts" -msgstr "Pedir Peças" +msgstr "" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "O estoque disponível foi filtrado com base no local de origem especificado para este pedido de produção" +msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" -msgstr "Saída de Produção Incompletas" +msgstr "" #: build/templates/build/detail.html:219 msgid "Create new build output" -msgstr "Criar nova saída de produção" +msgstr "" #: build/templates/build/detail.html:220 msgid "New Build Output" -msgstr "Nova saída de produção" +msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" -msgstr "Consumir estoque" +msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" -msgstr "Saídas de Produção concluídas" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" msgstr "" -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,2015 +2033,1791 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" -msgstr "Anexos" +msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" -msgstr "Notas de produção" +msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" -msgstr "Alocação Completa" +msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" -msgstr "Todas as linhas foram totalmente alocadas" +msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" -msgstr "Novo Pedido de Produção" +msgstr "" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "Detalhes do Pedido de Produção" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Itens de linha" +msgstr "" #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" -msgstr "Saídas Incompletas" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" msgstr "" -#: common/api.py:693 -msgid "Is Link" -msgstr "É uma Ligação" - -#: common/api.py:701 -msgid "Is File" -msgstr "É um arquivo" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -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:132 -msgid "Invalid currency code" -msgstr "Código da Moeda invalida" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Código da Moeda duplicada" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Nenhum código de moeda válido foi fornecido" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Sem extensão" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" -msgstr "Formato de arquivo não suportado: {fmt}" +msgstr "" #: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "Erro ao ler arquivo (codificação inválida)" +msgstr "" #: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "Erro ao ler arquivo (formato inválido)" +msgstr "" #: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "Erro ao ler o arquivo (dimensão incorreta)" +msgstr "" #: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "Erro ao ler o arquivo (dados podem estar corrompidos)" +msgstr "" #: common/forms.py:12 msgid "File" -msgstr "Arquivo" +msgstr "" #: common/forms.py:12 msgid "Select file to upload" -msgstr "Selecione um arquivo para carregar" +msgstr "" #: common/forms.py:25 msgid "{name.title()} File" -msgstr "Arquivo {name.title()}" +msgstr "" #: common/forms.py:26 #, python-brace-format msgid "Select {name} file to upload" -msgstr "Selecione {name} arquivo para carregar" +msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" -msgstr "Atualizado" +msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" -msgstr "Tempo da última atualização" +msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" -msgstr "URL do site está bloqueada por configuração" +msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" -msgstr "Código único do projeto" +msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" -msgstr "Descrição do projeto" +msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" -msgstr "Usuário ou grupo responsável por este projeto" +msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" -msgstr "Senha de configurações (deve ser única — diferencia maiúsculas de minúsculas)" +msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" -msgstr "Valor da Configuração" +msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" -msgstr "Valor escolhido não é uma opção válida" +msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" -msgstr "Valor deve ser um valor booleano" +msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" -msgstr "Valor deve ser um número inteiro" +msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" -msgstr "A frase senha deve ser diferenciada" +msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" -msgstr "Nenhum grupo" +msgstr "" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" -#: common/models.py:1231 +#: common/models.py:1259 msgid "Restart required" -msgstr "Reinicialização necessária" +msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" -msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" +msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" -msgstr "Migrações pendentes" +msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" -msgstr "Número de migrações pendentes na base de dados" +msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" -msgstr "Nome da Instância do Servidor" +msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" -msgstr "Descritor de frases para a instância do servidor" +msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" -msgstr "Usar nome da instância" +msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" -msgstr "Usar o nome da instância na barra de título" +msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" -msgstr "Restringir a exibição 'sobre'" +msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" -msgstr "Mostrar 'sobre' modal apenas para superusuários" +msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" -msgstr "Nome da empresa" +msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" -msgstr "Nome interno da Empresa" +msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" -msgstr "URL de Base" +msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" -msgstr "URL Base da instância do servidor" +msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" -msgstr "Moeda Padrão" +msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" -msgstr "Selecione a moeda base para cálculos de preços" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Moedas suportadas" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Lista de códigos de moeda suportados" +msgstr "" -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" -msgstr "Intervalo de Atualização da Moeda" +msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 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)" +msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" -msgstr "dias" +msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" -msgstr "Extensão de Atualização de Moeda" +msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" -msgstr "Extensão de Atualização de Moeda a utilizar" +msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" -msgstr "Baixar do URL" +msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" -msgstr "Permitir baixar imagens remotas e arquivos de URLs externos" +msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" -msgstr "Limite de tamanho para baixar" +msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" -msgstr "Maior tamanho de imagem remota baixada permitida" +msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" -msgstr "Usuário-agente utilizado para baixar da URL" +msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 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)" +msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" -msgstr "Validação rigorosa de URL" +msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" -msgstr "Exigir especificação de esquema ao validar URLs" +msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" -msgstr "Exigir confirmação" +msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." -msgstr "Exigir confirmação explícita do usuário para uma certa ação." +msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" -msgstr "Profundidade da árvore" +msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "Profundidade padrão de visualização da árvore. Níveis mais profundos podem ser carregados gradualmente conforme necessário." +msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" -msgstr "Atualizar Intervalo de Verificação" +msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" -msgstr "Frequência para verificar atualizações (defina como zero para desativar)" +msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" -msgstr "Cópia de Segurança Automática" +msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 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" +msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" -msgstr "Intervalo de Backup Automático" +msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" -msgstr "Especificar o número de dia entre as cópias de segurança" +msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" -msgstr "Intervalo para Excluir da Tarefa" +msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 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" +msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" -msgstr "Intervalo para Excluir do Registro de Erro" +msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 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" +msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" -msgstr "Intervalo para Excluir de Notificação" +msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 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" +msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "Suporte aos códigos de barras" +msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" -msgstr "Ativar suporte a leitor de código de barras na interface web" +msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" -msgstr "Atraso na entrada de código de barras" - -#: common/models.py:1401 -msgid "Barcode input processing delay time" -msgstr "Tempo de atraso de processamento de entrada de barras" - -#: common/models.py:1407 -msgid "Barcode Webcam Support" -msgstr "Suporte a código de barras via Câmera" - -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Permitir escanear código de barras por câmera pelo navegador" - -#: common/models.py:1413 -msgid "Barcode Show Data" msgstr "" -#: common/models.py:1414 -msgid "Display barcode data in browser as text" +#: common/models.py:1422 +msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1419 -msgid "Barcode Generation Plugin" +#: common/models.py:1428 +msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" +#: common/models.py:1429 +msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" -msgstr "Revisões de peças" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "Habilitar campo de revisão para a Peça" - -#: common/models.py:1431 -msgid "Assembly Revision Only" msgstr "" -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" +#: common/models.py:1435 +msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "Permitir a exclusão da Montagem" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "Permitir a remoção de peças usadas em uma montagem" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" -msgstr "Regex IPN" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" -msgstr "Padrão de expressão regular adequado para Peça IPN" +msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" -msgstr "Permitir Duplicação IPN" +msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" -msgstr "Permitir que várias peças compartilhem o mesmo IPN" +msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" -msgstr "Permitir Edição IPN" +msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" -msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" +msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" -msgstr "Copiar dados da LDM da Peça" +msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" -msgstr "Copiar dados da LDM por padrão quando duplicar a peça" +msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" -msgstr "Copiar Dados de Parâmetro da Peça" +msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" -msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" +msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" -msgstr "Copiar Dados Teste da Peça" +msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" -msgstr "Copiar dados de teste por padrão quando duplicar a peça" +msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" -msgstr "Copiar Parâmetros dos Modelos de Categoria" +msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" -msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" +msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" -msgstr "Modelo" +msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" -msgstr "Peças são modelos por padrão" +msgstr "" + +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" -#: common/models.py:1490 +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" -msgstr "Peças podem ser montadas a partir de outros componentes por padrão" +msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" -msgstr "Componente" +msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" -msgstr "Peças podem ser usadas como sub-componentes por padrão" +msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" -msgstr "Comprável" +msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" -msgstr "Peças são compráveis por padrão" +msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" -msgstr "Vendível" +msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" -msgstr "Peças vão vendíveis por padrão" +msgstr "" + +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" -#: common/models.py:1514 +#: common/models.py:1511 msgid "Parts are trackable by default" -msgstr "Peças vão rastreáveis por padrão" +msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" -msgstr "Virtual" +msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" -msgstr "Peças são virtuais por padrão" +msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" -msgstr "Mostrar Importações em Visualizações" +msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" -msgstr "Exibir o assistente de importação em algumas visualizações de partes" +msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" -msgstr "Mostra peças relacionadas" +msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" -msgstr "Mostrar peças relacionadas para uma peça" +msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" -msgstr "Dados Iniciais de Estoque" +msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" -msgstr "Permitir Criação de estoque inicial quando adicional uma nova peça" +msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" -msgstr "Dados Iniciais de Fornecedor" +msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 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" +msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" -msgstr "Formato de Exibição do Nome da Peça" +msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" -msgstr "Formato para exibir o nome da peça" +msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" -msgstr "Ícone de Categoria de Peça Padrão" +msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" -msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" +msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" -msgstr "Forçar Unidades de Parâmetro" +msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 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" +msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" -msgstr "Mínimo de Casas Decimais do Preço" +msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 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" +msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" -msgstr "Máximo Casas Decimais de Preço" +msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 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" +msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" -msgstr "Usar Preços do Fornecedor" +msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" +msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" -msgstr "Sobrescrever histórico de compra" +msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" +msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" -msgstr "Usar Preços do Item em Estoque" +msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" +msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" -msgstr "Idade do preço do Item em Estoque" +msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 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" +msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" -msgstr "Usar Preço Variável" +msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" -msgstr "Incluir preços variáveis nos cálculos de valores gerais" +msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" -msgstr "Apenas Ativar Variáveis" +msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" -msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" +msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" -msgstr "Intervalo de Reconstrução de Preços" +msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 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" +msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" -msgstr "Preços Internos" +msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" -msgstr "Habilitar preços internos para peças" +msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" -msgstr "Sobrepor Valor Interno" +msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 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" +msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" -msgstr "Ativar impressão de etiquetas" +msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" -msgstr "Ativar impressão de etiqueta pela interface da internet" +msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" -msgstr "DPI da Imagem na Etiqueta" +msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 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" +msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" -msgstr "Habilitar Relatórios" +msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" -msgstr "Ativar geração de relatórios" +msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" -msgstr "Modo de depuração" +msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" -msgstr "Gerar relatórios em modo de depuração (saída HTML)" +msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" -msgstr "Relatório de erros" +msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" -msgstr "Registro de erros que ocorrem ao gerar relatórios" +msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" -msgstr "Tamanho da página" +msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" -msgstr "Tamanho padrão da página PDF para relatórios" +msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" -msgstr "Ativar Relatórios Teste" +msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" -msgstr "Ativar geração de relatórios de teste" +msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" -msgstr "Anexar Relatórios de Teste" +msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "Quando imprimir um Relatório de Teste, anexar uma cópia do mesmo ao item de estoque associado" +msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" -msgstr "Seriais Únicos Globais" +msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" -msgstr "Números de série para itens de estoque devem ser globalmente únicos" +msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" -msgstr "Preenchimento automático de Números Seriais" +msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" -msgstr "Preencher números de série automaticamente no formulário" +msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" -msgstr "Excluir Estoque Esgotado" +msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" -msgstr "Determina o comportamento padrão quando um item de estoque é esgotado" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" -msgstr "Modelo de Código de Lote" +msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" -msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" +msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" -msgstr "Validade do Estoque" +msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" -msgstr "Ativar função de validade de estoque" +msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" -msgstr "Vender estoque expirado" +msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" -msgstr "Permitir venda de estoque expirado" +msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" -msgstr "Tempo de Estoque Inativo" +msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 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" +msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" -msgstr "Produzir Estoque Vencido" +msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" -msgstr "Permitir produção com estoque vencido" +msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" -msgstr "Controle de propriedade do estoque" +msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" -msgstr "Ativar controle de propriedade sobre locais e itens de estoque" +msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" -msgstr "Ícone padrão do local de estoque" +msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" -msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" +msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" -msgstr "Mostrar Itens de Estoque Instalados" - -#: common/models.py:1787 -msgid "Display installed stock items in stock tables" -msgstr "Exibir itens de estoque instalados nas tabelas de estoque" - -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "Verificar BOM ao instalar itens" - -#: common/models.py:1794 -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/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "Permitir Transferência Fora do Estoque" - -#: common/models.py:1802 -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/models.py:1808 -msgid "Build Order Reference Pattern" -msgstr "Modelo de Referência de Pedidos de Produção" - -#: common/models.py:1810 -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/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "Requer Proprietário Responsável" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "Um proprietário responsável deve ser atribuído a cada ordem" - -#: common/models.py:1822 -msgid "Require Active Part" msgstr "" -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" +#: common/models.py:1772 +msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1828 -msgid "Require Locked Part" +#: common/models.py:1777 +msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" +#: common/models.py:1779 +msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1834 -msgid "Require Valid BOM" +#: common/models.py:1785 +msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" +#: common/models.py:1787 +msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1842 -msgid "Require Closed Child Orders" +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 +msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 +msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" -msgstr "Bloquear até os Testes serem Aprovados" +msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 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" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" -msgstr "Ativar Pedidos de Devolução" +msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" -msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário" +msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" -msgstr "Modelo de Referência de Pedidos de Devolução" +msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" -msgstr "Editar os Pedidos de Devolução Concluídos" +msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 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" +msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" -msgstr "Modelo de Referência de Pedidos de Venda" +msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" -msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" +msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" -msgstr "Envio Padrão de Pedidos de Venda" - -#: common/models.py:1901 -msgid "Enable creation of default shipment with sales orders" -msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" - -#: common/models.py:1906 -msgid "Edit Completed Sales Orders" -msgstr "Editar os Pedidos de Vendas concluídos" +msgstr "" -#: common/models.py:1908 -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/models.py:1850 +msgid "Enable creation of default shipment with sales orders" +msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" +#: common/models.py:1855 +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +#: common/models.py:1857 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" -msgstr "Modelo de Referência de Pedidos de Compras" +msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" -msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" +msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" -msgstr "Editar Pedidos de Compra Concluídos" +msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 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" +msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" -msgstr "Autocompletar Pedidos de Compra" +msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 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" +msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" -msgstr "Habitar esquecer senha" - -#: common/models.py:1954 -msgid "Enable password forgot function on the login pages" -msgstr "Habilitar a função \"Esqueci minha senha\" nas páginas de acesso" - -#: common/models.py:1959 -msgid "Enable registration" -msgstr "Habilitar cadastro" - -#: common/models.py:1960 -msgid "Enable self-registration for users on the login pages" -msgstr "Ativar auto-registro para usuários na página de entrada" - -#: common/models.py:1965 -msgid "Enable SSO" -msgstr "Ativar SSO" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "Ativar SSO na página de acesso" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "Ativar registro SSO" - -#: common/models.py:1973 -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/models.py:1979 -msgid "Enable SSO group sync" msgstr "" -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +#: common/models.py:1895 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1987 -msgid "SSO group key" +#: common/models.py:1900 +msgid "Enable registration" msgstr "" -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" +#: common/models.py:1901 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1995 -msgid "SSO group map" +#: common/models.py:1906 +msgid "Enable SSO" msgstr "" -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +#: common/models.py:1907 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:2003 -msgid "Remove groups outside of SSO" +#: common/models.py:1912 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +#: common/models.py:1914 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" -msgstr "Email obrigatório" +msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" -msgstr "Exigir do usuário o e-mail no cadastro" +msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" -msgstr "Auto-preencher usuários SSO" +msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 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" +msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" -msgstr "Enviar email duplo" +msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" -msgstr "No registro pedir aos usuários duas vezes pelo email" +msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" -msgstr "Senha duas vezes" +msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" -msgstr "No registro pedir aos usuários duas vezes pela senha" +msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" -msgstr "Domínios permitidos" +msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" +msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" -msgstr "Grupo no cadastro" +msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" -msgstr "Forçar AMF" +msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." -msgstr "Os usuários devem usar uma segurança multifator." +msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" -msgstr "Checar extensões no início" +msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 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" +msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" -msgstr "Verificar por atualizações de plugin" +msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" -msgstr "Habilitar verificações periódicas de atualizações para plugins instalados" +msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" -msgstr "Ativar integração URL" +msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" -msgstr "Ativar extensão para adicionar rotas URL" +msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" -msgstr "Ativar integração de navegação" +msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" -msgstr "Ativar extensões para integrar à navegação" +msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" -msgstr "Ativa integração com aplicativo" +msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" -msgstr "Ativar extensões para adicionar aplicativos" +msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" -msgstr "Ativar integração do calendário" +msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" -msgstr "Ativar extensões para executar tarefas agendadas" +msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" -msgstr "Ativar integração de eventos" +msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" -msgstr "Ativar extensões para responder a eventos internos" +msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" -msgstr "Habilitar códigos de projeto" +msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" -msgstr "Ativar códigos de projeto para rastrear projetos" +msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" -msgstr "Funcionalidade de Balanço do Inventário" +msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "Ativar funcionalidade de balanço para gravar níveis de estoque e calcular seu valor" +msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" -msgstr "Excluir Locais Externos" +msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "Excluir itens de estoque em locais externos dos cálculos do estoque" +msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" -msgstr "Período de Balanço Automático" +msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "Número de dias entre gravação do balanço de estoque (coloque zero para desativar)" +msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" -msgstr "Intervalo para Excluir o Relatório" +msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" -msgstr "Relatórios de balanço serão apagados após um número de dias especificado" +msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" -msgstr "Mostrar nomes completos dos usuários" +msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" -msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" +msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" -msgstr "Senha de configurações (deve ser única — diferencia maiúsculas de minúsculas" +msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" -msgstr "Ocultar peças inativas" +msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "Ocultar peças inativas nos resultados exibidos na página inicial" +msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" -msgstr "Mostrar peças subscritas" +msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" -msgstr "Mostrar peças subscritas na tela inicial" +msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" -msgstr "Mostrar categorias subscritas" +msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" -msgstr "Mostrar categorias de peças subscritas na tela inicial" +msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" -msgstr "Mostrar peças mais recentes" +msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" -msgstr "Mostrar as peças mais recentes na página inicial" +msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" -msgstr "Mostrar LDMs que aguardam validação na página inicial" +msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" -msgstr "Mostrar alterações recentes de estoque" +msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" -msgstr "Mostrar itens de estoque alterados recentemente na página inicial" +msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" -msgstr "Mostrar estoque baixo" +msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" -msgstr "Mostrar itens de baixo estoque na página inicial" +msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" -msgstr "Mostrar estoque esgotado" +msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" -msgstr "Mostrar itens sem estoque na página inicial" +msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" -msgstr "Mostrar estoque necessário" +msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" -msgstr "Mostrar itens de estoque necessários para produções na tela inicial" +msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" -msgstr "Mostrar estoque expirado" +msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" -msgstr "Mostrar expirados itens em estoque na tela inicial" +msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" -msgstr "Mostrar estoque inativo" +msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" -msgstr "Mostrar estoque inativo na tela inicial" +msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" -msgstr "Mostrar produções pendentes" +msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" -msgstr "Mostrar produções pendentes na tela inicial" +msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" -msgstr "Mostrar produções atrasadas" +msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" -msgstr "Mostrar produções atrasadas na tela inicial" +msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" -msgstr "Mostrar pedidos de compra pendentes" +msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" -msgstr "Mostrar os Pedidos de Compras pendentes na página inicial" +msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" -msgstr "Mostrar Pedidos de Compra atrasados" +msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" -msgstr "Mostrar os Pedidos de Compras atrasadas na tela inicial" +msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" -msgstr "Mostrar pedidos de vendas pendentes" +msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" -msgstr "Mostrar os Pedidos de Vendas pendentes na página inicial" +msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" -msgstr "Mostrar Pedidos de Venda atrasados" +msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" -msgstr "Mostrar os Pedidos de Vendas atrasadas na tela inicial" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" -msgstr "Mostrar remessas de OV pendentes" +msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" -msgstr "Mostrar envios OV pendentes na tela inicial" +msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" -msgstr "Mostrar notícias" +msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" -msgstr "Mostrar notícias na tela inicial" +msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" -msgstr "Mostrar etiqueta em linha" +msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "Mostrar etiquetas em PDF no navegador, ao invés de baixar o arquivo" +msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" -msgstr "Impressora de etiquetas padrão" +msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" -msgstr "Configurar qual impressora de etiqueta deve ser selecionada por padrão" +msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" -msgstr "Mostrar relatório em linha" +msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "Mostrar relatórios em PDF no navegador, ao invés de baixar o arquivo" +msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" -msgstr "Procurar Peças" +msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" -msgstr "Mostrar peças na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "Buscar Peças do Fornecedor" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" -msgstr "Mostrar fornecedor de peças na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" -msgstr "Buscar peças do fabricante" +msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" -msgstr "Mostrar fabricante de peças na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" -msgstr "Ocultar peças inativas" +msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" -msgstr "Não incluir peças inativas na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" -msgstr "Pesquisar Categorias" +msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" -msgstr "Mostrar categoria das peças na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" -msgstr "Pesquisar Estoque" +msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" -msgstr "Mostrar itens do estoque na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" -msgstr "Ocultar itens do estoque indisponíveis" +msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" -msgstr "Não incluir itens de estoque que não estão disponíveis na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" -msgstr "Procurar Locais" +msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" -msgstr "Mostrar locais de estoque na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" -msgstr "Pesquisar empresas" +msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" -msgstr "Mostrar empresas na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" -msgstr "Procurar Pedidos de Produção" +msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" -msgstr "Mostrar pedidos de produção na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" -msgstr "Mostrar Pedido de Compras" +msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" -msgstr "Mostrar pedidos de compra na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" -msgstr "Não incluir Pedidos de Compras Inativos" +msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" -msgstr "Não incluir pedidos de compras inativos na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" -msgstr "Procurar Pedidos de Vendas" +msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" -msgstr "Mostrar pedidos de vendas na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" -msgstr "Não Incluir Pedidos de Compras Inativas" +msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" -msgstr "Não incluir pedidos de vendas inativos na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" -msgstr "Procurar Pedidos de Devolução" +msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" -msgstr "Mostrar pedidos de devolução na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" -msgstr "Não Incluir Pedidos de Devolução Inativas" +msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" -msgstr "Não incluir pedidos de devolução inativos na janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" -msgstr "Mostrar Resultados Anteriores" +msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" -msgstr "Número de resultados mostrados em cada seção da janela de visualização de pesquisa" +msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" -msgstr "Pesquisa de Regex" +msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" -msgstr "Permitir expressôes comuns nas conultas de pesquisas" +msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" -msgstr "Busca de Palavras Inteira" +msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" -msgstr "Pesquisa retorna que palavra inteira coincide" +msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" -msgstr "Mostrar Quantidade nos Formulários" +msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" -msgstr "Mostrar a quantidade de peças disponíveis em alguns formulários" +msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" -msgstr "Tecla Esc Fecha Formulários" +msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" -msgstr "Usar a tecla Esc para fechar fomulários modais" +msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" -msgstr "Fixar Navbar" +msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" -msgstr "A posição do Navbar é fixa no topo da tela" +msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" -msgstr "Formato da data" +msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" -msgstr "Formato preferido para mostrar datas" +msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" -msgstr "Agendamento de peças" +msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" -msgstr "Mostrar informações de agendamento de peças" +msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" -msgstr "Balanço de Peça" +msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "Mostrar informação de balanço da peça (se a funcionalidade de balanço estiver habilitada)" +msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" -msgstr "Comprimento da Tabela de Frases" +msgstr "" + +#: common/models.py:2431 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" -msgstr "Limite máximo de comprimento para frases exibidas nas visualizações de tabela" +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" -#: common/models.py:2530 +#: common/models.py:2467 msgid "Receive error reports" -msgstr "Receber relatório de erros" +msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" -msgstr "Receber notificações para erros do sistema" +msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" -msgstr "Últimas máquinas de impressão utilizadas" +msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" -msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Usuario" +msgstr "" -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" -msgstr "Quantidade de Parcelamentos" +msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" -msgstr "Preço" +msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" -msgstr "Preço unitário na quantidade especificada" +msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" -msgstr "Ponto final" +msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" -msgstr "Ponto final em qual o gancho web foi recebido" +msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" -msgstr "Nome para este webhook" +msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" -msgstr "Este gancho web está ativo" +msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" -msgstr "Token de acesso" +msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" -msgstr "Segredo" +msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" -msgstr "Segredo compartilhado para HMAC" +msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" -msgstr "ID da Mensagem" +msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" -msgstr "Identificador exclusivo desta mensagem" +msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" -msgstr "Servidor" +msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" -msgstr "Servidor do qual esta mensagem foi recebida" +msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" -msgstr "Cabeçalho" +msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" -msgstr "Cabeçalho da mensagem" +msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" -msgstr "Corpo" +msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" -msgstr "Corpo da mensagem" +msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" -msgstr "Ponto do qual esta mensagem foi recebida" +msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" -msgstr "Trabalhado em" +msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" -msgstr "O trabalho desta mensagem foi concluído?" +msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" -msgstr "Título" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Ligação" +msgstr "" -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" -msgstr "Publicado" +msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" -msgstr "Autor" +msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" -msgstr "Resumo" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" -msgstr "Lida" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" -msgstr "Esta notícia do item foi lida?" +msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" -msgstr "Imagem" - -#: common/models.py:3040 -msgid "Image file" -msgstr "Arquivo de imagem" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" msgstr "" -#: common/models.py:3099 -msgid "Unit symbol must be unique" +#: common/models.py:3044 +msgid "Image file" msgstr "" -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" -msgstr "Nome da unidade deve ser um identificador válido" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "Nome da unidade" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "Símbolo" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "Símbolo de unidade opcional" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "Definição" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "Definição de unidade" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Anexo" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Arquivo ausente" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Link externo não encontrado" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Selecione arquivo para anexar" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Comentario" - -#: common/models.py:3280 -msgid "Attachment comment" msgstr "" -#: common/models.py:3296 -msgid "Upload date" +#: common/models.py:3105 +msgid "Unit name" msgstr "" -#: common/models.py:3297 -msgid "Date the file was uploaded" +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" msgstr "" -#: common/models.py:3301 -msgid "File size" +#: common/models.py:3113 +msgid "Optional unit symbol" msgstr "" -#: common/models.py:3301 -msgid "File size in bytes" +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" msgstr "" -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" +#: common/models.py:3121 +msgid "Unit definition" msgstr "" #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" -msgstr "Novo {verbose_name}" +msgstr "" #: common/notifications.py:316 msgid "A new order has been created and assigned to you" -msgstr "Um novo pedido foi criado e atribuído a você" +msgstr "" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "{verbose_name} cancelado" +msgstr "" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "Um pedido atribuído a você foi cancelado" +msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" -msgstr "Itens Recebidos" +msgstr "" #: common/notifications.py:332 msgid "Items have been received against a purchase order" -msgstr "Os itens de um pedido de compra foram recebidos" +msgstr "" #: common/notifications.py:339 msgid "Items have been received against a return order" -msgstr "Os itens de um pedido de devolução foram recebidos" +msgstr "" #: common/notifications.py:457 msgid "Error raised by plugin" -msgstr "Erro criado pela extensão" +msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" -msgstr "Executando" +msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" -msgstr "Tarefas Pendentes" +msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "Tarefas Agendadas" +msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" -msgstr "Tarefas com Falhas" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" -msgstr "ID da Tarefa" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" -msgstr "ID Único da Tarefa" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" -msgstr "Bloquear" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" -msgstr "Tempo de bloqueio" +msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" -msgstr "Nome da tarefa" +msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" -msgstr "Função" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "Nome da função" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Argumentos" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Argumentos da tarefa" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "Argumentos de Palavra-chave" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "Argumentos Palavra-chave da Tarefa" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Nome do arquivo" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" msgstr "" -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" +#: common/serializers.py:372 +msgid "Function name" msgstr "" -#: common/validators.py:35 -msgid "No attachment model type provided" +#: common/serializers.py:374 +msgid "Arguments" msgstr "" -#: common/validators.py:41 -msgid "Invalid attachment model type" +#: common/serializers.py:374 +msgid "Task arguments" msgstr "" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" +#: common/serializers.py:377 +msgid "Keyword Arguments" msgstr "" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" +#: common/serializers.py:377 +msgid "Task keyword arguments" msgstr "" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Um domínio vazio não é permitido." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Nome de domínio inválido: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" -msgstr "Carregar Arquivo" +msgstr "" #: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:119 @@ -4110,19 +3825,19 @@ msgstr "Carregar Arquivo" #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "Coincidir campos" +msgstr "" #: common/views.py:84 msgid "Match Items" -msgstr "Coincidir Itens" +msgstr "" #: common/views.py:401 msgid "Fields matching failed" -msgstr "Os campos não correspondem" +msgstr "" #: common/views.py:464 msgid "Parts imported" -msgstr "Peças importadas" +msgstr "" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -4133,583 +3848,561 @@ msgstr "Peças importadas" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "Passo Anterior" +msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Empresa" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Empresas" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" -msgstr "Descrição da empresa" +msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" -msgstr "Descrição da empresa" +msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" -msgstr "Página Web" +msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" -msgstr "URL do Site da empresa" +msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" -msgstr "Número de telefone" +msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" -msgstr "Número de telefone do contato" +msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" -msgstr "Endereço de e-mail do contato" +msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "Contato" +msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" -msgstr "Ponto de contato" +msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" -msgstr "Link para informações externas da empresa" +msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" -msgstr "Você vende itens para esta empresa?" +msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" -msgstr "Você compra itens desta empresa?" +msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" -msgstr "Esta empresa fabrica peças?" +msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" -msgstr "Moeda padrão utilizada para esta empresa" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Endereço" +msgstr "" -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Endereços" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" -msgstr "Selecione a Empresa" +msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" -msgstr "Título do endereço" +msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" -msgstr "Título descrevendo a entrada de endereço" +msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" -msgstr "Endereço Principal" +msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" -msgstr "Definir como endereço principal" +msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" -msgstr "Linha 1" +msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" -msgstr "Linha de endereço 1" +msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" -msgstr "Linha 2" +msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" -msgstr "Linha de endereço 2" +msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" -msgstr "Código Postal" +msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" -msgstr "Cidade/Região" +msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" -msgstr "Código Postal Cidade / Região" +msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" -msgstr "Estado/Provincia" +msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" -msgstr "Estado ou Província" +msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" -msgstr "País" +msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" -msgstr "País do endereço" +msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" -msgstr "Notas de envio da transportadora" +msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" -msgstr "Notas para o envio da transportadora" +msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" -msgstr "Notas de envio interno" +msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" -msgstr "Notas de envio para uso interno" +msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" -msgstr "Link para as informações do endereço (externo)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Peça do Fabricante" +msgstr "" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" -msgstr "Peça base" +msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" -msgstr "Selecionar peça" +msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" -msgstr "Fabricante" +msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" -msgstr "Selecionar fabricante" +msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "NPF" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" -#: company/models.py:513 +#: company/models.py:515 msgid "URL for external manufacturer part link" -msgstr "URL do link externo da peça do fabricante" +msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" -msgstr "Descrição da peça do fabricante" +msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" -msgstr "Nome do parâmetro" +msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" -msgstr "Valor" +msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" -msgstr "Valor do Parâmetro" +msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" -msgstr "Unidades" +msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" -msgstr "Unidades do parâmetro" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Fornecedor da Peça" +msgstr "" -#: company/models.py:719 +#: company/models.py:731 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" +msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" -msgstr "Unidades de pacote deve ser maior do que zero" +msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" -msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" +msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" -msgstr "Fornecedor" +msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" -msgstr "Selecione o fornecedor" +msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" -msgstr "Unidade de reserva de estoque fornecedor" +msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" -msgstr "Selecionar peça do fabricante" +msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" -msgstr "URL do link externo da peça do fabricante" +msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" -msgstr "Descrição da peça fornecedor" +msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" -msgstr "Anotação" +msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" -msgstr "preço base" +msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" -msgstr "Taxa mínima (ex.: taxa de estoque)" +msgstr "" + +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" -#: company/models.py:853 +#: company/models.py:864 msgid "Part packaging" -msgstr "Embalagem de peças" +msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" -msgstr "Quantidade de embalagens" +msgstr "" -#: company/models.py:860 +#: company/models.py:871 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." +msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" -msgstr "múltiplo" +msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" -msgstr "Pedir múltiplos" +msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" -msgstr "Quantidade disponível do fornecedor" +msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" -msgstr "Disponibilidade Atualizada" +msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" -msgstr "Data da última atualização da disponibilidade dos dados" - -#: company/models.py:1027 -msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" -msgstr "Moeda padrão utilizada para este fornecedor" - -#: company/serializers.py:210 -msgid "Company Name" msgstr "" -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" -msgstr "Em Estoque" +msgstr "" #: company/templates/company/company_base.html:16 #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" -msgstr "Inativo" +msgstr "" #: company/templates/company/company_base.html:27 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" -msgstr "Criar Pedido de compra" +msgstr "" #: company/templates/company/company_base.html:33 msgid "Company actions" -msgstr "Ações da empresa" +msgstr "" #: company/templates/company/company_base.html:38 msgid "Edit company information" -msgstr "Editar Informações da Empresa" +msgstr "" #: company/templates/company/company_base.html:39 #: templates/js/translated/company.js:445 msgid "Edit Company" -msgstr "Editar Empresa" +msgstr "" #: company/templates/company/company_base.html:43 msgid "Delete company" -msgstr "Excluir a empresa" +msgstr "" #: company/templates/company/company_base.html:44 #: company/templates/company/company_base.html:168 msgid "Delete Company" -msgstr "Excluir Empresa" +msgstr "" #: company/templates/company/company_base.html:53 #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" -msgstr "Imagem da peça" +msgstr "" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "Carregar nova imagem" +msgstr "" #: company/templates/company/company_base.html:64 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "Baixar imagem do URL" +msgstr "" #: company/templates/company/company_base.html:66 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "Excluir imagem" +msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" -msgstr "Cliente" +msgstr "" #: company/templates/company/company_base.html:117 msgid "Uses default currency" -msgstr "Usar moeda padrão" +msgstr "" + +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" #: company/templates/company/company_base.html:131 msgid "Phone" -msgstr "Telefone" +msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "Remover imagem" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "Remover imagem associada desta empresa" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" -msgstr "Remover" +msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "Enviar Imagem" +msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "Baixar Imagem" +msgstr "" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 #: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 msgid "Supplier Parts" -msgstr "Peças do Fornecedor" +msgstr "" #: company/templates/company/detail.html:19 msgid "Create new supplier part" -msgstr "Criar nova peça do fornecedor" +msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" -msgstr "Nova peça do fornecedor" +msgstr "" #: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 #: templates/js/translated/search.js:151 msgid "Manufacturer Parts" -msgstr "Fabricantes de peças" +msgstr "" #: company/templates/company/detail.html:45 msgid "Create new manufacturer part" -msgstr "Criar novo fabricante de peça" +msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" -msgstr "Nova peça do fabricante" +msgstr "" #: company/templates/company/detail.html:65 msgid "Supplier Stock" -msgstr "Estoque do Fornecedor" +msgstr "" #: company/templates/company/detail.html:75 #: company/templates/company/sidebar.html:12 @@ -4717,50 +4410,50 @@ msgstr "Estoque do Fornecedor" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 #: users/models.py:208 msgid "Purchase Orders" -msgstr "Pedidos de compra" +msgstr "" #: company/templates/company/detail.html:79 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" -msgstr "Criar novo pedido de compra" +msgstr "" #: company/templates/company/detail.html:80 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "Novo Pedido de Compra" +msgstr "" #: company/templates/company/detail.html:101 #: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 #: users/models.py:209 msgid "Sales Orders" -msgstr "Pedidos de vendas" +msgstr "" #: company/templates/company/detail.html:105 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "Criar novo pedido de venda" +msgstr "" #: company/templates/company/detail.html:106 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "Novo Pedido de Venda" +msgstr "" #: company/templates/company/detail.html:126 msgid "Assigned Stock" -msgstr "Estoque Atribuído" +msgstr "" #: company/templates/company/detail.html:142 #: company/templates/company/sidebar.html:29 @@ -4771,483 +4464,385 @@ msgstr "Estoque Atribuído" #: templates/js/translated/search.js:232 templates/navbar.html:65 #: users/models.py:210 msgid "Return Orders" -msgstr "Pedidos de Devolução" +msgstr "" #: company/templates/company/detail.html:146 #: order/templates/order/return_orders.html:20 msgid "Create new return order" -msgstr "Criar novo pedido de devolução" +msgstr "" #: company/templates/company/detail.html:147 #: order/templates/order/return_orders.html:21 msgid "New Return Order" -msgstr "Novo Pedido de Devolução" +msgstr "" #: company/templates/company/detail.html:168 msgid "Company Notes" -msgstr "Notas da Empresa" +msgstr "" #: company/templates/company/detail.html:183 msgid "Company Contacts" -msgstr "Contato da Empresa" +msgstr "" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 msgid "Add Contact" -msgstr "Adicionar Contato" +msgstr "" #: company/templates/company/detail.html:206 msgid "Company addresses" -msgstr "Endereços da empresa" +msgstr "" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 msgid "Add Address" -msgstr "Adicionar endereço" +msgstr "" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 msgid "Manufacturers" -msgstr "Fabricantes" +msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" -msgstr "Pedir peça" +msgstr "" #: company/templates/company/manufacturer_part.html:39 #: templates/js/translated/company.js:1343 msgid "Edit manufacturer part" -msgstr "Editar peça do fabricante" +msgstr "" #: company/templates/company/manufacturer_part.html:43 #: templates/js/translated/company.js:1344 msgid "Delete manufacturer part" -msgstr "Excluir peça do fabricante" +msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" -msgstr "Peça Interna" +msgstr "" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "Nenhuma informação do fabricante disponível" +msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" -msgstr "Fornecedores" +msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" -msgstr "Parâmetros" +msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" -msgstr "Novo parâmetro" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" msgstr "" -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" -msgstr "Adicionar Parâmetro" +msgstr "" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "Peças Fabricadas" +msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "Peças fornecidas" +msgstr "" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "Itens fornecidos em estoque" +msgstr "" #: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "Itens de Estoque atribuídos" +msgstr "" #: company/templates/company/sidebar.html:33 msgid "Contacts" -msgstr "Contatos" +msgstr "" + +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" -msgstr "Ações de peças do fornecedor" +msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" -msgstr "Pedir Peça" +msgstr "" #: company/templates/company/supplier_part.html:60 #: company/templates/company/supplier_part.html:61 msgid "Update Availability" -msgstr "Atualizar disponibilidade" +msgstr "" #: company/templates/company/supplier_part.html:63 #: company/templates/company/supplier_part.html:64 #: templates/js/translated/company.js:294 msgid "Edit Supplier Part" -msgstr "Editar Fornecedor da Peça" +msgstr "" #: company/templates/company/supplier_part.html:68 #: company/templates/company/supplier_part.html:69 #: templates/js/translated/company.js:269 msgid "Duplicate Supplier Part" -msgstr "Duplicar Peça do Fornecedor" +msgstr "" #: company/templates/company/supplier_part.html:73 msgid "Delete Supplier Part" -msgstr "Excluir Fornecedor da Peça" +msgstr "" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "Excluir Fornecedor da Peça" +msgstr "" #: company/templates/company/supplier_part.html:133 msgid "No supplier information available" -msgstr "Nenhuma informação do fornecedor está disponível" +msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" -msgstr "Código (SKU)" +msgstr "" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" -msgstr "Estoque de Peça do Fornecedor" +msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" -msgstr "Criar novo item de estoque" +msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" -msgstr "Novo item de estoque" +msgstr "" #: company/templates/company/supplier_part.html:223 msgid "Supplier Part Orders" -msgstr "Pedidos de peças do fornecedor" +msgstr "" #: company/templates/company/supplier_part.html:246 msgid "Pricing Information" -msgstr "Informações de Preço" +msgstr "" #: company/templates/company/supplier_part.html:251 #: templates/js/translated/company.js:398 #: templates/js/translated/pricing.js:684 msgid "Add Price Break" -msgstr "Adicionar parcela de preço" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" msgstr "" -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" -msgstr "QR Code da Peça do Fornecedor" +msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" -msgstr "Vincular Código de Barras à Peça do Fornecedor" +msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" -msgstr "Atualizar Disponibilidade de Peças" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" -msgstr "Itens de Estoque" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:9 msgid "Supplier Part Pricing" -msgstr "Preço do Fornecedor Peça" +msgstr "" #: company/views.py:32 msgid "New Supplier" -msgstr "Novo Fornecedor" +msgstr "" #: company/views.py:38 msgid "New Manufacturer" -msgstr "Novo Fabricante" +msgstr "" #: company/views.py:43 templates/InvenTree/search.html:210 #: templates/navbar.html:60 msgid "Customers" -msgstr "Clientes" +msgstr "" #: company/views.py:44 msgid "New Customer" -msgstr "Novo Cliente" - -#: company/views.py:52 -msgid "New Company" -msgstr "Nova Empresa" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Colocado" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Colunas" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Dados" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Válido" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" msgstr "" -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" -msgstr "Desconhecido" +msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,850 +4903,728 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" -msgstr "Preço Total" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "Situação do pedido" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Referência do Pedido" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" -msgstr "Nenhum pedido de compra correspondente encontrado" +msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" -msgstr "Pedido" +msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" -msgstr "Pedido de Compra" +msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" -msgstr "Devolver pedido" +msgstr "" #: order/models.py:90 msgid "Total price for this order" -msgstr "Preço total deste pedido" +msgstr "" #: order/models.py:95 order/serializers.py:71 msgid "Order Currency" -msgstr "Moeda do pedido" +msgstr "" #: order/models.py:98 order/serializers.py:72 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)" +msgstr "" #: order/models.py:246 msgid "Contact does not match selected company" -msgstr "O contato não corresponde à empresa selecionada" +msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" -msgstr "Descrição do pedido (opcional)" +msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" -msgstr "Selecione o código do projeto para este pedido" +msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" -msgstr "Link para página externa" +msgstr "" -#: order/models.py:310 +#: order/models.py:299 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." +msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" -msgstr "Criado por" +msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" -msgstr "Usuário ou grupo responsável para este pedido" +msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" -msgstr "Ponto de contato para este pedido" +msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" -msgstr "Endereço da empresa para este pedido" +msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" -msgstr "Referência do pedido" +msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" -msgstr "Situação do pedido de compra" +msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" -msgstr "Empresa da qual os itens estão sendo encomendados" +msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" -msgstr "Referencia do fornecedor" +msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" -msgstr "Código de referência do pedido fornecedor" +msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" -msgstr "recebido por" +msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" -msgstr "Data de emissão" +msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" -msgstr "Dia que o pedido foi feito" +msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" -msgstr "Dia que o pedido foi concluído" +msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" -msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" +msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" -msgstr "Quantidade deve ser um número positivo" +msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" -msgstr "Empresa para qual os itens foi vendidos" - -#: order/models.py:1003 -msgid "Sales order status" msgstr "" -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " -msgstr "Referência do Cliente " +msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" -msgstr "Código de Referência do pedido do cliente" +msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" -msgstr "Data de Envio" +msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" -msgstr "enviado por" - -#: order/models.py:1077 -msgid "Order is already complete" msgstr "" -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" -msgstr "Apenas um pedido aberto pode ser marcado como completo" +msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "Pedido não pode ser concluído, pois, há envios incompletos" +msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 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" +msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" -msgstr "Quantidade do item" +msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" -msgstr "Referência do Item em Linha" +msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" -msgstr "Observações do Item de Linha" +msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 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)" +msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" -msgstr "Descrição item de linha (opcional)" +msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" -msgstr "Contexto" +msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" -msgstr "Contexto adicional para esta linha" +msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" -msgstr "Preço Unitário" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" -msgstr "A peça do fornecedor deve corresponder ao fornecedor" +msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" -msgstr "excluído" +msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" -msgstr "Fornecedor da Peça" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +msgstr "" + +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" -msgstr "Recebido" +msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" -msgstr "Número de itens recebidos" +msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" -msgstr "Preço de Compra" +msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" -msgstr "Preço unitário de compra" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "Onde o Comprador quer que este item seja armazenado?" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:1616 -msgid "Sales Order Line Item" +#: order/models.py:1434 +msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" -msgstr "Peça virtual não pode ser atribuída a um pedido de venda" +msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 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" +msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" -msgstr "Preço de Venda" +msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" -msgstr "Preço de venda unitário" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Enviado" +msgstr "" -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" -msgstr "Quantidade enviada" - -#: order/models.py:1751 -msgid "Sales Order Shipment" msgstr "" -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" -msgstr "Data do envio" +msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" -msgstr "Data de Entrega" +msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" -msgstr "Data da entrega do envio" +msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" -msgstr "Verificado por" +msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" -msgstr "Usuário que verificou esta remessa" +msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" -msgstr "Remessa" +msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" -msgstr "Número do Envio" +msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" -msgstr "Número de Rastreamento" +msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" -msgstr "Informação de rastreamento da remessa" +msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" -msgstr "Número da Fatura" +msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" -msgstr "Número de referência para fatura associada" +msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" -msgstr "O pedido já foi enviado" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "Remessa não foi alocada nos itens de estoque" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:1941 -msgid "Sales Order Allocation" +#: order/models.py:1721 +msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" -msgstr "O item do estoque não foi atribuído" +msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 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" +msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" -msgstr "Não é possível alocar uma linha sem uma peça" +msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" +msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" -msgstr "Quantidade deve ser 1 para item de estoque serializado" +msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" -msgstr "Pedidos de venda não coincidem com a remessa" +msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" -msgstr "Remessa não coincide com pedido de venda" +msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" -msgstr "Linha" +msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" -msgstr "Referência de remessa do pedido de venda" +msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" -msgstr "Selecione o item de estoque para alocar" +msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" -msgstr "Insira a quantidade de atribuição de estoque" +msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" -msgstr "Referência de Pedidos de Devolução" +msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" -msgstr "Empresa da qual os itens estão sendo retornados" +msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" -msgstr "Estado do pedido de retorno" - -#: order/models.py:2362 -msgid "Return Order Line Item" msgstr "" -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" -msgstr "Somente itens da série podem ser devolvidos" +msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" -msgstr "Selecione o item a ser devolvido pelo cliente" +msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" -msgstr "Data de Recebimento" +msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" -msgstr "Data que o pedido a ser devolvido foi recebido" +msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "Despesa/gastos" +msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" -msgstr "Gastos com esta linha de itens" - -#: order/models.py:2418 -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:2428 -msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:86 -msgid "Completed Lines" +#: order/models.py:2242 +msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Nome do Fornecedor" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" -msgstr "Pedido não pode ser cancelado" +msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" -msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" +msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" -msgstr "O pedido tem itens da linha incompletos" +msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" -msgstr "O pedido não está aberto" +msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" -msgstr "Moeda de preço de compra" +msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Numero interno do produto" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" -msgstr "A peça do fornecedor deve ser especificada" +msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" -msgstr "O pedido de compra deve ser especificado" +msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" -msgstr "O fornecedor deve corresponder o pedido de compra" +msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" -msgstr "Pedido de compra deve corresponder ao fornecedor" +msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" -msgstr "Itens de linha" +msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" -msgstr "O item de linha não corresponde ao pedido de compra" +msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" -msgstr "Selecione o local de destino para os itens recebidos" +msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" -msgstr "Digite o código do lote para itens de estoque recebidos" - -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "Digite o número de série para itens de estoque recebidos" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "Código de barras" +msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" -msgstr "Código de barras lido" +msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" -msgstr "Código de barras já em uso" +msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" -msgstr "Quantidade inteira deve ser fornecida para peças rastreáveis" +msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" -msgstr "Itens de linha deve ser providenciados" +msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" -msgstr "Loca de destino deve ser especificado" +msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" -msgstr "Código de barras fornecido deve ser único" +msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" -msgstr "Moeda de preço de venda" +msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" -msgstr "Nenhum detalhe da remessa fornecido" +msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" -msgstr "Item de linha não está associado a este pedido" +msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" -msgstr "Quantidade deve ser positiva" +msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" -msgstr "Digite números de série para alocar" +msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" -msgstr "O pedido já foi enviado" +msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" -msgstr "O envio não está associado a este pedido" +msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" -msgstr "Nenhuma correspondência encontrada para os seguintes números de série" +msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" -msgstr "Os seguintes números de série já estão alocados" +msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" -msgstr "Devolver item do pedido" +msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" -msgstr "Item do pedido não bate com o pedido de devolução" +msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" -msgstr "Item do pedido já foi recebido" +msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" -msgstr "Itens só podem ser recebidos de pedidos em processamento" +msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" -msgstr "Tipo de moeda para o item do pedido" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Perdido" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Retornado" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Em Progresso" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Devolução" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Consertar" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Substituir" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Reembolsar" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Recusar" +msgstr "" #: order/tasks.py:25 msgid "Overdue Purchase Order" -msgstr "Pedido de compra vencido" +msgstr "" #: order/tasks.py:30 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "Pedido de compra {po} está atrasada" +msgstr "" #: order/tasks.py:75 msgid "Overdue Sales Order" -msgstr "Pedido de venda vencido" +msgstr "" #: order/tasks.py:80 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "Pedido de venda {so} está atrasada" +msgstr "" #: order/templates/order/order_base.html:51 msgid "Print purchase order report" -msgstr "Imprimir relatório do pedido de compra" +msgstr "" #: order/templates/order/order_base.html:53 #: order/templates/order/return_order_base.html:62 #: order/templates/order/sales_order_base.html:62 msgid "Export order to file" -msgstr "Exportar pedido ao arquivo" +msgstr "" #: order/templates/order/order_base.html:59 #: order/templates/order/return_order_base.html:72 #: order/templates/order/sales_order_base.html:71 msgid "Order actions" -msgstr "Ações de pedido" +msgstr "" #: order/templates/order/order_base.html:64 #: order/templates/order/return_order_base.html:76 #: order/templates/order/sales_order_base.html:75 msgid "Edit order" -msgstr "Editar pedido" +msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Duplicar pedido" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" -msgstr "Cancelar pedido" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" -msgstr "Emitir Pedido" +msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" -msgstr "Marcar pedido como concluído" +msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" -msgstr "Completar Pedido" +msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" -msgstr "Miniatura da peça do fornecedor" +msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" -msgstr "Descrição do Pedido" +msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" -msgstr "Nenhuma informação do fornecedor disponível" +msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" -msgstr "Itens de Linha Concluídos" +msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" -msgstr "Incompleto" +msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" -msgstr "Emitido" +msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" -msgstr "Custo total" +msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" -msgstr "O custo total não pôde ser calculado" +msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" -msgstr "Código QR do Pedido de Compra" +msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" -msgstr "Vincular o Código de Barras ao Pedido de Compra" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 #: templates/patterns/wizard/match_fields.html:8 msgid "Missing selections for the following required columns" -msgstr "Seleções ausentes para as seguintes colunas necessárias" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:20 #: part/templates/part/import_wizard/ajax_match_fields.html:20 #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "Seleções duplicadas encontradas, veja abaixo. Corrija-as e tente enviar novamente." +msgstr "" #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -6155,28 +5632,28 @@ msgstr "Seleções duplicadas encontradas, veja abaixo. Corrija-as e tente envia #: part/templates/part/import_wizard/match_references.html:21 #: templates/patterns/wizard/match_fields.html:28 msgid "Submit Selections" -msgstr "Enviar Seleções" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:35 #: part/templates/part/import_wizard/ajax_match_fields.html:28 #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "Campos de arquivo" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 #: part/templates/part/import_wizard/match_fields.html:42 #: templates/patterns/wizard/match_fields.html:41 msgid "Remove column" -msgstr "Remover coluna" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:60 #: part/templates/part/import_wizard/ajax_match_fields.html:53 #: part/templates/part/import_wizard/match_fields.html:60 #: templates/patterns/wizard/match_fields.html:59 msgid "Duplicate selection" -msgstr "Duplicar seleção" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:71 #: order/templates/order/order_wizard/match_parts.html:52 @@ -6184,44 +5661,44 @@ msgstr "Duplicar seleção" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" -msgstr "Remover linha" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:12 #: part/templates/part/import_wizard/ajax_match_references.html:12 #: part/templates/part/import_wizard/match_references.html:12 msgid "Errors exist in the submitted data" -msgstr "Há erros nos dados enviados" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:28 #: part/templates/part/import_wizard/ajax_match_references.html:21 #: part/templates/part/import_wizard/match_references.html:28 msgid "Row" -msgstr "Linha" +msgstr "" #: order/templates/order/order_wizard/match_parts.html:29 msgid "Select Supplier Part" -msgstr "Selecionar Fornecedor da Peça" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" -msgstr "Retornar para Pedidos" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "Carregar Arquivo para o Pedido de Compra" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "O pedido já está processado. Arquivos não podem ser enviados." +msgstr "" #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -6229,2562 +5706,2390 @@ msgstr "O pedido já está processado. Arquivos não podem ser enviados." #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "Passo %(step)s de %(count)s" +msgstr "" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "Estoque Recebido" +msgstr "" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" -msgstr "Itens do Pedido de Compra" +msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "Adicionar item de linha" +msgstr "" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "Receber os itens do pedido" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "Linhas Extra" +msgstr "" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "Adicionar Linha Extra" +msgstr "" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "Itens Recebidos" +msgstr "" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 #: order/templates/order/sales_order_detail.html:139 msgid "Order Notes" -msgstr "Notas do Pedido" +msgstr "" #: order/templates/order/return_order_base.html:18 #: order/templates/order/sales_order_base.html:18 msgid "Customer logo thumbnail" -msgstr "Miniatura logotipo do cliente" +msgstr "" #: order/templates/order/return_order_base.html:60 msgid "Print return order report" -msgstr "Imprimir guia de devolução" +msgstr "" #: order/templates/order/return_order_base.html:64 #: order/templates/order/sales_order_base.html:64 msgid "Print packing list" -msgstr "Imprimir lista de pacotes" +msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" -msgstr "Referência do Cliente" +msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" -msgstr "Custo Total" +msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" -msgstr "Código QR do Pedido de Devolução" +msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" -msgstr "Vincular Código de Barras a Pedido de Devolução" +msgstr "" #: order/templates/order/return_order_sidebar.html:5 msgid "Order Details" -msgstr "Detalhes do pedido" +msgstr "" #: order/templates/order/sales_order_base.html:60 msgid "Print sales order report" -msgstr "Imprimir Relatório do Pedido de Venda" +msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" -msgstr "Enviar itens" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" msgstr "" -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" -msgstr "Concluir Pedido de Venda" +msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" -msgstr "Este Pedido de Venda não foi totalmente alocado" +msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" -msgstr "Envios concluídos" +msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" -msgstr "Código QR do Pedido de Venda" +msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" -msgstr "Vincular Código de Barras ao Pedido de Venda" +msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "Itens do Pedido de Venda" +msgstr "" #: order/templates/order/sales_order_detail.html:67 #: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 msgid "Pending Shipments" -msgstr "Envios Pendentes" +msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" -msgstr "Ações" +msgstr "" #: order/templates/order/sales_order_detail.html:80 msgid "New Shipment" -msgstr "Nova Remessa" +msgstr "" #: order/views.py:120 msgid "Match Supplier Parts" -msgstr "Corresponder Peças com Fornecedor" +msgstr "" #: order/views.py:406 msgid "Sales order not found" -msgstr "Pedido de Venda não encontrado" +msgstr "" #: order/views.py:412 msgid "Price not found" -msgstr "Preço não encontrado" +msgstr "" #: order/views.py:415 #, python-brace-format msgid "Updated {part} unit-price to {price}" -msgstr "Atualizado {part} unid.-preço para {price}" +msgstr "" #: order/views.py:421 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "Atualizado {part} unid.-preço para {price} e quantidade para {qty}" +msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" -msgstr "Revisão" +msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" -msgstr "Palavras chave" +msgstr "" #: part/admin.py:60 msgid "Part Image" -msgstr "Imagem da Peça" +msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" -msgstr "ID da Categoria" +msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" -msgstr "Nome da Categoria" +msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" -msgstr "ID Local Padrão" +msgstr "" #: part/admin.py:76 msgid "Default Supplier ID" -msgstr "ID de Fornecedor Padrão" +msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" -msgstr "Variante de" +msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" -msgstr "Estoque Mínimo" +msgstr "" #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "Usado em" +msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" -msgstr "Produzindo" +msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" -msgstr "Custo Mínimo" +msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" -msgstr "Custo Máximo" +msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" -msgstr "ID Paternal" +msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" -msgstr "Nome Paternal" +msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" -msgstr "Caminho da Categoria" +msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" -msgstr "Peças" +msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" -msgstr "Nível da LDM" +msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" -msgstr "ID Item LDM" +msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" -msgstr "IPN Paternal" +msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" -msgstr "Preço Mínimo" +msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" -msgstr "Preço Máximo" +msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" -msgstr "Pedido de compra recebido" +msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" -msgstr "Pedidos de Venda Feitos" +msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" -msgstr "Estoque produzido pelo Pedido de Produção" +msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" -msgstr "Estoque obrigatório para Pedido de Produção" - -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "Validar a Lista de Materiais completa" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "Esta opção deve ser selecionada" +msgstr "" -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" -msgstr "Categoria" - -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" msgstr "" -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" -msgstr "Local Padrão" +msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" -msgstr "Estoque Total" +msgstr "" #: part/forms.py:49 msgid "Input quantity for price calculation" -msgstr "Quantidade para o cálculo de preço" +msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" -msgstr "Categoria da Peça" +msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" -msgstr "Categorias de Peça" +msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" -msgstr "Local padrão para peças desta categoria" +msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" -msgstr "Estrutural" +msgstr "" -#: part/models.py:115 +#: part/models.py:109 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." +msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" -msgstr "Palavras-chave Padrão" +msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" -msgstr "Palavras-chave padrão para peças nesta categoria" +msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" -msgstr "Ícone" - -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 -msgid "Icon (optional)" -msgstr "Ícone (opcional)" - -#: part/models.py:178 -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:519 -msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" +#: part/models.py:126 stock/models.py:149 +msgid "Icon (optional)" msgstr "" -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" +#: part/models.py:148 +msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" -msgstr "Escolha inválida para peça parental" +msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, 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)" +msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "Peça '{parent}' é usada na BOM para '{self}' (recursiva)" +msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" -msgstr "IPN deve corresponder ao padrão regex {pattern}" - -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" -msgstr "Item em estoque com este número de série já existe" +msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" -msgstr "Não é permitido duplicar IPN em configurações de partes" - -#: part/models.py:926 -msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." -msgstr "Uma parte com este Nome, IPN e Revisão já existe." +msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" -msgstr "Peças não podem ser atribuídas a categorias estruturais!" +msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" -msgstr "Nome da peça" +msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" -msgstr "É um modelo" +msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" -msgstr "Esta peça é uma peça modelo?" +msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" -msgstr "Esta peça é variante de outra peça?" +msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" -msgstr "Descrição da peça (opcional)" +msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" -msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" +msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" -msgstr "Categoria da Peça" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "Revisão de peça ou número de versão" +msgstr "" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" -msgstr "Onde este item é armazenado normalmente?" +msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" -msgstr "Fornecedor Padrão" +msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" -msgstr "Fornecedor padrão da peça" +msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" -msgstr "Validade Padrão" +msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" -msgstr "Validade (em dias) para itens do estoque desta peça" +msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" -msgstr "Nível mínimo de estoque permitido" +msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" -msgstr "Unidade de medida para esta peça" +msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" -msgstr "Essa peça pode ser construída a partir de outras peças?" +msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" -msgstr "Essa peça pode ser usada para construir outras peças?" +msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" -msgstr "Esta parte tem rastreamento para itens únicos?" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" -msgstr "Esta peça pode ser comprada de fornecedores externos?" +msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" -msgstr "Esta peça pode ser vendida a clientes?" - -#: part/models.py:1189 -msgid "Is this part active?" -msgstr "Esta parte está ativa?" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" msgstr "" -#: part/models.py:1195 -msgid "Locked parts cannot be edited" +#: part/models.py:1045 +msgid "Is this part active?" msgstr "" -#: part/models.py:1201 +#: part/models.py:1051 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?" +msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" -msgstr "Soma de Verificação da LDM" +msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" -msgstr "Soma de verificação da LDM armazenada" +msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" -msgstr "LDM conferida por" +msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" -msgstr "LDM verificada no dia" +msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" -msgstr "Criação de Usuário" +msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" -msgstr "Proprietário responsável por esta peça" +msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" -msgstr "Último Balanço" +msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" -msgstr "Venda múltipla" +msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" -msgstr "Moeda usada para armazenar os cálculos de preços" +msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" -msgstr "Custo Mínimo da LDM" +msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" -msgstr "Custo mínimo das peças componentes" +msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" -msgstr "Custo Máximo da LDM" +msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" -msgstr "Custo máximo das peças componentes" +msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" -msgstr "Custo Mínimo de Compra" +msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" -msgstr "Custo mínimo histórico de compra" +msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" -msgstr "Custo Máximo de Compra" +msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" -msgstr "Custo máximo histórico de compra" +msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" -msgstr "Preço Interno Mínimo" +msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" -msgstr "Custo mínimo baseado nos intervalos de preço internos" +msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" -msgstr "Preço Interno Máximo" +msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" -msgstr "Custo máximo baseado nos intervalos de preço internos" +msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" -msgstr "Preço Mínimo do Fornecedor" +msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" -msgstr "Preço mínimo da peça de fornecedores externos" +msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" -msgstr "Preço Máximo do Fornecedor" +msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" -msgstr "Preço máximo da peça de fornecedores externos" +msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" -msgstr "Custo Mínimo variável" +msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" -msgstr "Custo mínimo calculado das peças variáveis" +msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" -msgstr "Custo Máximo Variável" +msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" -msgstr "Custo máximo calculado das peças variáveis" +msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" -msgstr "Sobrepor o custo mínimo" +msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" -msgstr "Sobrepor o custo máximo" +msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" -msgstr "Custo total mínimo calculado" +msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" -msgstr "Custo total máximo calculado" +msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" -msgstr "Preço Mínimo de Venda" +msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" -msgstr "Preço mínimo de venda baseado nos intervalos de preço" +msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" -msgstr "Preço Máximo de Venda" +msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" -msgstr "Preço máximo de venda baseado nos intervalos de preço" +msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" -msgstr "Custo Mínimo de Venda" +msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" -msgstr "Preço histórico mínimo de venda" +msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" -msgstr "Custo Máximo de Venda" +msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" -msgstr "Preço histórico máximo de venda" +msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" -msgstr "Peça para Balanço" +msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" -msgstr "Total de Itens" +msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" -msgstr "Número de entradas de estoques individuais no momento do balanço" +msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" -msgstr "Estoque total disponível no momento do balanço" +msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" -msgstr "Data" +msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" -msgstr "Data de realização do balanço" +msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" -msgstr "Notas adicionais" +msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" -msgstr "Usuário que fez o balanço" +msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" -msgstr "Custo Mínimo de Estoque" +msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" -msgstr "Custo mínimo estimado de estoque disponível" +msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" -msgstr "Custo Máximo de Estoque" +msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" -msgstr "Custo máximo estimado de estoque disponível" +msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" -msgstr "Reportar" +msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" -msgstr "Arquivo de Relatório de Balanço (gerado internamente)" +msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" -msgstr "Contagem de Peças" +msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" -msgstr "Número de peças cobertas pelo Balanço" - -#: part/models.py:3395 -msgid "User who requested this stocktake report" -msgstr "Usuário que solicitou este relatório de balanço" - -#: part/models.py:3405 -msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3517 -msgid "Part Test Template" +#: part/models.py:3273 +msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "Escolhas devem ser únicas" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" -msgstr "Modelos de teste só podem ser criados para peças rastreáveis" +msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" -msgstr "Nome de Teste" +msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" -msgstr "Insira um nome para o teste" +msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" -msgstr "Descrição do Teste" +msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" -msgstr "Digite a descrição para este teste" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Habilitado" +msgstr "" -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" -msgstr "Requerido" +msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" -msgstr "Este teste é obrigatório passar?" +msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" -msgstr "Requer Valor" +msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" -msgstr "Este teste requer um valor ao adicionar um resultado de teste?" +msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" -msgstr "Anexo obrigatório" - -#: part/models.py:3642 -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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Escolhas" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3681 -msgid "Part Parameter Template" +#: part/models.py:3513 +msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" -msgstr "Parâmetros da caixa de seleção não podem ter unidades" +msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" -msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" +msgstr "" + +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" -#: part/models.py:3750 +#: part/models.py:3602 msgid "Parameter template name must be unique" -msgstr "Nome do modelo de parâmetro deve ser único" +msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" -msgstr "Nome do Parâmetro" +msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" -msgstr "Unidades físicas para este parâmetro" +msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" -msgstr "Descrição do Parâmetro" +msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" -msgstr "Caixa de seleção" +msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" -msgstr "Este parâmetro é uma caixa de seleção?" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" +msgstr "" -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" -msgstr "Escolha inválida para valor do parâmetro" +msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" -msgstr "Peça Paternal" +msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" -msgstr "Modelo de parâmetro" +msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "Valor do Parâmetro" +#: part/models.py:3778 +msgid "Data" +msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" -msgstr "Valor Padrão" +msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" -msgstr "Valor Padrão do Parâmetro" +msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" -msgstr "ID da peça ou nome da peça" +msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" -msgstr "Valor exclusivo do ID de peça" +msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" -msgstr "Valor da parte IPN" +msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" -msgstr "Nível" - -#: part/models.py:4104 -msgid "BOM level" -msgstr "Nível da LDM" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" +#: part/models.py:3924 +msgid "BOM level" msgstr "" -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" -msgstr "Selecione a Peça Parental" +msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" -msgstr "Sub peça" +msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" -msgstr "Selecionar peça a ser usada na LDM" +msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" -msgstr "Quantidade de LDM para este item LDM" +msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" -msgstr "Este item LDM é opcional" +msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 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)" +msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" -msgstr "Excedente" +msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "Quantidade estimada de desperdício (absoluto ou porcentagem)" +msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" -msgstr "Referência do Item LDM" +msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" -msgstr "Notas do Item LDM" +msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" -msgstr "Soma de verificação" +msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" -msgstr "Soma de Verificação da LDM da linha" +msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" -msgstr "Validado" +msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" -msgstr "O item da LDM foi validado" +msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" -msgstr "Obtém herdados" +msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "Este item da LDM é herdado por LDMs para peças variáveis" +msgstr "" + +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" -#: part/models.py:4314 +#: part/models.py:4096 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" +msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" -msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" +msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" -msgstr "Sub peça deve ser especificada" +msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" -msgstr "Substituir Item da LDM" +msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 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" +msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" -msgstr "Item LDM Parental" +msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" -msgstr "Substituir peça" +msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" -msgstr "Parte 1" +msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" -msgstr "Parte 2" +msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" -msgstr "Selecionar Peça Relacionada" +msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" -msgstr "Relacionamento da peça não pode ser criada com ela mesma" +msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" -msgstr "Relação duplicada já existe" - -#: part/serializers.py:124 -msgid "Parent Category" msgstr "" -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "Categoria de peça pai" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" -msgstr "Sub-categorias" +msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" -msgstr "Moeda de compra deste item de estoque" +msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" -msgstr "Nenhuma parte selecionada" +msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" -msgstr "Selecionar categoria" +msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" -msgstr "Peça Original" +msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" -msgstr "Selecione a peça original para duplicar" +msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" -msgstr "Copiar imagem" +msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" -msgstr "Copiar imagem da peça original" +msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" -msgstr "Copiar LDM" +msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" -msgstr "Copiar lista de materiais da peça original" +msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" -msgstr "Copiar Parâmetros" +msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" -msgstr "Copiar dados do parâmetro da peça original" +msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" -msgstr "Copiar Notas" +msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" -msgstr "Copiar imagem da peça original" +msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" -msgstr "Quantidade Inicial de Estoque" +msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 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." +msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" -msgstr "Local Inicial do Estoque" +msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" -msgstr "Especifique o local do estoque inicial para esta Peça" +msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" -msgstr "Selecione o fornecedor (ou deixe em branco para pular)" +msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" -msgstr "Selecione fabricante (ou deixe em branco para pular)" +msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" -msgstr "Número de Peça do Fabricante" +msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" -msgstr "A empresa selecionada não é um fornecedor válido" +msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" -msgstr "A empresa selecionada não é um fabricante válido" +msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" -msgstr "A peça do fabricante que corresponde a essa MPN já existe" +msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" -msgstr "A peça do fornecedor que corresponde a essa SKU já existe" +msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" -msgstr "Peça duplicada" +msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" -msgstr "Copiar dados iniciais de outra peça" +msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" -msgstr "Estoque inicial" +msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" -msgstr "Criar peça com a quantidade inicial de estoque" +msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" -msgstr "Informações do Fornecedor" +msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" -msgstr "Adicionar informação inicial de fornecedor para esta peça" +msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" -msgstr "Copiar Parâmetros da Categoria" +msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" -msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" +msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" -msgstr "Imagem Existente" +msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" -msgstr "Nome de arquivo de uma imagem de peça existente" +msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" -msgstr "A imagem não existe" +msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" -msgstr "Limitar o relatório de balanço a uma determinada peça e quaisquer peças variantes" +msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" -msgstr "Limitar o relatório de balanço a uma determinada categoria, e qualquer peças filhas" +msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" -msgstr "Limitar o relatório de balanço a um determinado local de estoque, e qualquer local filho" +msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" -msgstr "Excluir Estoque externo" +msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" -msgstr "Excluir itens de estoque em locais externos" +msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" -msgstr "Gerar relatório" +msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" -msgstr "Gerar arquivo de relatório contendo dados de estoque calculados" +msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" -msgstr "Atualizar Peças" +msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" -msgstr "Atualizar peças especificadas com dados de estoque calculados" +msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" -msgstr "Função de Balanço de Estoque não está ativada" +msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" -msgstr "Sobrepor valor calculado para preço mínimo" +msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" -msgstr "Moeda do preço mínimo" +msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" -msgstr "Sobrepor valor calculado para preço máximo" +msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" -msgstr "Moeda do preço máximo" +msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" -msgstr "Atualizar" +msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" -msgstr "Atualizar preços desta peça" +msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, 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:1429 -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:1432 -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:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" msgstr "" -#: part/serializers.py:1591 -msgid "Component Description" +#: part/serializers.py:1344 +msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1597 -msgid "Select the component part" +#: part/serializers.py:1347 +msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Pode Produzir" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" -msgstr "Selecionar peça para copiar a LDM" +msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" -msgstr "Remover Dado Existente" +msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" -msgstr "Remova itens LDM existentes antes de copiar" +msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" -msgstr "Incluir Herdados" +msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" -msgstr "Incluir itens LDM que são herdados de peças modelo" +msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" -msgstr "Pular Linhas inválidas" +msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" -msgstr "Habilitar esta opção para pular linhas inválidas" +msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" -msgstr "Copiar Peças Substitutas" +msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" -msgstr "Copiar peças de substitutas quando duplicar itens de LDM" +msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" -msgstr "Limpar LDM Existente" +msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" -msgstr "Apagar itens LDM existentes antes de carregar" +msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" -msgstr "Nenhuma coluna de peça especificada" +msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" -msgstr "Múltiplas peças correspondentes encontradas" +msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" -msgstr "Nenhuma peça correspondente encontrada" +msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" -msgstr "Peça não está designada como componente" +msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" -msgstr "Quantidade não foi fornecida" +msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" -msgstr "Quantidade Inválida" +msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" -msgstr "Pelo menos um item LDM é necessário" +msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" -msgstr "Quantidade Total" +msgstr "" #: part/stocktake.py:225 msgid "Total Cost Min" -msgstr "Custo Min Total" +msgstr "" #: part/stocktake.py:226 msgid "Total Cost Max" -msgstr "Custo Max Total" +msgstr "" #: part/stocktake.py:284 msgid "Stocktake Report Available" -msgstr "Balanço de Estoque Disponível" +msgstr "" #: part/stocktake.py:285 msgid "A new stocktake report is available for download" -msgstr "Um novo relatório de balanço do estoque está disponível para baixar" +msgstr "" #: part/tasks.py:37 msgid "Low stock notification" -msgstr "Notificação de estoque baixo" +msgstr "" #: part/tasks.py:39 #, 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" +msgstr "" #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." -msgstr "Você não tem permissões para editar a LDM." +msgstr "" #: part/templates/part/bom.html:15 msgid "The BOM this part has been changed, and must be validated" -msgstr "A LDM dessa peça foi alterada, e deve ser validada" +msgstr "" #: part/templates/part/bom.html:17 #, python-format msgid "This BOM was last checked by %(checker)s on %(check_date)s" -msgstr "Esta BOM foi verificada por %(checker)s em %(check_date)s" +msgstr "" #: part/templates/part/bom.html:21 msgid "This BOM has not been validated." -msgstr "A BOM não foi validada." +msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" -msgstr "Fazer balanço de estoque para esta categoria de peça" +msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" -msgstr "Você está inscrito para notificações desta categoria" +msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" -msgstr "Inscrever-se para notificações desta categoria" +msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" -msgstr "Ações de Categoria" +msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" -msgstr "Editar categoria" +msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" -msgstr "Editar Categoria" +msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" -msgstr "Excluir categoria" +msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" -msgstr "Excluir Categoria" +msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" -msgstr "Categoria de peça de nível superior" +msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" -msgstr "Peças (incluindo subcategorias)" +msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" -msgstr "Criar nova peça" +msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" -msgstr "Nova Peça" +msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" -msgstr "Parâmetros da Peça" +msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" -msgstr "Criar categoria de peça" +msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" -msgstr "Nova Categoria" +msgstr "" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "Importar Peças" +msgstr "" #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "Faça uma cópia da peça '%(full_name)s'." +msgstr "" #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 msgid "Possible Matching Parts" -msgstr "Possíveis peças correspondentes" +msgstr "" #: part/templates/part/copy_part.html:15 #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" -msgstr "A nova peça pode ser uma duplicata dessas peças existentes" +msgstr "" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "%(full_name)s - %(desc)s (%(match_per)s%% correspondência)" +msgstr "" #: part/templates/part/detail.html:20 msgid "Part Stock" -msgstr "Estoque da Peça" +msgstr "" #: part/templates/part/detail.html:44 msgid "Refresh scheduling data" -msgstr "Atualizar dados de agendamento" +msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 #: templates/js/translated/tables.js:552 msgid "Refresh" -msgstr "Recarregar" +msgstr "" #: part/templates/part/detail.html:66 msgid "Add stocktake information" -msgstr "Adicionar informações de balanço de estoque" +msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" -msgstr "Balanço" +msgstr "" #: part/templates/part/detail.html:83 msgid "Part Test Templates" -msgstr "Modelos de Teste de Peça" +msgstr "" #: part/templates/part/detail.html:88 msgid "Add Test Template" -msgstr "Adicionar Modelo de Teste" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" msgstr "" -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" -msgstr "Alocações do Pedido de Vendas" +msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" -msgstr "Notas de Peça" +msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" -msgstr "Variantes de Peça" +msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" -msgstr "Criar variante" +msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" -msgstr "Nova Variação" +msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" -msgstr "Adicionar um novo parâmetro" +msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "Peças Relacionadas" +msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" -msgstr "Adicionar Relacionado" +msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "Lista de Materiais" +msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" -msgstr "Exportar Ações" +msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" -msgstr "Exportar LDM" +msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" -msgstr "Imprimir Relatório da LDM" +msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" -msgstr "Ações da LDM" +msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" -msgstr "Carregar LDM" +msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" -msgstr "Validar LDM" +msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" -msgstr "Adicionar Item LDM" +msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" -msgstr "Montagens" +msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" -msgstr "Produções de peça" +msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" -msgstr "Alocações de Pedido de Produção" +msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" -msgstr "Fornecedores da peça" +msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" -msgstr "Fabricantes da peça" +msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" -msgstr "Peça Relacionada" +msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" -msgstr "Adicionar Peça Relacionada" +msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" -msgstr "Adicionar Modelo de Resultado de Teste" +msgstr "" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 msgid "Insufficient privileges." -msgstr "Permissões insuficientes." +msgstr "" #: part/templates/part/import_wizard/part_upload.html:8 msgid "Return to Parts" -msgstr "Retornar para Peças" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:13 msgid "Import Parts from File" -msgstr "Importar Peças de um Arquivo" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" -msgstr "Requerimentos para importar peça" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:33 msgid "The part import file must contain the required named columns as provided in the " -msgstr "O arquivo para importar peças deve conter as colunas nomeadas como fornecido na " +msgstr "" #: part/templates/part/import_wizard/part_upload.html:33 msgid "Part Import Template" -msgstr "Modelo de importação de Peças" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:89 msgid "Download Part Import Template" -msgstr "Baixar Modelo de Importação de Peça" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" -msgstr "Formato" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" -msgstr "Selecione o formato de arquivo" +msgstr "" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "Lista de Peças" +msgstr "" #: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 msgid "You are subscribed to notifications for this part" -msgstr "Você está inscrito para notificações desta peça" +msgstr "" #: part/templates/part/part_base.html:33 msgid "Subscribe to notifications for this part" -msgstr "Inscrever-se para notificações desta peça" +msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" -msgstr "Imprimir Etiqueta" +msgstr "" #: part/templates/part/part_base.html:58 msgid "Show pricing information" -msgstr "Mostrar informações de preços" +msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" -msgstr "Ações de Estoque" +msgstr "" #: part/templates/part/part_base.html:70 msgid "Count part stock" -msgstr "Contagem peça em estoque" +msgstr "" #: part/templates/part/part_base.html:76 msgid "Transfer part stock" -msgstr "Transferir estoque de peça" +msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" -msgstr "Ações de peça" +msgstr "" #: part/templates/part/part_base.html:94 msgid "Duplicate part" -msgstr "Peça duplicada" +msgstr "" #: part/templates/part/part_base.html:97 msgid "Edit part" -msgstr "Editar peça" +msgstr "" #: part/templates/part/part_base.html:100 msgid "Delete part" -msgstr "Excluir peça" +msgstr "" #: part/templates/part/part_base.html:119 msgid "Part is a template part (variants can be made from this part)" -msgstr "Esta é uma peça modelo (as variantes podem ser feitas a partir desta peça)" +msgstr "" #: part/templates/part/part_base.html:123 msgid "Part can be assembled from other parts" -msgstr "Peças pode ser montada a partir de outras peças" +msgstr "" #: part/templates/part/part_base.html:127 msgid "Part can be used in assemblies" -msgstr "Peça pode ser usada em montagens" +msgstr "" #: part/templates/part/part_base.html:131 msgid "Part stock is tracked by serial number" -msgstr "Peça em estoque é controlada por número de série" +msgstr "" #: part/templates/part/part_base.html:135 msgid "Part can be purchased from external suppliers" -msgstr "Peça pode ser comprada de fornecedores externos" +msgstr "" #: part/templates/part/part_base.html:139 msgid "Part can be sold to customers" -msgstr "Peça pode ser vendida a clientes" +msgstr "" #: part/templates/part/part_base.html:145 msgid "Part is not active" -msgstr "Peça inativa" +msgstr "" #: part/templates/part/part_base.html:153 msgid "Part is virtual (not a physical part)" -msgstr "Peça é virtual (não é algo físico)" +msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" -msgstr "Mostrar Detalhes de Peça" +msgstr "" #: part/templates/part/part_base.html:218 #: stock/templates/stock/item_base.html:388 msgid "Allocated to Build Orders" -msgstr "Alocado para Pedidos de Construção" +msgstr "" #: part/templates/part/part_base.html:227 #: stock/templates/stock/item_base.html:381 msgid "Allocated to Sales Orders" -msgstr "Alocado para Pedidos de Venda" +msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" -msgstr "Nível mínimo de estoque" +msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" -msgstr "Faixa de Preço" +msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" -msgstr "Último Número de Série" +msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" -msgstr "Procurar por número serial" +msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" -msgstr "QR Code da Peça" +msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" -msgstr "Vincular Código de Barras à Peça" +msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" -msgstr "Calcular" +msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" -msgstr "Remover imagem associada a esta peça" +msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" -msgstr "Nenhuma imagem correspondente encontrada" +msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" -msgstr "Esconder Detalhes da Peça" +msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 #: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 msgid "Supplier Pricing" -msgstr "Preço do fornecedor" +msgstr "" #: part/templates/part/part_pricing.html:26 #: part/templates/part/part_pricing.html:52 #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "Custo unitário" +msgstr "" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" -msgstr "Nenhuma informação dos preços do fornecedor disponível" +msgstr "" #: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 #: part/templates/part/prices.html:250 msgid "BOM Pricing" -msgstr "Preço LDM" +msgstr "" #: part/templates/part/part_pricing.html:66 msgid "Unit Purchase Price" -msgstr "Preço Unitário de Compra" +msgstr "" #: part/templates/part/part_pricing.html:72 msgid "Total Purchase Price" -msgstr "Preço Total de Compra" +msgstr "" #: part/templates/part/part_pricing.html:83 msgid "No BOM pricing available" -msgstr "Preços LDM indisponíveis" +msgstr "" #: part/templates/part/part_pricing.html:92 msgid "Internal Price" -msgstr "Preço Interno" +msgstr "" #: part/templates/part/part_pricing.html:123 msgid "No pricing information is available for this part." -msgstr "Nenhuma informação de preço está disponível para esta peça." +msgstr "" #: part/templates/part/part_scheduling.html:14 msgid "Scheduled Quantity" -msgstr "Quantidade Agendada" +msgstr "" #: part/templates/part/part_sidebar.html:11 msgid "Variants" -msgstr "Variantes" +msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" -msgstr "Estoque" +msgstr "" #: part/templates/part/part_sidebar.html:30 #: templates/InvenTree/settings/sidebar.html:39 msgid "Pricing" -msgstr "Preços" +msgstr "" #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" -msgstr "Agendamento" +msgstr "" #: part/templates/part/part_sidebar.html:54 msgid "Test Templates" -msgstr "Testar Modelos" +msgstr "" #: part/templates/part/part_thumb.html:11 msgid "Select from existing images" -msgstr "Selecionar de imagens existentes" +msgstr "" #: part/templates/part/prices.html:11 msgid "Pricing Overview" -msgstr "Resumo de Preços" +msgstr "" #: part/templates/part/prices.html:14 msgid "Refresh Part Pricing" -msgstr "Atualizar Preço da Peça" +msgstr "" #: part/templates/part/prices.html:17 msgid "Override Part Pricing" -msgstr "Sobrepor Preço da Peça" +msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" -msgstr "Editar" +msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" -msgstr "Última atualização" +msgstr "" #: part/templates/part/prices.html:37 part/templates/part/prices.html:127 msgid "Price Category" -msgstr "Categoria de preço" +msgstr "" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "Mínimo" +msgstr "" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "Máximo" +msgstr "" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" -msgstr "Preço Interno" +msgstr "" #: part/templates/part/prices.html:64 part/templates/part/prices.html:206 msgid "Purchase History" -msgstr "Histórico de Compras" +msgstr "" #: part/templates/part/prices.html:98 part/templates/part/prices.html:274 msgid "Variant Pricing" -msgstr "Preço Variável" +msgstr "" #: part/templates/part/prices.html:106 msgid "Pricing Overrides" -msgstr "Sobrepor preços" +msgstr "" #: part/templates/part/prices.html:113 msgid "Overall Pricing" -msgstr "Preços Gerais" +msgstr "" #: part/templates/part/prices.html:149 part/templates/part/prices.html:326 msgid "Sale History" -msgstr "Histórico de vendas" +msgstr "" #: part/templates/part/prices.html:157 msgid "Sale price data is not available for this part" -msgstr "Dados de preço de venda não estão disponíveis para esta peça" +msgstr "" #: part/templates/part/prices.html:164 msgid "Price range data is not available for this part." -msgstr "Dados do intervalo de preços não estão disponíveis para esta peça." +msgstr "" #: part/templates/part/prices.html:175 part/templates/part/prices.html:207 #: part/templates/part/prices.html:228 part/templates/part/prices.html:251 #: part/templates/part/prices.html:275 part/templates/part/prices.html:298 #: part/templates/part/prices.html:327 msgid "Jump to overview" -msgstr "Ir para visão geral" +msgstr "" #: part/templates/part/prices.html:180 msgid "Add Internal Price Break" -msgstr "Adicionar intervalo de preço interno" +msgstr "" #: part/templates/part/prices.html:297 msgid "Sale Pricing" -msgstr "Preço de Venda" +msgstr "" #: part/templates/part/prices.html:303 msgid "Add Sell Price Break" -msgstr "Adicionar intervalo de preço de venda" +msgstr "" #: part/templates/part/pricing_javascript.html:24 msgid "Update Pricing" -msgstr "Atualizar Preços" +msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" -msgstr "Sem Estoque" +msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 msgid "Low Stock" -msgstr "Estoque Baixo" +msgstr "" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "Voltar à LDM" +msgstr "" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "Carregar a Lista de materiais" +msgstr "" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "Requisitos para carregar LDM" +msgstr "" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "Carregar Arquivo LDM" +msgstr "" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "Enviar Dados LDM" +msgstr "" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "Requisitos para carregar a LDM" +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "O arquivo da LDM deve conter as colunas nomeadas como fornecido na " +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "Carregar Modelo de LDM" +msgstr "" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "Cada peça deve existir no banco de dados" +msgstr "" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "Criar variante de peça" +msgstr "" #: part/templates/part/variant_part.html:10 msgid "Create a new variant part from this template" -msgstr "Criar uma peça variante a partir deste modelo" +msgstr "" #: part/views.py:111 msgid "Match References" -msgstr "Referências de combinações" +msgstr "" #: part/views.py:275 #, python-brace-format msgid "Can't import part {new_part.name} because there is no category assigned" -msgstr "Não é possível importar a peça {new_part.name} pois não há uma categoria atribuída" +msgstr "" #: part/views.py:425 msgid "Select Part Image" -msgstr "Selecionar Imagem da Peça" +msgstr "" #: part/views.py:448 msgid "Updated part image" -msgstr "Atualizar imagem da peça" +msgstr "" #: part/views.py:451 msgid "Part image not found" -msgstr "Imagem da peça não encontrada" +msgstr "" #: part/views.py:545 msgid "Part Pricing" -msgstr "Preço Peça" +msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" #: plugin/base/action/api.py:32 msgid "No action specified" -msgstr "Nenhuma ação especificada" +msgstr "" #: plugin/base/action/api.py:41 msgid "No matching action found" -msgstr "Nenhuma ação correspondente encontrada" +msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" -msgstr "Nenhum resultado encontrado para os dados do código de barras" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "Coincidência encontrada para dados de código de barras" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" -msgstr "Código de barras corresponde ao item existente" +msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" -msgstr "Nenhuma informação de peça correspondente encontrada" +msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" -msgstr "Nenhuma peça de fornecedor correspondente encontrada" +msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" -msgstr "Múltiplas peças de fornecedores correspondentes encontradas" +msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" -msgstr "Peça de fornecedor correspondente" +msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" -msgstr "Item do pedido já foi recebido" +msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" -msgstr "Nenhuma correspondência para o código de barras do fornecedor" +msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" -msgstr "Diversos itens de linha correspondentes encontrados" +msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" -msgstr "Nenhum item de linha correspondente encontrado" +msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" -msgstr "Código de barras não corresponde a item de estoque válido" +msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" -msgstr "Item do estoque não corresponde ao item de linha" +msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" -msgstr "Estoque insuficiente disponível" +msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" -msgstr "Item de estoque atribuído para pedido de venda" +msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" -msgstr "Não há informação suficiente" +msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" -msgstr "Múltiplas peças de fornecedores correspondentes encontradas para o código de barras" +msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" -msgstr "Encontrados vários pedidos de compra correspondentes a '{order}'" +msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" -msgstr "Nenhum pedido de compra correspondente a '{order}' encontrado" +msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" -msgstr "Pedido de compra não corresponde ao fornecedor" +msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" -msgstr "Falha ao encontrar item de linha pendente para a parte do fornecedor" +msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" -msgstr "Mais informações necessárias para receber o item de linha" +msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" -msgstr "Item de linha do pedido de compra recebido" +msgstr "" #: plugin/base/barcodes/serializers.py:21 msgid "Scanned barcode data" -msgstr "Dados do código de barras lido" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" msgstr "" -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" -msgstr "Pedido de compra para alocar itens contra" +msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" -msgstr "O pedido de compra não está pendente" +msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" -msgstr "Pedido de compra para receber itens contra" +msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" -msgstr "O pedido de compra não foi realizado" +msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" -msgstr "Localização para receber itens" +msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" -msgstr "Não é possível selecionar um local estrutural" +msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" -msgstr "Pedido de compra para alocar itens contra" +msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" -msgstr "O pedido de venda não está pendente" +msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" -msgstr "Item de linha do pedido de venda para alocar itens contra" +msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" -msgstr "Envio do pedido de venda para alocar itens contra" +msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" -msgstr "O envio já foi entregue" +msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" -msgstr "Quantidade a alocar" +msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" -msgstr "Impressão de etiqueta falhou" +msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" -msgstr "Códigos de Barras InvenTree" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" -msgstr "Fornece suporte nativo para códigos de barras" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 msgid "InvenTree contributors" -msgstr "Contribuidores do InvenTree" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" -msgstr "Notificações do InvenTree" +msgstr "" #: plugin/builtin/integration/core_notifications.py:36 msgid "Integrated outgoing notification methods" -msgstr "Métodos de envio de notificação integrados" +msgstr "" #: plugin/builtin/integration/core_notifications.py:41 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "Habilitar notificações por email" +msgstr "" #: plugin/builtin/integration/core_notifications.py:42 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "Permitir enviar emails para notificações de eventos" +msgstr "" #: plugin/builtin/integration/core_notifications.py:47 msgid "Enable slack notifications" -msgstr "Habilitar notificações por Slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:49 msgid "Allow sending of slack channel messages for event notifications" -msgstr "Permitir envio de notificações de eventos pelo canal de mensagens do slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:55 msgid "Slack incoming webhook url" -msgstr "Link do gancho de entrada do Slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:56 msgid "URL that is used to send messages to a slack channel" -msgstr "URL usada para enviar mensagens para um canal do Slack" +msgstr "" #: plugin/builtin/integration/core_notifications.py:164 msgid "Open link" -msgstr "Abrir link" +msgstr "" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" -msgstr "Câmbio de Moeda InvenTree" +msgstr "" #: plugin/builtin/integration/currency_exchange.py:23 msgid "Default currency exchange integration" -msgstr "Integração padrão de câmbio de moeda" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" -msgstr "Impressora de etiquetas PDF do InvenTree" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" -msgstr "Providenciar suporte nativo para impressão de etiquetas em PDF" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" -msgstr "Modo de depuração" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "Ativar o modo de depuração - retorna HTML bruto em vez de PDF" +msgstr "" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" @@ -8794,105 +8099,105 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" #: plugin/builtin/labels/label_sheet.py:29 msgid "Page size for the label sheet" -msgstr "Tamanho da página para folha de etiqueta" +msgstr "" #: plugin/builtin/labels/label_sheet.py:34 msgid "Skip Labels" -msgstr "Pular Etiquetas" +msgstr "" #: plugin/builtin/labels/label_sheet.py:35 msgid "Skip this number of labels when printing label sheets" -msgstr "Ignorar este número de etiquetas quando imprimir folhas de etiquetas" +msgstr "" #: plugin/builtin/labels/label_sheet.py:41 msgid "Border" -msgstr "Borda" +msgstr "" #: plugin/builtin/labels/label_sheet.py:42 msgid "Print a border around each label" -msgstr "Imprima uma borda em torno de cada etiqueta" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" -msgstr "Paisagem" +msgstr "" #: plugin/builtin/labels/label_sheet.py:48 msgid "Print the label sheet in landscape mode" -msgstr "Imprimir a folha de etiqueta no modo paisagem" +msgstr "" #: plugin/builtin/labels/label_sheet.py:60 msgid "InvenTree Label Sheet Printer" -msgstr "Impressora de folhas de etiqueta do InvenTree" +msgstr "" #: plugin/builtin/labels/label_sheet.py:61 msgid "Arrays multiple labels onto a single sheet" -msgstr "Matriz várias etiquetas em uma única folha" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" -msgstr "A etiqueta é muito grande para tamanho de página" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" -msgstr "Nenhuma etiqueta foi gerada" +msgstr "" #: plugin/builtin/suppliers/digikey.py:16 msgid "Supplier Integration - DigiKey" -msgstr "Integração de fornecedor - DigiKey" +msgstr "" #: plugin/builtin/suppliers/digikey.py:17 msgid "Provides support for scanning DigiKey barcodes" -msgstr "Fornece suporte para escanear códigos de barras DigiKey" +msgstr "" #: plugin/builtin/suppliers/digikey.py:26 msgid "The Supplier which acts as 'DigiKey'" -msgstr "O fornecedor que atua como 'DigiKey'" +msgstr "" #: plugin/builtin/suppliers/lcsc.py:18 msgid "Supplier Integration - LCSC" -msgstr "Integração de fornecedor - LCSC" +msgstr "" #: plugin/builtin/suppliers/lcsc.py:19 msgid "Provides support for scanning LCSC barcodes" -msgstr "Fornece suporte para escanear códigos de barras LCSC" +msgstr "" #: plugin/builtin/suppliers/lcsc.py:27 msgid "The Supplier which acts as 'LCSC'" -msgstr "O fornecedor que atua como 'LCSC'" +msgstr "" #: plugin/builtin/suppliers/mouser.py:16 msgid "Supplier Integration - Mouser" -msgstr "Integração de fornecedor - Mouser" +msgstr "" #: plugin/builtin/suppliers/mouser.py:17 msgid "Provides support for scanning Mouser barcodes" -msgstr "Fornece suporte para escanear códigos de barras Mouser" +msgstr "" #: plugin/builtin/suppliers/mouser.py:25 msgid "The Supplier which acts as 'Mouser'" -msgstr "O fornecedor que atua como 'Mouser'" +msgstr "" #: plugin/builtin/suppliers/tme.py:18 msgid "Supplier Integration - TME" -msgstr "Integração de fornecedor - TME" +msgstr "" #: plugin/builtin/suppliers/tme.py:19 msgid "Provides support for scanning TME barcodes" -msgstr "Fornece suporte para escanear códigos de barras TME" +msgstr "" #: plugin/builtin/suppliers/tme.py:27 msgid "The Supplier which acts as 'TME'" -msgstr "O fornecedor que atua como 'TME'" +msgstr "" #: plugin/installer.py:194 plugin/installer.py:282 msgid "Only staff users can administer plugins" @@ -8904,12 +8209,12 @@ msgstr "" #: plugin/installer.py:248 msgid "Installed plugin successfully" -msgstr "Plugin instalado com sucesso" +msgstr "" #: plugin/installer.py:254 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "Plugin instalado na {path}" +msgstr "" #: plugin/installer.py:273 msgid "Plugin was not found in registry" @@ -8935,141 +8240,140 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" -msgstr "Configuração de Extensão" +msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" -msgstr "Configuração de Extensões" +msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" -msgstr "Chave" +msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" -msgstr "Chave da extensão" +msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" -msgstr "Nome da Extensão" +msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" -msgstr "Nome do Pacote" +msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" -msgstr "O plug-in está ativo" +msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" -msgstr "Instalado" +msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" -msgstr "Plug-in de exemplo" +msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" -msgstr "Plugin embutido" +msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "Extensões" +msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" -msgstr "Método" +msgstr "" #: plugin/plugin.py:270 msgid "No author found" -msgstr "Nenhum autor encontrado" +msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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}" +msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "Extensão requer pelo menos a versão {v}" +msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "Extensão requer no máximo a versão {v}" +msgstr "" #: plugin/samples/integration/sample.py:52 msgid "Enable PO" -msgstr "Ativar PO" +msgstr "" #: plugin/samples/integration/sample.py:53 msgid "Enable PO functionality in InvenTree interface" -msgstr "Ativar a funcionalidade PO na interface InvenTree" +msgstr "" #: plugin/samples/integration/sample.py:58 msgid "API Key" -msgstr "Chave API" +msgstr "" #: plugin/samples/integration/sample.py:59 msgid "Key required for accessing external API" -msgstr "Chave necessária para acesso à API externa" +msgstr "" #: plugin/samples/integration/sample.py:63 msgid "Numerical" -msgstr "Numérico" +msgstr "" #: plugin/samples/integration/sample.py:64 msgid "A numerical setting" -msgstr "Uma configuração numérica" +msgstr "" #: plugin/samples/integration/sample.py:69 msgid "Choice Setting" -msgstr "Configurações de Escolha" +msgstr "" #: plugin/samples/integration/sample.py:70 msgid "A setting with multiple choices" -msgstr "Uma configuração com várias escolhas" +msgstr "" #: plugin/samples/integration/sample_currency_exchange.py:15 msgid "Sample currency exchange plugin" -msgstr "Plugin de Câmbio de exemplo" +msgstr "" #: plugin/samples/integration/sample_currency_exchange.py:18 msgid "InvenTree Contributors" -msgstr "Contribuidores do InvenTree" +msgstr "" #: plugin/serializers.py:81 msgid "Source URL" -msgstr "URL de origem" +msgstr "" #: plugin/serializers.py:83 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "Fonte do pacote — este pode ser um registro personalizado ou um caminho de VCS" +msgstr "" #: plugin/serializers.py:92 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "Nome para o Pacote da Extensão — também pode conter um indicador de versão" +msgstr "" #: plugin/serializers.py:99 #: templates/InvenTree/settings/plugin_settings.html:42 #: templates/js/translated/plugin.js:86 msgid "Version" -msgstr "Versão" +msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." @@ -9077,1782 +8381,1510 @@ msgstr "" #: plugin/serializers.py:106 msgid "Confirm plugin installation" -msgstr "Confirmar instalação da extensão" +msgstr "" #: plugin/serializers.py:108 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "Isto instalará a extensão agora na instância atual. A instância irá entrar em manutenção." +msgstr "" #: plugin/serializers.py:121 msgid "Installation not confirmed" -msgstr "Instalação não confirmada" +msgstr "" #: plugin/serializers.py:123 msgid "Either packagename of URL must be provided" -msgstr "Qualquer nome do pacote URL deve ser fornecido" +msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" -msgstr "Recarregamento completo" +msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" -msgstr "Realize um recarregamento completo do registro de plugin" +msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" -msgstr "Forçar recarregamento" +msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "Forçar um recarregamento do registro do plugin, mesmo que já esteja carregado" +msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" -msgstr "Coletar plugins" +msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" -msgstr "Colete plugins e adicione-os ao registro" +msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" -msgstr "Ativar Extensão" +msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" -msgstr "Ativar esta extensão" +msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" -msgstr "Nenhum objeto válido fornecido para o modelo" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "Itens" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" msgstr "" -#: report/api.py:233 -msgid "Invalid label dimensions" +#: report/api.py:197 report/api.py:234 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" +#: report/api.py:319 +msgid "Test report" msgstr "" -#: report/api.py:283 -msgid "Error printing label" -msgstr "Erro ao imprimir etiqueta" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "Arquivo modelo '{template}' perdido ou não existe" - -#: report/helpers.py:43 +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" -msgstr "Ofício" +msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" -msgstr "Carta" - -#: report/models.py:118 -msgid "Template file with this name already exists" msgstr "" -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" -msgstr "Nome do modelo" - -#: report/models.py:156 -msgid "Template description" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Padrão de Nome de Arquivo" - -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:204 +msgid "Page size for PDF reports" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "Filtros" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:210 +msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:302 -msgid "Page size for PDF reports" -msgstr "Tamanho da página para relatórios PDF" - -#: report/models.py:308 -msgid "Render report in landscape orientation" -msgstr "Renderizar relatório em orientação paisagem" - -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Largura [mm]" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Largura da etiqueta, em mm" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Altura [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Altura da Etiqueta, em mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "Progresso" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" -msgstr "Recorte" +msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" -msgstr "Relatar arquivo de recorte" +msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" -msgstr "Descrição do arquivo de recorte" - -#: report/models.py:528 -msgid "Asset" -msgstr "Patrimônio" - -#: report/models.py:529 -msgid "Report asset file" -msgstr "Reportar arquivo de ativos" - -#: report/models.py:536 -msgid "Asset file description" -msgstr "Descrição do arquivo de ativos" - -#: report/serializers.py:91 -msgid "Select report template" msgstr "" -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" +#: report/models.py:714 +msgid "Asset file with this name already exists" msgstr "" -#: report/serializers.py:132 -msgid "Select label template" -msgstr "Selecione o modelo de etiqueta" - -#: report/serializers.py:140 -msgid "Printing Plugin" +#: report/models.py:722 +msgid "Asset" msgstr "" -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" +#: report/models.py:723 +msgid "Report asset file" msgstr "" -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "Código QR" +#: report/models.py:730 +msgid "Asset file description" +msgstr "" -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "Código QR" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "Materiais necessários" +msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" -msgstr "Necessário para" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" -msgstr "Fornecedor foi excluído" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" -msgstr "Preço unitário" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" -msgstr "Extra Itens de Linha" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" -msgstr "Estoque de itens do local" +msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "Relatório Teste do Item em Estoque" +msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "Resultados do teste" +msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" -msgstr "Teste" +msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" -msgstr "Resultado" +msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "Aprovado" +msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" -msgstr "Não Aprovado" +msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" -msgstr "Sem resultado (obrigatório)" +msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" -msgstr "Nenhum resultado" +msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" -msgstr "Itens instalados" +msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" -msgstr "Série" +msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" -msgstr "O arquivo não existe" +msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" -msgstr "Arquivo de imagem não encontrado" +msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" -msgstr "Tag part_image necessita de uma instância de Peça" +msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" -msgstr "Tag company_image necessita de uma instância de Empresa" +msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" -msgstr "ID do local" +msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" -msgstr "Caminho do local" +msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" -msgstr "ID do item estoque" +msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" -msgstr "Código da situação" +msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" -msgstr "Número da Peça do Fornecedor" - -#: stock/admin.py:184 -msgid "Supplier Part SKU" msgstr "" -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" -msgstr "ID do Fornecedor" +msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:196 msgid "Customer ID" -msgstr "ID Cliente" +msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" -msgstr "Instalado em" +msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" -msgstr "ID da Produção" +msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" -msgstr "ID do pedido de venda" +msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" -msgstr "ID do pedido de compra" +msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" -msgstr "Revisão Necessária" +msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" -msgstr "Excluir quando esgotado" +msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" -msgstr "Data de validade" - -#: stock/api.py:310 -msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" +#: stock/api.py:284 +msgid "Filter by location depth" msgstr "" -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" -msgstr "Localização externa" +msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" -msgstr "Árvore de Peças" +msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" -msgstr "Data de validade antes" +msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" -msgstr "Data de validade depois" +msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" -msgstr "Inativo" +msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" -msgstr "Quantidade obrigatória" +msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" -msgstr "Uma peça válida deve ser fornecida" +msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" -msgstr "A peça do fornecedor informado não existe" +msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 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" +msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 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" +msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" -msgstr "Tipo de Local de estoque" +msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" -msgstr "Tipos de Locais de estoque" +msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 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)" +msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" -msgstr "Localização do estoque" +msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" -msgstr "Locais de estoque" +msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" -msgstr "Responsavel" +msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" -msgstr "Selecionar Responsável" +msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 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." +msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" -msgstr "Externo" +msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" -msgstr "Esta é uma localização de estoque externo" +msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" -msgstr "Tipo de localização" +msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" -msgstr "Tipo de Local de Estoque para esta locação" +msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 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!" +msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 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!" +msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" -msgstr "Item de estoque não pode ser criado para peças virtuais" +msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, 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}" +msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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" +msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 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" +msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" -msgstr "O item não pode pertencer a si mesmo" +msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 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" +msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 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" +msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" -msgstr "Item de Estoque Parental" +msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" -msgstr "Peça base" +msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" -msgstr "Selecione uma peça do fornecedor correspondente para este item de estoque" +msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" -msgstr "Onde está localizado este item de estoque?" +msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" -msgstr "Embalagem deste item de estoque está armazenado em" +msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" -msgstr "Este item está instalado em outro item?" +msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" -msgstr "Número de série para este item" +msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" -msgstr "Código do lote para este item de estoque" +msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" -msgstr "Quantidade de Estoque" +msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" -msgstr "Produção de Origem" +msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" -msgstr "Produção para este item de estoque" +msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" -msgstr "Consumido por" +msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" -msgstr "Pedido de produção que consumiu este item de estoque" +msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" -msgstr "Pedido de compra Fonte" +msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" -msgstr "Pedido de Compra para este item de estoque" +msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" -msgstr "Destino do Pedido de Venda" +msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 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" +msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" -msgstr "Excluir quando esgotado" +msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" -msgstr "Excluir este item de estoque quando o estoque for esgotado" +msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" -msgstr "Preço de compra unitário único no momento da compra" +msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" -msgstr "Convertido para peça" +msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" -msgstr "Peça não está definida como rastreável" +msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" -msgstr "Quantidade deve ser inteira" +msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, 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})" +msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" -msgstr "Números de série devem ser uma lista de números inteiros" +msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" -msgstr "A quantidade não corresponde aos números de série" +msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" -msgstr "Números de série já existem" +msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" -msgstr "Item em estoque foi reservado para um pedido" +msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" -msgstr "Item em estoque está instalado em outro item" +msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" -msgstr "item em estoque contem outro(s) items" +msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" -msgstr "Item em estoque foi reservado para outro cliente" +msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" -msgstr "Item no estoque está em produção no momento" +msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" -msgstr "Itens de série não podem ser mesclados" +msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" -msgstr "Item de estoque duplicado" +msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" -msgstr "Itens de estoque devem se referir à mesma peça" +msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" -msgstr "Itens de estoque devem se referir à mesma peça do fornecedor" +msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" -msgstr "Códigos de estado do estoque devem corresponder" +msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" -msgstr "Observações de entrada" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" -msgstr "Deve-se fornecer o valor desse teste" +msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" -msgstr "O anexo deve ser enviado para este teste" - -#: stock/models.py:2459 -msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" -msgstr "Resultado do teste" +msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" -msgstr "Valor da saída do teste" +msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" -msgstr "Anexo do resultado do teste" +msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" -msgstr "Notas do teste" +msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" -msgstr "Número de série é muito grande" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Item Primário" - -#: stock/serializers.py:453 -msgid "Parent stock item" msgstr "" -#: stock/serializers.py:472 +#: stock/serializers.py:282 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:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Expirado" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Itens Filhos" - -#: stock/serializers.py:606 -msgid "Tracking Items" msgstr "" -#: stock/serializers.py:612 +#: stock/serializers.py:402 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:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" msgstr "" -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" -msgstr "Insira o número de itens de estoque para serializar" +msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, 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})" +msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" -msgstr "Inserir número de série para novos itens" +msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" -msgstr "Local de destino do estoque" +msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" -msgstr "Campo opcional de notas" +msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 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" +msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" -msgstr "Selecione o item de estoque para instalar" +msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" -msgstr "Quantidade a Instalar" +msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" -msgstr "Insira a quantidade de itens a instalar" +msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" -msgstr "Adicionar nota de transação (opcional)" +msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" -msgstr "A quantidade para instalar deve ser pelo menos 1" +msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" -msgstr "Item de estoque indisponível" +msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" -msgstr "Peça selecionada não está na Lista de Materiais" +msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" -msgstr "Quantidade a instalar não deve exceder a quantidade disponível" +msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" -msgstr "Local de destino para o item desinstalado" - -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " msgstr "" -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" -msgstr "Selecione peça para converter o item de estoque em" +msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" -msgstr "Peça selecionada não é uma opção válida para conversão" +msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 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" +msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" -msgstr "Local de destino para item retornado" +msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" -msgstr "Selecionar itens de estoque para mudar estados" +msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" -msgstr "Nenhum item de estoque selecionado" +msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" -msgstr "Sub-locais" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" -msgstr "Parte deve ser comercializável" +msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" -msgstr "Item é alocado para um pedido de venda" +msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" -msgstr "Item está alocado a um pedido de produção" +msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" -msgstr "Cliente para atribuir itens de estoque" +msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" -msgstr "A empresa selecionada não é um cliente" +msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" -msgstr "Nodas atribuídas a estoque" +msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" -msgstr "Uma lista de item de estoque deve ser providenciada" +msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" -msgstr "Notas de fusão de estoque" +msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" -msgstr "Permitir fornecedores divergentes" +msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes" +msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" -msgstr "Permitir estado incompatível" +msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" -msgstr "Permitir a fusão de itens de estoque com estado diferentes" +msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" -msgstr "Ao menos dois itens de estoque devem ser providenciados" +msgstr "" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 msgid "No Change" msgstr "" -#: stock/serializers.py:1551 +#: stock/serializers.py:1322 msgid "StockItem primary key value" -msgstr "Valor da chave primária do Item Estoque" +msgstr "" -#: stock/serializers.py:1570 +#: stock/serializers.py:1341 msgid "Stock item status code" -msgstr "Código de estado do item estoque" +msgstr "" -#: stock/serializers.py:1598 +#: stock/serializers.py:1369 msgid "Stock transaction notes" -msgstr "Notas da transação de estoque" - -#: stock/status_codes.py:11 -msgid "OK" msgstr "" -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Necessita de atenção" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Danificado" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Destruído" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Rejeitado" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Em quarentena" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Entrada de rastreamento de estoque antiga" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Item de estoque criado" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Item de estoque editado" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Número de série atribuído" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Estoque contado" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Estoque adicionado manualmente" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Estoque removido manualmente" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Local alterado" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Estoque atualizado" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Instalado na montagem" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Removido da montagem" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Instalado componente do Item" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Removido componente do Item" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Separado do Item Paternal" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Separar o Item filho" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Itens de estoque mesclados" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Convertido para variável" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Criação dos pedidos de produção criado" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Criação do pedido de produção completado" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Saída do pedido de produção rejeitada" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Usado no pedido de produção" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Enviado contra o Pedido de Venda" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Recebido referente ao Pedido de Compra" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Devolvido contra Pedido de Retorno" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Enviado ao cliente" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Devolvido pelo cliente" - #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" -msgstr "Informações de Rastrrio de Estoque" +msgstr "" #: stock/templates/stock/item.html:63 msgid "Child Stock Items" -msgstr "Itens de Estoque Filhos" +msgstr "" #: stock/templates/stock/item.html:72 msgid "This stock item does not have any child items" -msgstr "Este item de estoque não possuí nenhum filho" +msgstr "" #: stock/templates/stock/item.html:81 #: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" -msgstr "Dados de teste" +msgstr "" #: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 msgid "Test Report" -msgstr "Relatório do teste" +msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" -msgstr "Excluir dados de teste" +msgstr "" #: stock/templates/stock/item.html:93 msgid "Add Test Data" -msgstr "Adicionar dados de teste" +msgstr "" #: stock/templates/stock/item.html:125 msgid "Stock Item Notes" -msgstr "Notas de Item Estoque" +msgstr "" #: stock/templates/stock/item.html:140 msgid "Installed Stock Items" -msgstr "Itens de Estoque Instalados" +msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" -msgstr "Instalar Item de Estoque" +msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" -msgstr "Excluir todos os resultados de teste deste item de estoque" +msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" -msgstr "Adicionar Resultado de Teste" +msgstr "" #: stock/templates/stock/item_base.html:33 msgid "Locate stock item" -msgstr "Localizar item de estoque" +msgstr "" #: stock/templates/stock/item_base.html:51 msgid "Scan to Location" -msgstr "Escanear a Localização" +msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" -msgstr "Ações de Impressão" +msgstr "" #: stock/templates/stock/item_base.html:75 msgid "Stock adjustment actions" -msgstr "Ações de ajuste de estoque" +msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" -msgstr "Contagem de estoque" +msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" -msgstr "Adicionar estoque" +msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" -msgstr "Remover estoque" +msgstr "" #: stock/templates/stock/item_base.html:85 msgid "Serialize stock" -msgstr "Serializar estoque" +msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" -msgstr "Transferir estoque" +msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" -msgstr "Disponibilizar para o cliente" +msgstr "" #: stock/templates/stock/item_base.html:94 msgid "Return to stock" -msgstr "Devolver ao estoque" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall stock item" -msgstr "Desinstalar o item do estoque" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall" -msgstr "Desinstalar" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install stock item" -msgstr "Instalar item do estoque" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install" -msgstr "Instalar" +msgstr "" #: stock/templates/stock/item_base.html:115 msgid "Convert to variant" -msgstr "Converter em variante" +msgstr "" #: stock/templates/stock/item_base.html:118 msgid "Duplicate stock item" -msgstr "Duplicar item" +msgstr "" #: stock/templates/stock/item_base.html:120 msgid "Edit stock item" -msgstr "Editar item de estoque" +msgstr "" #: stock/templates/stock/item_base.html:123 msgid "Delete stock item" -msgstr "Excluir item de estoque" +msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" -msgstr "Produção" +msgstr "" + +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" -msgstr "Nenhum fabricante definido" +msgstr "" #: stock/templates/stock/item_base.html:251 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "Você não está autorizado a editar esse item." +msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" -msgstr "Somente leitura" +msgstr "" #: stock/templates/stock/item_base.html:265 msgid "This stock item is unavailable" -msgstr "Este item não está disponível no estoque" +msgstr "" #: stock/templates/stock/item_base.html:271 msgid "This stock item is in production and cannot be edited." -msgstr "Este item de estoque está em produção e não pode ser editado." +msgstr "" #: stock/templates/stock/item_base.html:272 msgid "Edit the stock item from the build view." -msgstr "Edite este item usando o formulário de construçao." +msgstr "" #: stock/templates/stock/item_base.html:287 msgid "This stock item is allocated to Sales Order" -msgstr "Este item de estoque está alocado a um pedido de venda" +msgstr "" #: stock/templates/stock/item_base.html:295 msgid "This stock item is allocated to Build Order" -msgstr "Este item de estoque está alocado a um pedido de produção" +msgstr "" #: stock/templates/stock/item_base.html:311 msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" -msgstr "Este item de estoque é serializado. Tem um único número de série e a quantidade não pode ser ajustada" +msgstr "" #: stock/templates/stock/item_base.html:317 msgid "previous page" -msgstr "página anterior" +msgstr "" #: stock/templates/stock/item_base.html:317 msgid "Navigate to previous serial number" -msgstr "Navegar para o número de série anterior" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "next page" -msgstr "próxima página" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "Navigate to next serial number" -msgstr "Navegar para o próximo número de série" +msgstr "" + +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" -msgstr "Nenhum local definido" +msgstr "" #: stock/templates/stock/item_base.html:413 msgid "Tests" -msgstr "Testes" +msgstr "" #: stock/templates/stock/item_base.html:419 msgid "This stock item has not passed all required tests" -msgstr "Este item de estoque não passou todos os testes necessários" +msgstr "" #: stock/templates/stock/item_base.html:437 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "Este Item do Estoque expirou em %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "Este Item do Estoque expira em %(item.expiry_date)s" +msgstr "" #: stock/templates/stock/item_base.html:455 msgid "No stocktake performed" -msgstr "Nenhum balanço feito" +msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" -msgstr "item de estoque" +msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" -msgstr "Editar Situação do Estoque" +msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" -msgstr "QR Code do Item de Estoque" +msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" -msgstr "Vincular Código de barras ao item de estoque" +msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." -msgstr "Selecione uma das peças variantes listada abaixo." +msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" -msgstr "Atenção" +msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" -msgstr "Esta ação não pode ser facilmente desfeita" +msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" -msgstr "Converter Item de Estoque" +msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" -msgstr "Retornar ao Estoque" +msgstr "" #: stock/templates/stock/item_serialize.html:5 msgid "Create serialized items from this stock item." -msgstr "Criar itens serializados deste item de estoque." +msgstr "" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "Selecione a quantidade para serializar e números de série único." +msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" -msgstr "Fazer balanço para o estoque deste local" +msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" -msgstr "Localizar o local de estoque" +msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" -msgstr "Buscar itens de estoque neste local" +msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" -msgstr "Buscar nos Itens de Estoque" +msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" -msgstr "Buscar recipiente do estoque neste local" +msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" -msgstr "Buscar no recipiente" +msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" -msgstr "Imprimir Relatório da Localização" +msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" -msgstr "Ações de Locais" +msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" -msgstr "Editar Local" +msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" -msgstr "Excluir Local" +msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" -msgstr "Local de estoque de alto nível" +msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" -msgstr "Dono do Local" +msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "Você não está na lista de donos deste local. Este local de estoque não pode ser editado." - -#: stock/templates/stock/location.html:173 -msgid "Location Type" msgstr "" -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" -msgstr "Criar novo local de estoque" +msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" -msgstr "Novo local" +msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" -msgstr "local de estoque" +msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" -msgstr "Escaneado o recipiente de estoque neste local" +msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" -msgstr "Código QR do Local de Estoque" +msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" -msgstr "Ligar Código de barras ao Local de Estoque" +msgstr "" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." -msgstr "Carregando..." +msgstr "" #: stock/templates/stock/stock_sidebar.html:5 msgid "Stock Tracking" -msgstr "Rastreamento de estoque" +msgstr "" #: stock/templates/stock/stock_sidebar.html:8 msgid "Allocations" -msgstr "Alocações" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "Permissão Negada" +msgstr "" #: templates/403.html:15 msgid "You do not have permission to view this page." -msgstr "Você não tem permissão para visualizar esta página." +msgstr "" #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "Falha na Autenticação" +msgstr "" #: templates/403_csrf.html:14 msgid "You have been logged out from InvenTree." -msgstr "Você foi desconectado do InvenTree." +msgstr "" #: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 #: templates/navbar.html:150 msgid "Login" -msgstr "Iniciar sessão" +msgstr "" #: templates/404.html:6 templates/404.html:12 msgid "Page Not Found" -msgstr "Página não encontrada" +msgstr "" #: templates/404.html:15 msgid "The requested page does not exist" -msgstr "A página solicitada não existe" +msgstr "" #: templates/500.html:6 templates/500.html:12 msgid "Internal Server Error" -msgstr "Erro interno do servidor" +msgstr "" #: templates/500.html:15 #, python-format msgid "The %(inventree_title)s server raised an internal error" -msgstr "O servidor %(inventree_title)s gerou um erro interno" +msgstr "" #: templates/500.html:16 msgid "Refer to the error log in the admin interface for further details" -msgstr "Consulte o login de erro na interface admin para mais detalhes" +msgstr "" #: templates/503.html:11 templates/503.html:33 msgid "Site is in Maintenance" -msgstr "Site está em Manutenção" +msgstr "" #: templates/503.html:39 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "O site está atualmente em manutenção e estará de volta em breve!" +msgstr "" #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "Índice" +msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" -msgstr "Peças Inscritas" +msgstr "" #: templates/InvenTree/index.html:52 msgid "Subscribed Categories" -msgstr "Categorias Inscritas" +msgstr "" #: templates/InvenTree/index.html:62 msgid "Latest Parts" -msgstr "Peças Recentes" +msgstr "" #: templates/InvenTree/index.html:77 msgid "BOM Waiting Validation" -msgstr "BOM Aguardando Validação" +msgstr "" #: templates/InvenTree/index.html:106 msgid "Recently Updated" -msgstr "Atualizados Recentemente" +msgstr "" #: templates/InvenTree/index.html:134 msgid "Depleted Stock" -msgstr "Estoque Esgotado" +msgstr "" #: templates/InvenTree/index.html:148 msgid "Required for Build Orders" -msgstr "Necessário para pedidos de produção" +msgstr "" #: templates/InvenTree/index.html:156 msgid "Expired Stock" -msgstr "Estoque Expirado" +msgstr "" #: templates/InvenTree/index.html:172 msgid "Stale Stock" -msgstr "Estoque Parado" +msgstr "" #: templates/InvenTree/index.html:199 msgid "Build Orders In Progress" -msgstr "Pedido de Produção em Progresso" +msgstr "" #: templates/InvenTree/index.html:210 msgid "Overdue Build Orders" -msgstr "Pedido de Produção Vencido" +msgstr "" #: templates/InvenTree/index.html:230 msgid "Outstanding Purchase Orders" -msgstr "Pedidos de Compra Pendentes" +msgstr "" #: templates/InvenTree/index.html:241 msgid "Overdue Purchase Orders" -msgstr "Pedidos de Compra Vencidos" +msgstr "" #: templates/InvenTree/index.html:262 msgid "Outstanding Sales Orders" -msgstr "Pedidos de Venda Pendentes" +msgstr "" #: templates/InvenTree/index.html:273 msgid "Overdue Sales Orders" -msgstr "Pedidos de Venda Vencidos" +msgstr "" #: templates/InvenTree/index.html:299 msgid "InvenTree News" -msgstr "Notícias do InvenTree" +msgstr "" #: templates/InvenTree/index.html:301 msgid "Current News" -msgstr "Notícias Atuais" +msgstr "" #: templates/InvenTree/notifications/history.html:9 msgid "Notification History" -msgstr "Histórico de Notificações" +msgstr "" #: templates/InvenTree/notifications/history.html:13 #: templates/InvenTree/notifications/history.html:14 #: templates/InvenTree/notifications/notifications.html:75 msgid "Delete Notifications" -msgstr "Apagar notificações" +msgstr "" #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" -msgstr "Notificações Pendentes" +msgstr "" #: templates/InvenTree/notifications/inbox.html:13 #: templates/InvenTree/notifications/inbox.html:14 msgid "Mark all as read" -msgstr "Marcar tudo como lido" +msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 #: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 msgid "Notifications" -msgstr "Notificações" +msgstr "" #: templates/InvenTree/notifications/notifications.html:38 msgid "No unread notifications found" -msgstr "Nenhuma notificação pendente encontrada" +msgstr "" #: templates/InvenTree/notifications/notifications.html:58 msgid "No notification history found" -msgstr "Sem histórico de notificação encontrado" +msgstr "" #: templates/InvenTree/notifications/notifications.html:65 msgid "Delete all read notifications" -msgstr "Excluir todas as notificações lidas" +msgstr "" #: templates/InvenTree/notifications/notifications.html:89 #: templates/js/translated/notification.js:85 msgid "Delete Notification" -msgstr "Apagar Notificação" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" -msgstr "Caixa de entrada" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:10 msgid "History" -msgstr "Histórico" +msgstr "" #: templates/InvenTree/search.html:8 msgid "Search Results" -msgstr "Resultados da busca" +msgstr "" #: templates/InvenTree/settings/barcode.html:8 msgid "Barcode Settings" -msgstr "Definições do código de barras" +msgstr "" #: templates/InvenTree/settings/build.html:8 msgid "Build Order Settings" -msgstr "Configurações do Pedido de Produção" +msgstr "" #: templates/InvenTree/settings/category.html:7 msgid "Category Settings" -msgstr "Configurações de categoria" +msgstr "" #: templates/InvenTree/settings/global.html:8 msgid "Server Settings" -msgstr "Configurações do servidor" +msgstr "" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 msgid "Label Settings" -msgstr "Configurações de etiqueta" +msgstr "" #: templates/InvenTree/settings/login.html:8 msgid "Login Settings" -msgstr "Configurações de Acesso" +msgstr "" #: templates/InvenTree/settings/login.html:15 msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "O e-mail de saída não foi configurado. Alguns recursos de acesso e inscrição podem não funcionar corretamente!" +msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "Registrar-se" +msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" -msgstr "Início de sessão única" +msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 msgid "Settings" -msgstr "Configurações" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" @@ -10861,20 +9893,20 @@ msgstr "" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "A Base-URL para esta extensão é %(base)s." +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" -msgstr "Endereço da URL" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "Abrir em uma nova aba" +msgstr "" #: templates/InvenTree/settings/notifications.html:9 #: templates/InvenTree/settings/user_notifications.html:9 msgid "Notification Settings" -msgstr "Configurações de Notificação" +msgstr "" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -10882,439 +9914,451 @@ msgstr "" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" -msgstr "Configurações de Peça" +msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" -msgstr "Peça importada" +msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" -msgstr "Importar Peça" +msgstr "" #: templates/InvenTree/settings/part_parameters.html:20 msgid "Part Parameter Templates" -msgstr "Modelo de Parâmetro da Peça" +msgstr "" #: templates/InvenTree/settings/part_stocktake.html:7 msgid "Stocktake Settings" -msgstr "Configurações de Balanço" +msgstr "" #: templates/InvenTree/settings/part_stocktake.html:25 msgid "Stocktake Reports" -msgstr "Relatório de Balanço" +msgstr "" #: templates/InvenTree/settings/physical_units.html:8 #: templates/InvenTree/settings/sidebar.html:35 msgid "Physical Units" -msgstr "Unidades Físicas" +msgstr "" #: templates/InvenTree/settings/physical_units.html:12 msgid "Add Unit" -msgstr "Adicionar Unidade" +msgstr "" #: templates/InvenTree/settings/plugin.html:9 #: templates/InvenTree/settings/sidebar.html:64 msgid "Plugin Settings" -msgstr "Configurações da Extensão" +msgstr "" #: templates/InvenTree/settings/plugin.html:15 msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "Alterar as configurações abaixo requer que você reinicie imediatamente o servidor. Não altere isso enquanto estiver em uso." +msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" -msgstr "Extensões" +msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" -msgstr "Instalar extensão" +msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" -msgstr "Recarregar plugins" +msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" -msgstr "Extensões externos não estão ativados para esta instalação do InvenTree" +msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" -msgstr "Erro da Pilha da Extensão" +msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" -msgstr "Fase" +msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" -msgstr "Mensagem" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" -msgstr "Informações da extensões" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" -msgstr "nenhuma informação de versão fornecida" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:61 msgid "License" -msgstr "Licença" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:70 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "A informação de código é retirada do último git commit para esta extensão. Pode não refletir números de versão ou informações oficiais, mas sim o código em execução." +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:76 msgid "Package information" -msgstr "Informações do pacote" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:82 msgid "Installation method" -msgstr "Método de instalação" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:85 msgid "This plugin was installed as a package" -msgstr "Esta extensão foi instalada como um pacote" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:87 msgid "This plugin was found in a local server path" -msgstr "Esta extensão foi encontrada no caminho do servidor local" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:93 msgid "Installation path" -msgstr "Caminho de instalação" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" -msgstr "Embutido" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:101 msgid "This is a builtin plugin which cannot be disabled" -msgstr "Esse é uma extensão embutida que não pode ser desativado" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" -msgstr "Amostra" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:108 msgid "This is a sample plugin" -msgstr "Este é um plugin de exemplo" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:113 msgid "Commit Author" -msgstr "Autor do Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:117 #: templates/about.html:36 msgid "Commit Date" -msgstr "Data do commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:121 #: templates/about.html:29 msgid "Commit Hash" -msgstr "Hash do Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:125 msgid "Commit Message" -msgstr "Mensagem do Commit" +msgstr "" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" -msgstr "Configurações do Pedido de Compra" +msgstr "" #: templates/InvenTree/settings/pricing.html:7 msgid "Pricing Settings" -msgstr "Configurações de preços" +msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" -msgstr "Taxas de Câmbio" +msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" -msgstr "Atualizar agora" +msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" -msgstr "Última Atualização" +msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" -msgstr "Nunca" +msgstr "" #: templates/InvenTree/settings/project_codes.html:8 msgid "Project Code Settings" -msgstr "Configurações de código do projeto" +msgstr "" #: templates/InvenTree/settings/project_codes.html:21 #: templates/InvenTree/settings/sidebar.html:33 msgid "Project Codes" -msgstr "Códigos de Projeto" +msgstr "" #: templates/InvenTree/settings/project_codes.html:25 #: templates/InvenTree/settings/settings_staff_js.html:216 msgid "New Project Code" -msgstr "Novo Código de Projeto" +msgstr "" #: templates/InvenTree/settings/report.html:8 #: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" -msgstr "Configurações de relatórios" +msgstr "" #: templates/InvenTree/settings/returns.html:7 msgid "Return Order Settings" -msgstr "Configurações de Pedido de Devolução" +msgstr "" #: templates/InvenTree/settings/setting.html:31 msgid "No value set" -msgstr "Nenhum valor definido" +msgstr "" #: templates/InvenTree/settings/setting.html:46 msgid "Edit setting" -msgstr "Editar configurações" +msgstr "" #: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" -msgstr "Editar Configurações do Plug-in" +msgstr "" #: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" -msgstr "Editar Configurações de Notificação" +msgstr "" #: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" -msgstr "Editar Configurações Globais" +msgstr "" #: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" -msgstr "Editar Configurações de Usuário" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" -msgstr "Taxa" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" -msgstr "Excluir" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:95 msgid "Edit Custom Unit" -msgstr "Editar Unidade Personalizada" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:110 msgid "Delete Custom Unit" -msgstr "Excluir Unidade Personalizada" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:124 msgid "New Custom Unit" -msgstr "Nova Unidade Personalizada" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:140 msgid "No project codes found" -msgstr "Nenhum código de projetos encontrado" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" -msgstr "grupo" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:175 #: templates/InvenTree/settings/settings_staff_js.html:189 msgid "Edit Project Code" -msgstr "Editar Código do Projeto" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:176 #: templates/InvenTree/settings/settings_staff_js.html:203 msgid "Delete Project Code" -msgstr "Excluir Código do Projeto" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:285 msgid "No category parameter templates found" -msgstr "Nenhum modelo de parâmetro de categoria encontrado" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" -msgstr "Editar Modelo" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" -msgstr "Excluir Modelo" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:326 msgid "Edit Category Parameter Template" -msgstr "Editar Parâmetros dos Modelos de Categoria" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" -msgstr "Excluir Parâmetros dos Modelos de Categoria" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" -msgstr "Criar Modelo de Parâmetro de Categoria" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" -msgstr "Criar Modelo de Parâmetro de Peça" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" -msgstr "Nenhum tipo de local de estoque encontrado" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" -msgstr "Contagem Localizações" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" -msgstr "Editar Tipo de Localização" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" -msgstr "Apagar Tipo de localização" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" -msgstr "Apagar Tipo de Localização" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" -msgstr "Novo Tipo de localização" +msgstr "" #: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" -msgstr "Configurações de usuário" +msgstr "" #: templates/InvenTree/settings/sidebar.html:9 msgid "Account" -msgstr "Conta" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" -msgstr "Visualização" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "Página Inicial" +msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" -msgstr "Buscar" +msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:43 msgid "Reporting" -msgstr "Reportar" +msgstr "" #: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" -msgstr "Configurações globais" +msgstr "" #: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 msgid "Server" -msgstr "Servidor" +msgstr "" #: templates/InvenTree/settings/sidebar.html:41 msgid "Labels" -msgstr "Etiquetas" +msgstr "" #: templates/InvenTree/settings/sidebar.html:45 msgid "Categories" -msgstr "Categorias" +msgstr "" #: templates/InvenTree/settings/so.html:7 msgid "Sales Order Settings" -msgstr "Configurações do Pedido de Venda" +msgstr "" #: templates/InvenTree/settings/stock.html:7 msgid "Stock Settings" -msgstr "Configurações de Estoque" +msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" -msgstr "Tipos de Locais de estoque" +msgstr "" #: templates/InvenTree/settings/user.html:13 msgid "Account Settings" -msgstr "Configurações de Conta" +msgstr "" #: templates/InvenTree/settings/user.html:19 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 msgid "Change Password" -msgstr "Alterar Senha" +msgstr "" + +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" -msgstr "Os seguintes endereços de e-mail estão associados à sua conta:" +msgstr "" #: templates/InvenTree/settings/user.html:76 msgid "Verified" -msgstr "Verificado" +msgstr "" #: templates/InvenTree/settings/user.html:78 msgid "Unverified" -msgstr "Não verificado" +msgstr "" #: templates/InvenTree/settings/user.html:80 #: templates/js/translated/company.js:957 msgid "Primary" -msgstr "Principal" +msgstr "" #: templates/InvenTree/settings/user.html:86 msgid "Make Primary" -msgstr "Tornar principal" +msgstr "" #: templates/InvenTree/settings/user.html:87 msgid "Re-send Verification" -msgstr "Reenviar verificação" +msgstr "" #: templates/InvenTree/settings/user.html:96 msgid "Warning:" -msgstr "Atenção:" +msgstr "" #: templates/InvenTree/settings/user.html:97 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "Atualmente, você não tem nenhum endereço de e-mail configurado. Você deveria realmente adicionar um endereço de e-mail para receber notificações, redefinir sua senha, etc." +msgstr "" #: templates/InvenTree/settings/user.html:105 msgid "Add Email Address" -msgstr "Adicionar endereço de E-mail" +msgstr "" #: templates/InvenTree/settings/user.html:110 msgid "Add Email" -msgstr "Adicionar e-mail" +msgstr "" #: templates/InvenTree/settings/user.html:120 msgid "Multifactor" -msgstr "Multifator" +msgstr "" #: templates/InvenTree/settings/user.html:125 msgid "You have these factors available:" -msgstr "Você tem estes fatores disponíveis:" +msgstr "" #: templates/InvenTree/settings/user.html:135 msgid "TOTP" @@ -11322,441 +10366,437 @@ msgstr "" #: templates/InvenTree/settings/user.html:141 msgid "Static" -msgstr "Estático" +msgstr "" #: templates/InvenTree/settings/user.html:150 msgid "Multifactor authentication is not configured for your account" -msgstr "A autenticação de múltiplos fatores não está configurada para sua conta" +msgstr "" #: templates/InvenTree/settings/user.html:157 msgid "Change factors" -msgstr "Alterar fatores" +msgstr "" #: templates/InvenTree/settings/user.html:158 msgid "Setup multifactor" -msgstr "Configurar multifator" +msgstr "" #: templates/InvenTree/settings/user.html:160 msgid "Remove multifactor" -msgstr "Remover multifator" +msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" -msgstr "Sessões Ativas" +msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" -msgstr "Encerrar sessões ativas (exceto esta)" +msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" -msgstr "Encerrar Sessões Ativas" +msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" -msgstr "desconhecido em desconhecido" +msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" -msgstr "desconhecido" +msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" -msgstr "Endereço IP" +msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" -msgstr "Dispositivo" +msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" -msgstr "Última Atividade" +msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" -msgstr "%(time)s atrás (esta sessão)" +msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" -msgstr "%(time)s atrás" +msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" -msgstr "Você realmente deseja remover o endereço de e-mail selecionado?" +msgstr "" #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" -msgstr "Definições de Exibição" +msgstr "" #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" -msgstr "Configurações de tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:39 msgid "Select theme" -msgstr "Selecionar tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:50 msgid "Set Theme" -msgstr "Definir Tema" +msgstr "" #: templates/InvenTree/settings/user_display.html:58 msgid "Language Settings" -msgstr "Configurações de idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:67 msgid "Select language" -msgstr "Selecionar idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:83 #, python-format msgid "%(lang_translated)s%% translated" -msgstr "%(lang_translated)s%% traduzido" +msgstr "" #: templates/InvenTree/settings/user_display.html:85 msgid "No translations available" -msgstr "Não há traduções disponíveis" +msgstr "" #: templates/InvenTree/settings/user_display.html:92 msgid "Set Language" -msgstr "Definir Idioma" +msgstr "" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" -msgstr "Alguns idiomas não estão completos" +msgstr "" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficient" -msgstr "Mostrar apenas o suficiente" +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "and hidden." -msgstr "e oculto." +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "Show them too" -msgstr "Mostrar outros também" +msgstr "" #: templates/InvenTree/settings/user_display.html:106 msgid "Help the translation efforts!" -msgstr "Ajude os esforços de tradução!" +msgstr "" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "A tradução nativa do aplicativo web é contribuição da comunidade pelo crowdin. Contribuições são encorajadas e bem vindas." +msgstr "" #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "Projeto de Tradução do InvenTree" +msgstr "" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" -msgstr "Configuração da Página Inicial" +msgstr "" #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" -msgstr "Configurações de Busca" +msgstr "" #: templates/InvenTree/settings/user_sso.html:9 msgid "Single Sign On Accounts" -msgstr "Contas de Login Único" +msgstr "" #: templates/InvenTree/settings/user_sso.html:16 msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "Você pode entrar na sua conta usando qualquer uma das seguintes contas de terceiros:" +msgstr "" #: templates/InvenTree/settings/user_sso.html:52 msgid "There are no social network accounts connected to this account." -msgstr "Não há nenhuma rede social conectadas a essa conta." +msgstr "" #: templates/InvenTree/settings/user_sso.html:58 msgid "Add SSO Account" -msgstr "Adicionar conta SSO" +msgstr "" #: templates/InvenTree/settings/user_sso.html:67 msgid "Single Sign On is not enabled for this server" -msgstr "Acesso único não está habilitado para este servidor" +msgstr "" #: templates/about.html:9 msgid "InvenTree Version" -msgstr "Versão do InvenTree" +msgstr "" #: templates/about.html:14 msgid "Development Version" -msgstr "Versão de desenvolvimento" +msgstr "" #: templates/about.html:17 msgid "Up to Date" -msgstr "Atualizado" +msgstr "" #: templates/about.html:19 msgid "Update Available" -msgstr "Atualização disponível" +msgstr "" #: templates/about.html:43 msgid "Commit Branch" -msgstr "Ramo de commits" +msgstr "" #: templates/about.html:49 msgid "InvenTree Documentation" -msgstr "Documentação do InvenTree" +msgstr "" #: templates/about.html:54 msgid "API Version" -msgstr "Versão do API" +msgstr "" #: templates/about.html:59 msgid "Python Version" -msgstr "Versão do Python" +msgstr "" #: templates/about.html:64 msgid "Django Version" -msgstr "Versão Django" +msgstr "" #: templates/about.html:69 msgid "View Code on GitHub" -msgstr "Veja o código no GitHub" +msgstr "" #: templates/about.html:74 msgid "Credits" -msgstr "Créditos" +msgstr "" #: templates/about.html:79 msgid "Mobile App" -msgstr "Aplicativo Móvel" +msgstr "" #: templates/about.html:84 msgid "Submit Bug Report" -msgstr "Enviar relatório de erro" +msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" -msgstr "copiar para área de transferência" +msgstr "" #: templates/about.html:91 msgid "copy version information" -msgstr "copiar informações da versão" +msgstr "" #: templates/account/base.html:66 templates/navbar.html:17 msgid "InvenTree logo" -msgstr "Logotipo InvenTree" +msgstr "" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:9 msgid "Confirm Email Address" -msgstr "Confirmar endereço de e-mail" +msgstr "" #: templates/account/email_confirm.html:15 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "Por favor, confirme que %(email)s é um endereço de e-mail para o usuário %(user_display)s." +msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" -msgstr "Confirmar" +msgstr "" #: templates/account/email_confirm.html:29 #, python-format msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "Este link de confirmação expirou ou é inválido. Por favor, envie uma nova solicitação de confirmação de e-mail." +msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" -msgstr "Acessar" +msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" -msgstr "Não é membro?" +msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" -msgstr "Cadastre-se" +msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" -msgstr "Esqueceu a senha?" +msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" -msgstr "ou acesse com" +msgstr "" #: templates/account/logout.html:5 templates/account/logout.html:8 #: templates/account/logout.html:20 msgid "Sign Out" -msgstr "Sair" +msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "Você tem certeza que deseja sair?" +msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "Retornar ao site" +msgstr "" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "Redefinir senha" +msgstr "" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "Esqueceu sua senha? Digite seu endereço de e-mail abaixo e enviaremos um e-mail para você redefinir sua senha." +msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "Redefinir Minha Senha" +msgstr "" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "Esta função está desativada. Por favor, contate um administrador." +msgstr "" #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "Token Inválido" +msgstr "" #: templates/account/password_reset_from_key.html:11 #, python-format msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "O link de redefinição de senha era inválido, possivelmente porque já foi usado. Solicite um nova redefinição de senha." +msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "Alterar senha" +msgstr "" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." -msgstr "Sua senha foi alterada." +msgstr "" #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "Já tem uma conta? Então, por favor Entrar." +msgstr "" #: templates/account/signup.html:28 msgid "Use a SSO-provider for signup" -msgstr "Use um provedor SSO para inscrição" +msgstr "" #: templates/account/signup_closed.html:5 #: templates/account/signup_closed.html:8 msgid "Sign Up Closed" -msgstr "Registro fechado" +msgstr "" #: templates/account/signup_closed.html:10 msgid "Sign up is currently closed." -msgstr "Registro está atualmente fechado." +msgstr "" #: templates/account/signup_closed.html:15 #: templates/socialaccount/authentication_error.html:19 #: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 msgid "Return to login page" -msgstr "Voltar a página de acesso" +msgstr "" #: templates/admin_button.html:8 msgid "View in administration panel" -msgstr "Ver no Painel de Administração" +msgstr "" #: templates/allauth_2fa/authenticate.html:5 msgid "Two-Factor Authentication" -msgstr "Autenticação de dois fatores" +msgstr "" #: templates/allauth_2fa/authenticate.html:13 msgid "Authenticate" -msgstr "Autenticar" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:6 msgid "Two-Factor Authentication Backup Tokens" -msgstr "Backup de Tokens de Autenticação Dois-Fatores" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:17 msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "Os tokens de backup foram gerados, mas não são revelados aqui por razões de segurança. Pressione o botão abaixo para gerar novos." +msgstr "" #: templates/allauth_2fa/backup_tokens.html:20 msgid "No backup tokens are available. Press the button below to generate some." -msgstr "Nenhum token de backup está disponível. Pressione o botão abaixo para gerar alguns." +msgstr "" #: templates/allauth_2fa/backup_tokens.html:28 msgid "Generate Tokens" -msgstr "Gerar Tokens" +msgstr "" #: templates/allauth_2fa/remove.html:6 msgid "Disable Two-Factor Authentication" -msgstr "Desativar Autenticação de Dois Fatores" +msgstr "" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "Você tem certeza?" +msgstr "" #: templates/allauth_2fa/remove.html:17 msgid "Disable 2FA" -msgstr "Desativar A2F" +msgstr "" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "Configurar Autenticação de Dois Fatores" +msgstr "" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "Passo 1" +msgstr "" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "Escaneie o código QR abaixo com um gerador de token de sua escolha (por exemplo, Google Authenticator)." - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " msgstr "" -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "Passo 2" +msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "Insira um token gerado pelo aplicativo:" +msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" -msgstr "Verificar" +msgstr "" #: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 msgid "Add Link" -msgstr "Adicionar Link" +msgstr "" #: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 msgid "Add Attachment" -msgstr "Adicionar anexo" +msgstr "" #: templates/barcode_data.html:5 msgid "Barcode Identifier" -msgstr "Identificador de Código de Barras" +msgstr "" #: templates/base.html:103 msgid "Server Restart Required" -msgstr "Reinicialização do Servidor é Necessária" +msgstr "" #: templates/base.html:106 msgid "A configuration option has been changed which requires a server restart" -msgstr "Uma opção de configuração foi alterada, o que requer uma reinicialização do servidor" +msgstr "" #: templates/base.html:106 templates/base.html:116 msgid "Contact your system administrator for further information" -msgstr "Contate seu administrador de sistema para mais informações" +msgstr "" #: templates/base.html:113 msgid "Pending Database Migrations" -msgstr "Migrações de Banco de Dados Pendentes" +msgstr "" #: templates/base.html:116 msgid "There are pending database migrations which require attention" -msgstr "Existem migrações pendentes do banco de dados que requerem atenção" +msgstr "" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -11767,1797 +10807,1797 @@ msgstr "Existem migrações pendentes do banco de dados que requerem atenção" #: templates/email/purchase_order_received.html:9 #: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" -msgstr "Clique no link abaixo para ver este pedido" +msgstr "" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "Estoque é necessário para o pedido de produção a seguir" +msgstr "" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "O pedido de Produção %(build)s - construindo %(quantity)s x %(part)s" +msgstr "" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "Clique no link abaixo para ver este pedido de produção" +msgstr "" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "As peças a seguir estão abaixo do estoque requerido" +msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" -msgstr "Quantidade Requerida" +msgstr "" #: templates/email/build_order_required_stock.html:38 #: templates/email/low_stock_notification.html:30 msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "Você está recebendo este e-mail porque está inscrito para notificações dessa peça " +msgstr "" #: templates/email/low_stock_notification.html:9 msgid "Click on the following link to view this part" -msgstr "Clique no link abaixo para ver esta peça" +msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" -msgstr "Quantidade Mínima" +msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" -msgstr "Sem Resposta" +msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" -msgstr "Sem resposta do servidor InvenTree" +msgstr "" #: templates/js/translated/api.js:232 msgid "Error 400: Bad request" -msgstr "Erro 400: Requisição ruim" +msgstr "" #: templates/js/translated/api.js:233 msgid "API request returned error code 400" -msgstr "Solicitação de API retornou o código de erro 400" +msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" -msgstr "Erro 401: Não Autenticado" +msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" -msgstr "Credenciais de autenticação não fornecidas" +msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" -msgstr "Erro 403: Permissão Negada" +msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" -msgstr "Você não tem as permissões necessárias para acessar esta função" +msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" -msgstr "Erro 404: Recurso Não Encontrado" +msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" -msgstr "O recurso requisitado não pôde ser encontrado no servidor" +msgstr "" #: templates/js/translated/api.js:252 msgid "Error 405: Method Not Allowed" -msgstr "Erro 405: Método Não Permitido" +msgstr "" #: templates/js/translated/api.js:253 msgid "HTTP method not allowed at URL" -msgstr "Método HTTP não permitido na URL" +msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" -msgstr "Erro 408: Tempo Limite" +msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" -msgstr "Tempo limite da conexão atingido ao solicitar dados do servidor" +msgstr "" #: templates/js/translated/api.js:261 msgid "Error 503: Service Unavailable" -msgstr "Erro 503: Serviço Indisponível" +msgstr "" #: templates/js/translated/api.js:262 msgid "The server is currently unavailable" -msgstr "O servidor está atualmente indisponível" +msgstr "" #: templates/js/translated/api.js:265 msgid "Unhandled Error Code" -msgstr "Código de erro não tratado" +msgstr "" #: templates/js/translated/api.js:266 msgid "Error code" -msgstr "Código do erro" +msgstr "" #: templates/js/translated/attachment.js:114 msgid "All selected attachments will be deleted" -msgstr "Todos os anexos selecionados serão excluídos" +msgstr "" #: templates/js/translated/attachment.js:129 msgid "Delete Attachments" -msgstr "Excluir Anexos" +msgstr "" #: templates/js/translated/attachment.js:205 msgid "Delete attachments" -msgstr "Excluir anexos" +msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" -msgstr "Ações de anexos" +msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" -msgstr "Nenhum anexo encontrado" +msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" -msgstr "Editar Anexo" +msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" -msgstr "Data de Envio" +msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" -msgstr "Editar anexo" +msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" -msgstr "Apagar anexo" +msgstr "" #: templates/js/translated/barcode.js:43 msgid "Scan barcode data here using barcode scanner" -msgstr "Leia o código de barras aqui usando um leitor de código de barras" +msgstr "" #: templates/js/translated/barcode.js:45 msgid "Enter barcode data" -msgstr "Digitar informações do código de barras" +msgstr "" #: templates/js/translated/barcode.js:59 msgid "Scan barcode using connected webcam" -msgstr "Ler código de barras usando webcam conectada" +msgstr "" #: templates/js/translated/barcode.js:138 msgid "Enter optional notes for stock transfer" -msgstr "Digite notas opcionais para transferência de estoque" +msgstr "" #: templates/js/translated/barcode.js:139 msgid "Enter notes" -msgstr "Inserir anotações" +msgstr "" #: templates/js/translated/barcode.js:188 msgid "Server error" -msgstr "Erro no servidor" +msgstr "" #: templates/js/translated/barcode.js:217 msgid "Unknown response from server" -msgstr "Resposta desconhecida do servidor" +msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" -msgstr "Resposta do servidor inválida" +msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" -msgstr "Ler dados do código de barras" +msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" -msgstr "Ler Código de Barras" +msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" -msgstr "Nenhuma URL na resposta" +msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" -msgstr "Isto irá remover o link com o código de barras associado" +msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" -msgstr "Desassociar" +msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" -msgstr "Remover item de estoque" +msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" -msgstr "Escanear Itens de Estoque para Local" +msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" -msgstr "Digitalize o código de barras dos itens de estoque para fazer check-in nesta localização" +msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" -msgstr "Check-in" +msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" -msgstr "Nenhum código de barras fornecido" +msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" -msgstr "Item de estoque já escaneado" +msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" -msgstr "Item de estoque já está nesta localização" +msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" -msgstr "Item de estoque adicionado" +msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" -msgstr "Código de barras não corresponde a item de estoque válido" +msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" -msgstr "Escanear o Recipiente de Estoque em Local" +msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" -msgstr "Digitalize o código de barras do contêiner para fazer check-in para esta localização" +msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" -msgstr "Código de barras não corresponde ao local de estoque válido" +msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" -msgstr "Registrar no Local" +msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" -msgstr "Código de barras não corresponde a um local válido" +msgstr "" #: templates/js/translated/bom.js:78 msgid "Create BOM Item" -msgstr "Criar Item da BOM" +msgstr "" #: templates/js/translated/bom.js:132 msgid "Display row data" -msgstr "Mostrar dados da linha" +msgstr "" #: templates/js/translated/bom.js:188 msgid "Row Data" -msgstr "Dados da Linha" +msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" -msgstr "Fechar" +msgstr "" #: templates/js/translated/bom.js:306 msgid "Download BOM Template" -msgstr "Baixar modelo de BOM" +msgstr "" #: templates/js/translated/bom.js:351 msgid "Multi Level BOM" -msgstr "BOM Multinível" +msgstr "" #: templates/js/translated/bom.js:352 msgid "Include BOM data for subassemblies" -msgstr "Incluir dados BOM para sub-montagens" +msgstr "" #: templates/js/translated/bom.js:357 msgid "Levels" -msgstr "Níveis" +msgstr "" #: templates/js/translated/bom.js:358 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "Selecione o número máximo de níveis BOM para exportar (0= todos os níveis)" +msgstr "" #: templates/js/translated/bom.js:365 msgid "Include Alternative Parts" -msgstr "Incluir Peças Alternativas" +msgstr "" #: templates/js/translated/bom.js:366 msgid "Include alternative parts in exported BOM" -msgstr "Incluir peças alternativas na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:371 msgid "Include Parameter Data" -msgstr "Incluir Parâmetros de Dados" +msgstr "" #: templates/js/translated/bom.js:372 msgid "Include part parameter data in exported BOM" -msgstr "Incluir dados do parâmetro da peça na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:377 msgid "Include Stock Data" -msgstr "Incluir Dados do Estoque" +msgstr "" #: templates/js/translated/bom.js:378 msgid "Include part stock data in exported BOM" -msgstr "Incluir dados do estoque da peça na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:383 msgid "Include Manufacturer Data" -msgstr "Incluir Dados do Fabricante" +msgstr "" #: templates/js/translated/bom.js:384 msgid "Include part manufacturer data in exported BOM" -msgstr "Incluir dados da peça do fabricante na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:389 msgid "Include Supplier Data" -msgstr "Incluir Dodos do Fornecedor" +msgstr "" #: templates/js/translated/bom.js:390 msgid "Include part supplier data in exported BOM" -msgstr "Incluir dados da peça do fornecedor na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:395 msgid "Include Pricing Data" -msgstr "Incluir Dados de Preço" +msgstr "" #: templates/js/translated/bom.js:396 msgid "Include part pricing data in exported BOM" -msgstr "Incluir dados de preço na BOM exportada" +msgstr "" #: templates/js/translated/bom.js:591 msgid "Remove substitute part" -msgstr "Remover peça substituta" +msgstr "" #: templates/js/translated/bom.js:645 msgid "Select and add a new substitute part using the input below" -msgstr "Selecione e adicione uma nova peça substituída usando a entrada abaixo" +msgstr "" #: templates/js/translated/bom.js:656 msgid "Are you sure you wish to remove this substitute part link?" -msgstr "Tem certeza que deseja remover este link de peça substituta?" +msgstr "" #: templates/js/translated/bom.js:662 msgid "Remove Substitute Part" -msgstr "Remover Peça Substituta" +msgstr "" #: templates/js/translated/bom.js:701 msgid "Add Substitute" -msgstr "Adicionar Substituto" +msgstr "" #: templates/js/translated/bom.js:702 msgid "Edit BOM Item Substitutes" -msgstr "Editar Itens Substitutos da BOM" +msgstr "" #: templates/js/translated/bom.js:764 msgid "All selected BOM items will be deleted" -msgstr "Todos os itens selecionados da BOM serão apagados" +msgstr "" #: templates/js/translated/bom.js:780 msgid "Delete selected BOM items?" -msgstr "Apagar itens selecionados da BOM?" +msgstr "" #: templates/js/translated/bom.js:826 msgid "Delete items" -msgstr "Apagar items" +msgstr "" #: templates/js/translated/bom.js:936 msgid "Load BOM for subassembly" -msgstr "Carregar BOM para a submontagem" +msgstr "" #: templates/js/translated/bom.js:946 msgid "Substitutes Available" -msgstr "Substitutos Disponíveis" +msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" -msgstr "Estoque de variantes permitido" +msgstr "" #: templates/js/translated/bom.js:1014 msgid "Substitutes" -msgstr "Substitutos" +msgstr "" #: templates/js/translated/bom.js:1139 msgid "BOM pricing is complete" -msgstr "Preços da BOM estão completos" +msgstr "" #: templates/js/translated/bom.js:1144 msgid "BOM pricing is incomplete" -msgstr "Preços da BOM estão incompletos" +msgstr "" #: templates/js/translated/bom.js:1151 msgid "No pricing available" -msgstr "Nenhum preço disponível" +msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" -msgstr "Nenhum Estoque Disponível" +msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" -msgstr "Incluir estoque de variantes e substitutos" +msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" -msgstr "Incluir estoque de variantes" +msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" -msgstr "Incluir estoque de substitutos" +msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" -msgstr "Itens consumíveis" +msgstr "" #: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" -msgstr "Validar Item da BOM" +msgstr "" #: templates/js/translated/bom.js:1287 msgid "This line has been validated" -msgstr "Esta linha foi validada" +msgstr "" #: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" -msgstr "Editar peças substitutas" +msgstr "" #: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" -msgstr "Editar Item da BOM" +msgstr "" #: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" -msgstr "Apagar Item da BOM" +msgstr "" #: templates/js/translated/bom.js:1313 msgid "View BOM" -msgstr "Ver BOM" +msgstr "" #: templates/js/translated/bom.js:1397 msgid "No BOM items found" -msgstr "Nenhum item da BOM encontrado" +msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" -msgstr "Peça Requerida" +msgstr "" #: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" -msgstr "Herdado da BOM paternal" +msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" -msgstr "Editar Pedido de Produção" +msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" -msgstr "Criar Pedido de Produção" +msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" -msgstr "Cancelar Pedido de Produção" +msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" -msgstr "Tem certeza que deseja cancelar essa produção?" +msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" -msgstr "Itens de estoque foram alocados para este pedido de produção" +msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" -msgstr "Há saídas incompletas restantes para este pedido de produção" +msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" -msgstr "Pedido de produção está pronto para ser concluído" +msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "Este pedido de produção não pode ser concluído pois há saídas incompletas" +msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" -msgstr "Pedido de Produção está incompleto" +msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" -msgstr "Completar Pedido de Produção" +msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" -msgstr "Próximo número de série disponível" +msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" -msgstr "Último número de série" +msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" -msgstr "A Lista de Materiais (BOM) contém peças rastreáveis" +msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" -msgstr "Saída de produção deve ser gerada individualmente" +msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" -msgstr "Peças rastreáveis podem ter números de séries especificados" +msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "Digite números de série para gerar várias saídas de produção simples" +msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" -msgstr "Criar Saída de Produção" +msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" -msgstr "Alocar itens de estoque para a saída de produção" +msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" -msgstr "Desalocar estoque da saída de produção" +msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" -msgstr "Concluir saída de produção" +msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" -msgstr "Sucatear saída de produção" +msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" -msgstr "Excluir saída de produção" +msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "Tem certeza que deseja desalocar os itens de estoque selecionados desta produção?" +msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" -msgstr "Desalocar Items de Estoque" +msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" -msgstr "Selecionar Saída de Produção" +msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" -msgstr "Ao menos uma saída de produção deve ser selecionada" +msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" -msgstr "Saídas de produção selecionadas serão marcadas como completas" +msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" -msgstr "Saída" +msgstr "" #: templates/js/translated/build.js:630 msgid "Complete Build Outputs" -msgstr "Concluir Saídas de Produção" +msgstr "" #: templates/js/translated/build.js:727 msgid "Selected build outputs will be marked as scrapped" -msgstr "Saídas de produção selecionadas serão marcadas como sucatas" +msgstr "" #: templates/js/translated/build.js:729 msgid "Scrapped output are marked as rejected" -msgstr "Saídas sucateadas são marcadas como rejeitada" +msgstr "" #: templates/js/translated/build.js:730 msgid "Allocated stock items will no longer be available" -msgstr "Itens de estoque alocados não estarão mais disponíveis" +msgstr "" #: templates/js/translated/build.js:731 msgid "The completion status of the build order will not be adjusted" -msgstr "O estado de conclusão do pedido de produção não será ajustado" - -#: templates/js/translated/build.js:761 -msgid "Scrap Build Outputs" -msgstr "Sucatear Saídas de Produção" - -#: templates/js/translated/build.js:851 -msgid "Selected build outputs will be deleted" -msgstr "Saídas de produção selecionadas serão apagadas" - -#: templates/js/translated/build.js:853 -msgid "Build output data will be permanently deleted" -msgstr "Dados da saída de produção serão excluídos permanentemente" - -#: templates/js/translated/build.js:854 -msgid "Allocated stock items will be returned to stock" -msgstr "Itens de estoque alocados serão retornados ao estoque" - -#: templates/js/translated/build.js:872 -msgid "Delete Build Outputs" -msgstr "Deletar Saída de Produção" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" msgstr "" -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" +#: templates/js/translated/build.js:762 +msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:989 -msgid "No allocated stock" +#: templates/js/translated/build.js:852 +msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:1045 -msgid "Stock item" +#: templates/js/translated/build.js:854 +msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" +#: templates/js/translated/build.js:855 +msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" +#: templates/js/translated/build.js:873 +msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" -msgstr "Nenhuma alocação de pedido de produção encontrada" - -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" -msgstr "Local não especificado" +msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" -msgstr "Saídas concluídas" +msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" -msgstr "Sucatear saídas" +msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" -msgstr "Exlcuir saídas" +msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" -msgstr "saída da produção" +msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" -msgstr "saídas da produção" +msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" -msgstr "Ações da saída de produção" +msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" -msgstr "Nenhuma saída de produção ativa encontrada" +msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" -msgstr "Linhas Alocadas" +msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" -msgstr "Testes Obrigatórios" +msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" -msgstr "Selecionar Peças" +msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" -msgstr "Você deve selecionar ao menos uma peça para alocar" +msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" -msgstr "Especifique a quantidade de alocação de estoque" +msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" -msgstr "Todas as Peças Alocadas" +msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" -msgstr "Todas as peças selecionadas foram completamente alocadas" +msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" -msgstr "Selecione o local de origem (deixe em branco para tirar de todos os locais)" +msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" -msgstr "Alocar Itens de Estoque para o Pedido de Produção" +msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" -msgstr "Nenhum local de estoque correspondente" +msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" -msgstr "Nenhum item de estoque correspondente" +msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" -msgstr "Alocação Automática de Estoque" +msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "Itens de estoque serão automaticamente alocados para este pedido de produção, conforme as diretrizes fornecidas" +msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" -msgstr "Se um local for especificado o estoque será apenas alocado deste local" +msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "Se o estoque é considerado intercambiável será alocado a partir da primeira localização encontrada" +msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "Se estoque substituto é permitido será utilizado quando o estoque primário não for encontrado" +msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" -msgstr "Alocar Itens de Estoque" +msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" -msgstr "Nenhuma produção corresponde a consulta" +msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" -msgstr "Selecionar" +msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" -msgstr "Pedido de produção está atrasada" +msgstr "" + +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" -msgstr "Sem informações de usuário" +msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" -msgstr "Editar alocação de estoque" +msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" -msgstr "Excluir alocação de estoque" +msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" -msgstr "Editar Alocação" +msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" -msgstr "Remover Alocação" +msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" -msgstr "linha de produção" +msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" -msgstr "linhas de produção" +msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" -msgstr "Nenhuma linha produção encontrada" +msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" -msgstr "Peça rastreável" - -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" msgstr "" -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" -msgstr "Quantidade Unitária" +msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" -msgstr "Estoque suficiente disponível" +msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" -msgstr "Item Consumível" +msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" -msgstr "Item rastreado" - -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" msgstr "" -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" -msgstr "Estoque de produção" +msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" -msgstr "Pedir Estoque" +msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" -msgstr "Alocar Estoque" +msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" -msgstr "Remover alocação de estoque" +msgstr "" #: templates/js/translated/company.js:98 msgid "Add Manufacturer" -msgstr "Adicionar Fabricante" +msgstr "" #: templates/js/translated/company.js:111 #: templates/js/translated/company.js:213 msgid "Add Manufacturer Part" -msgstr "Adicionar Peça do Fabricante" +msgstr "" #: templates/js/translated/company.js:132 msgid "Edit Manufacturer Part" -msgstr "Editar Peça do Fabricante" +msgstr "" #: templates/js/translated/company.js:201 #: templates/js/translated/purchase_order.js:93 msgid "Add Supplier" -msgstr "Adicionar Fornecedor" +msgstr "" #: templates/js/translated/company.js:243 #: templates/js/translated/purchase_order.js:318 msgid "Add Supplier Part" -msgstr "Adicionar Peça do Fornecedor" +msgstr "" #: templates/js/translated/company.js:344 msgid "All selected supplier parts will be deleted" -msgstr "Todas as peças selecionadas do fornecedor serão apagadas" +msgstr "" #: templates/js/translated/company.js:360 msgid "Delete Supplier Parts" -msgstr "Excluir Peças do Fornecedor" +msgstr "" #: templates/js/translated/company.js:466 msgid "Add new Company" -msgstr "Adicionar nova Empresa" +msgstr "" #: templates/js/translated/company.js:546 msgid "Parts Supplied" -msgstr "Peças Fornecidas" +msgstr "" #: templates/js/translated/company.js:555 msgid "Parts Manufactured" -msgstr "Peças Fabricadas" +msgstr "" #: templates/js/translated/company.js:570 msgid "No company information found" -msgstr "Nenhuma informação da empresa encontrada" +msgstr "" #: templates/js/translated/company.js:619 msgid "Create New Contact" -msgstr "Criar Novo Contato" +msgstr "" #: templates/js/translated/company.js:635 #: templates/js/translated/company.js:758 msgid "Edit Contact" -msgstr "Editar Contato" +msgstr "" #: templates/js/translated/company.js:672 msgid "All selected contacts will be deleted" -msgstr "Todos os contatos selecionados serão apagados" +msgstr "" #: templates/js/translated/company.js:678 #: templates/js/translated/company.js:742 msgid "Role" -msgstr "Função" +msgstr "" #: templates/js/translated/company.js:686 msgid "Delete Contacts" -msgstr "Excluir Contatos" +msgstr "" #: templates/js/translated/company.js:717 msgid "No contacts found" -msgstr "Nenhum contato encontrado" +msgstr "" #: templates/js/translated/company.js:730 msgid "Phone Number" -msgstr "Número de telefone" +msgstr "" #: templates/js/translated/company.js:736 msgid "Email Address" -msgstr "Endereço de e-mail" +msgstr "" #: templates/js/translated/company.js:762 msgid "Delete Contact" -msgstr "Excluir Contato" +msgstr "" #: templates/js/translated/company.js:859 msgid "Create New Address" -msgstr "Criar Novo Endereço" +msgstr "" #: templates/js/translated/company.js:874 #: templates/js/translated/company.js:1035 msgid "Edit Address" -msgstr "Editar o Endereço" +msgstr "" #: templates/js/translated/company.js:909 msgid "All selected addresses will be deleted" -msgstr "Todos os endereços selecionados serão excluídos" +msgstr "" #: templates/js/translated/company.js:923 msgid "Delete Addresses" -msgstr "Excluir Endereço" +msgstr "" #: templates/js/translated/company.js:950 msgid "No addresses found" -msgstr "Nenhum endereço encontrado" +msgstr "" #: templates/js/translated/company.js:989 msgid "Postal city" -msgstr "Cidade Postal" +msgstr "" #: templates/js/translated/company.js:995 msgid "State/province" -msgstr "Estado/Provincia" +msgstr "" #: templates/js/translated/company.js:1007 msgid "Courier notes" -msgstr "Notas do entregador" +msgstr "" #: templates/js/translated/company.js:1013 msgid "Internal notes" -msgstr "Notas internas" +msgstr "" #: templates/js/translated/company.js:1039 msgid "Delete Address" -msgstr "Excluir Endereço" +msgstr "" #: templates/js/translated/company.js:1112 msgid "All selected manufacturer parts will be deleted" -msgstr "Todas as peças do fabricante selecionado serão excluídas" +msgstr "" #: templates/js/translated/company.js:1127 msgid "Delete Manufacturer Parts" -msgstr "Excluir Peças do Fabricante" +msgstr "" #: templates/js/translated/company.js:1161 msgid "All selected parameters will be deleted" -msgstr "Todos os parâmetros selecionados serão excluídos" +msgstr "" #: templates/js/translated/company.js:1175 msgid "Delete Parameters" -msgstr "Excluir Parâmetros" +msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" -msgstr "Pedir peças" +msgstr "" #: templates/js/translated/company.js:1208 msgid "Delete manufacturer parts" -msgstr "Apagar peças do fabricante" +msgstr "" #: templates/js/translated/company.js:1240 msgid "Manufacturer part actions" -msgstr "Ações de peça do fabricante" +msgstr "" #: templates/js/translated/company.js:1259 msgid "No manufacturer parts found" -msgstr "Nenhuma peça do fabricante encontrada" +msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" -msgstr "Modelo de peça" +msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" -msgstr "Peça montada" +msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" -msgstr "Nenhum parâmetro encontrado" +msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" -msgstr "Editar parâmetro" +msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" -msgstr "Excluir parâmetro" +msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" -msgstr "Editar Parâmetro" +msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" -msgstr "Excluir Parâmetro" +msgstr "" #: templates/js/translated/company.js:1496 msgid "Delete supplier parts" -msgstr "Excluir peças do fornecedor" +msgstr "" #: templates/js/translated/company.js:1546 msgid "No supplier parts found" -msgstr "Nenhum peça do fornecedor encontrada" +msgstr "" #: templates/js/translated/company.js:1664 msgid "Base Units" -msgstr "Unidade Base" +msgstr "" #: templates/js/translated/company.js:1694 msgid "Availability" -msgstr "Disponibilidade" +msgstr "" #: templates/js/translated/company.js:1725 msgid "Edit supplier part" -msgstr "Editar fornecedor da peça" +msgstr "" #: templates/js/translated/company.js:1726 msgid "Delete supplier part" -msgstr "Excluir peça do fornecedor" +msgstr "" #: templates/js/translated/company.js:1779 #: templates/js/translated/pricing.js:694 msgid "Delete Price Break" -msgstr "Excluir quebras de preço" +msgstr "" #: templates/js/translated/company.js:1789 #: templates/js/translated/pricing.js:712 msgid "Edit Price Break" -msgstr "Editar Quebra de Preço" +msgstr "" #: templates/js/translated/company.js:1804 msgid "No price break information found" -msgstr "Nenhuma informação de quebra de preço" +msgstr "" #: templates/js/translated/company.js:1833 msgid "Last updated" -msgstr "Última atualização" +msgstr "" #: templates/js/translated/company.js:1840 msgid "Edit price break" -msgstr "Editar quebra de preço" +msgstr "" #: templates/js/translated/company.js:1841 msgid "Delete price break" -msgstr "Excluir quebra de preço" +msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" -msgstr "verdadeiro" +msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" -msgstr "falso" +msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" -msgstr "Selecionar filtro" +msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" -msgstr "Imprimir Etiquetas" +msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" -msgstr "Imprimir Relatórios" +msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" -msgstr "Baixar dados da tabela" +msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" -msgstr "Recarregar dados da tabela" +msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" -msgstr "Adicionar novo filtro" +msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" -msgstr "Limpar todos os filtros" +msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" -msgstr "Criar filtro" +msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" -msgstr "Ação proibida" +msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" -msgstr "Operação de criação não permitida" +msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" -msgstr "Operação de atualização não permitida" +msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" -msgstr "Operação de excluir não permitida" +msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" -msgstr "Operação de visualização não permitida" +msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" -msgstr "Manter este formulário aberto" +msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" -msgstr "Insira um número válido" +msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" -msgstr "Há erros de formulário" +msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" -msgstr "Nenhum resultado encontrado" +msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" -msgstr "Buscando" +msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" -msgstr "Limpar entrada" +msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" -msgstr "Coluna de arquivos" +msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" -msgstr "Nome do Campo" +msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" -msgstr "Selecionar Colunas" +msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" -msgstr "SIM" +msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" -msgstr "NÃO" +msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" -msgstr "Verdadeiro" +msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" -msgstr "Falso" +msgstr "" #: templates/js/translated/index.js:104 msgid "No parts required for builds" -msgstr "Nenhuma parte necessária para produção" +msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" -msgstr "Selecione os Itens" +msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" -msgstr "Nenhum item selecionado para impressão" +msgstr "" + +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" -msgstr "Etiquetas enviadas à impressora" +msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" -msgstr "Cancelar" +msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" -msgstr "Enviar" +msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" -msgstr "Título do Formulário" +msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." -msgstr "Aguardando o servidor..." +msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" -msgstr "Mostrar Informação do Erro" +msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" -msgstr "Aceitar" +msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" -msgstr "Carregando dados" +msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" -msgstr "Resposta inválida do servidor" +msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" -msgstr "Dado de formulário faltando na resposta do servidor" +msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" -msgstr "Erro ao postar os dados de formulários" +msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" -msgstr "Dados de formulário faltando na resposta JSON" +msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" -msgstr "Erro 400: Requisição Ruim" +msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" -msgstr "Servidor retornou o código de erro 400" +msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" -msgstr "Erro ao pedir dados de formulário" +msgstr "" #: templates/js/translated/news.js:33 msgid "No news found" -msgstr "Nenhuma notícia encontrada" +msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" #: templates/js/translated/notification.js:52 msgid "Age" -msgstr "Idade" +msgstr "" #: templates/js/translated/notification.js:65 msgid "Notification" -msgstr "Notificação" +msgstr "" #: templates/js/translated/notification.js:224 msgid "Mark as unread" -msgstr "Marcar como não lido" +msgstr "" #: templates/js/translated/notification.js:228 msgid "Mark as read" -msgstr "Marcar como lido" +msgstr "" #: templates/js/translated/notification.js:254 msgid "No unread notifications" -msgstr "Nenhuma notificação pendente" +msgstr "" #: templates/js/translated/notification.js:296 templates/notifications.html:12 msgid "Notifications will load here" -msgstr "Notificações irão carregar aqui" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" msgstr "" -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" -msgstr "Adicionar Item de Linha Extra" +msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" -msgstr "Ordem de Exportação" +msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" -msgstr "Duplicar Linha" +msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" -msgstr "Editar Linha" +msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" -msgstr "Apagar Linha" +msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" -msgstr "Nenhum item de linha encontrado" +msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" -msgstr "Duplicar linha" +msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" -msgstr "Editar linha" +msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" -msgstr "Apagar linha" +msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" -msgstr "Atributos da Peça" +msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" -msgstr "Opções de Criação de Peça" +msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" -msgstr "Opções de Duplicação de Peça" +msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" -msgstr "Adicionar Categoria de Peça" +msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" -msgstr "Ícone (opcional) - Explorar todos os ícones disponíveis em" +msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" -msgstr "Criar Categoria de Peça" +msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" -msgstr "Criar nova categoria após esta" +msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" -msgstr "Categoria da peça criada" +msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" -msgstr "Editar Categoria da Peça" +msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" -msgstr "Você tem certeza que deseja excluir essa categoria de peça?" +msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" -msgstr "Mover para categoria parental" +msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" -msgstr "Excluir Categoria de Peça" +msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" -msgstr "Ação para peças nesta categoria" +msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" -msgstr "Ação para categorias filhas" +msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "Criar Peça" +msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "Criar outra peça após esta" +msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "Peça criada com sucesso" +msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "Editar Peça" +msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "Peça editada" +msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" -msgstr "Criar Variante da Peça" +msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" -msgstr "Peça Ativa" +msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" -msgstr "Peça não pode ser excluída enquanto estiver ativa" +msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" -msgstr "Excluir esta peça não é reversível" +msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" -msgstr "Qualquer item de estoque desta peça será excluído" +msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" -msgstr "Esta peça será removida de quaisquer Lista de Materiais (BOM)" +msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "Toda informação de fabricante e fornecedor dessa peça será excluída" +msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" -msgstr "Excluir Peça" +msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" -msgstr "Você está inscrito para receber notificações para este item" +msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" -msgstr "Você se inscreveu para notificações deste item" +msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" -msgstr "Inscreva-se para receber notificações deste item" +msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" -msgstr "Você descadastrou para notificações deste item" +msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" -msgstr "Validando a BOM irá marcar como cada linha válida" +msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" -msgstr "Validar Lista de Materiais (BOM)" +msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" -msgstr "Lista de Materiais Validada" +msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" -msgstr "Copiar Lista de Materiais (BOM)" +msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" -msgstr "Estoque baixo" +msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" -msgstr "Nenhum estoque disponível" +msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" -msgstr "Demanda" +msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" -msgstr "Unidade" +msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" -msgstr "Peça virtual" +msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" -msgstr "Peça inscrita" +msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" -msgstr "Peça vendível" +msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." -msgstr "Programar geração de um novo relatório de balanço." +msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." -msgstr "Uma vez concluído, o relatório de estoque estará disponível para baixar." +msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" -msgstr "Gerar Relatório de Balanço" +msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" -msgstr "Relatório de balanço agendado" +msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" -msgstr "Nenhuma informação de balanço disponível" +msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" -msgstr "Editar Lançamento de Balanço" +msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" -msgstr "Apagar Lançamento de Balanço" +msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" -msgstr "Nenhuma variante encontrada" +msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" -msgstr "Nenhum modelo parâmetro de peça encontrado" +msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" -msgstr "Editar Modelo de Parâmetro da Peça" +msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" -msgstr "Quaisquer parâmetros que se referencie este modelo serão excluídos" +msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" -msgstr "Excluir Modelo de Parâmetro de Peça" +msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" -msgstr "Nenhum pedido de compra encontrado" +msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" -msgstr "Este item de linha está atrasado" +msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" -msgstr "Receber item de linha" +msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" -msgstr "Excluir relação de peças" +msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" -msgstr "Excluir Relação de Peça" +msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" -msgstr "Nenhuma peça encontrada" +msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" -msgstr "Definir a categoria das peças selecionadas" +msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" -msgstr "Definir Categoria da Peça" +msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" -msgstr "Definir categoria" +msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" -msgstr "peça" +msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" -msgstr "peças" +msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" -msgstr "Nenhuma categoria" +msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" -msgstr "Visualizar como lista" +msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" -msgstr "Exibir como grade" +msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" -msgstr "Nenhuma subcategoria encontrada" +msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" -msgstr "Exibir como árvore" +msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" -msgstr "Carregar Subcategorias" +msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" -msgstr "Categoria inscrita" +msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" -msgstr "Nenhum modelo de teste corresponde à consulta" +msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" -msgstr "Este teste é definido para uma peça parental" +msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" -msgstr "Editar Modelo de Resultado de Teste" +msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" -msgstr "Excluir Modelo de Resultado de Teste" +msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" -msgstr "Nenhuma data especificada" +msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" -msgstr "Data especificada está no passado" +msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" -msgstr "Especulativo" +msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" -msgstr "Nenhuma informação de agendamento para esta peça" +msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" -msgstr "Erro ao obter informações de agendamento para esta peça" +msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" -msgstr "Quantidades de Estoque Agendadas" +msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" -msgstr "Quantidade Máxima" +msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" -msgstr "Nível Mínimo de Estoque" +msgstr "" #: templates/js/translated/plugin.js:46 msgid "No plugins found" -msgstr "Nenhum plug-in encontrado" +msgstr "" #: templates/js/translated/plugin.js:58 msgid "This plugin is no longer installed" -msgstr "Este plug-in não está mais instalado" +msgstr "" #: templates/js/translated/plugin.js:60 msgid "This plugin is active" -msgstr "Este plug-in está ativo" +msgstr "" #: templates/js/translated/plugin.js:62 msgid "This plugin is installed but not active" -msgstr "Este plug-in está instalado mas não está ativo" +msgstr "" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "Desativar Plug-in" +msgstr "" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 msgid "Enable Plugin" -msgstr "Habilitar Plug-in" +msgstr "" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "O Plug-in foi instalado" +msgstr "" #: templates/js/translated/plugin.js:177 msgid "Are you sure you want to enable this plugin?" -msgstr "Tem certeza que deseja habilitar este plug-in?" +msgstr "" #: templates/js/translated/plugin.js:181 msgid "Are you sure you want to disable this plugin?" -msgstr "Tem certeza que deseja desabilitar este plug-in?" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Enable" -msgstr "Habilitar" +msgstr "" #: templates/js/translated/plugin.js:189 msgid "Disable" -msgstr "Desabilitar" +msgstr "" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "Plug-in atualizado" +msgstr "" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" -msgstr "Erro ao buscar dados monetários" +msgstr "" #: templates/js/translated/pricing.js:321 msgid "No BOM data available" -msgstr "Nenhum dado da BOM disponível" +msgstr "" #: templates/js/translated/pricing.js:463 msgid "No supplier pricing data available" @@ -13581,15 +12621,15 @@ msgstr "" #: templates/js/translated/pricing.js:916 msgid "Sale Price History" -msgstr "Histórico de Preço de Venda" +msgstr "" #: templates/js/translated/pricing.js:1005 msgid "No variant data available" -msgstr "Nenhum dado de variante disponível" +msgstr "" #: templates/js/translated/pricing.js:1045 msgid "Variant Part" -msgstr "Peça Variante" +msgstr "" #: templates/js/translated/purchase_order.js:169 msgid "Select purchase order to duplicate" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" -msgstr "Seriais" +msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" -msgstr "Código do Pedido" +msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" -msgstr "Quantidade a Receber" +msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" -msgstr "Confirmar o recebimento dos itens" +msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" -msgstr "Receber Itens do Pedido de Compra" +msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" -msgstr "Escanar o Código de Barras do Item" +msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" -msgstr "Ler código de barras no item de entrada (não deve corresponder a nenhum item de estoque existente)" +msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" -msgstr "Dados do código de barras inválido" +msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" -msgstr "O pedido está atrasado" +msgstr "" + +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" -msgstr "Todos os Itens de Linha selecionadas serão excluídos" +msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" -msgstr "Excluir itens de linha selecionados?" +msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" -msgstr "Duplicar Item de Linha" +msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13851,53 +12894,53 @@ msgstr "" #: templates/js/translated/return_order.js:134 msgid "Create Return Order" -msgstr "Criar Pedido de Devolução" +msgstr "" #: templates/js/translated/return_order.js:149 msgid "Edit Return Order" -msgstr "Editar Pedido de Devolução" +msgstr "" #: templates/js/translated/return_order.js:169 msgid "Issue Return Order" -msgstr "Emitir Pedido de Devolução" +msgstr "" #: templates/js/translated/return_order.js:186 msgid "Are you sure you wish to cancel this Return Order?" -msgstr "Tem certeza que deseja cancelar este Pedido de Devolução?" +msgstr "" #: templates/js/translated/return_order.js:193 msgid "Cancel Return Order" -msgstr "Cancelar Pedido de Devolução" +msgstr "" #: templates/js/translated/return_order.js:218 msgid "Complete Return Order" -msgstr "Completar Pedido de Devolução" +msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" -msgstr "Nenhum pedido de devolução encontrado" +msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" -msgstr "Cliente Inválido" +msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" -msgstr "Receber Itens do Pedido de Devolução" +msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" -msgstr "Nenhum item de linha correspondente" +msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" -msgstr "Marcar item como recebido" +msgstr "" #: templates/js/translated/sales_order.js:161 msgid "Create Sales Order" -msgstr "Criar Pedido de Venda" +msgstr "" #: templates/js/translated/sales_order.js:176 msgid "Edit Sales Order" @@ -13935,166 +12978,150 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" -msgstr "Rastreamento" +msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" -msgstr "Fatura" +msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" -msgstr "Adicionar Envio" +msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" -msgstr "Alocar números de série" +msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" -msgstr "Comprar estoque" +msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" -msgstr "Calcular preço" +msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" -msgstr "Atualizar Preço Unitário" +msgstr "" #: templates/js/translated/search.js:270 msgid "No results" -msgstr "Nenhum resultado" +msgstr "" #: templates/js/translated/search.js:292 templates/search.html:25 msgid "Enter search query" -msgstr "Inserir entrada de pesquisa" +msgstr "" #: templates/js/translated/search.js:342 msgid "result" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" -msgstr "Confirmar Serialização de Estoque" +msgstr "" + +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:166 msgid "Add Location type" -msgstr "Adicionar Tipo de Localização" +msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" -msgstr "Editar Local de Estoque" +msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" -msgstr "Novo Local de Estoque" +msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" -msgstr "Inserir quantidade inicial deste item de estoque" +msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "Insira os números de série para novo estoque (ou deixe em branco)" +msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" -msgstr "Item de estoque duplicado" +msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" -msgstr "Duplicar Item de Estoque" +msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" -msgstr "Você tem certeza que deseja excluir este item de estoque?" +msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" -msgstr "Excluir Item de Estoque" +msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" -msgstr "Editar Item do Estoque" +msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" -msgstr "Transferir Estoque" +msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "Mover" +msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" -msgstr "Contar Estoque" +msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" -msgstr "Contar" +msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" -msgstr "Remover Estoque" +msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" -msgstr "Pegar" +msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" -msgstr "Adicionar Estoque" +msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" -msgstr "Adicionar" +msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" -msgstr "Excluir Estoque" +msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "Quantidade não pode ser ajustada para estoque serializado" - -#: templates/js/translated/stock.js:1152 -msgid "Specify stock quantity" -msgstr "Especifique quantidade no estoque" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" msgstr "" -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" +#: templates/js/translated/stock.js:1143 +msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" -msgstr "Selecionar Itens de Estoque" +msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" -msgstr "Selecione ao menos um item de estoque disponível" +msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" -msgstr "PASSOU" +msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" -msgstr "FALHOU" +msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" -msgstr "SEM RESULTADO" +msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" -msgstr "Passou no teste" +msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" -msgstr "Adicionar resultado de teste" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "Editar resultados de teste" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "Excluir resultado do teste" +msgstr "" -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" -msgstr "Nenhum resultado de teste encontrado" +msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" -msgstr "Data do Teste" +msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" -msgstr "Editar Resultado do Teste" +msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" -msgstr "Excluir Resultado do Teste" +msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" -msgstr "Em produção" +msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" -msgstr "Instalado em Item de Estoque" +msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" -msgstr "Atribuir para o Pedido de Venda" +msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" -msgstr "Sem local de estoque definido" +msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" -msgstr "Mudar estado do estoque" +msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" -msgstr "Mesclar estoque" +msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" -msgstr "Excluir estoque" +msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" -msgstr "itens de estoque" +msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" -msgstr "Escanear para local" +msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" -msgstr "Ações de Estoque" +msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" -msgstr "Carregar itens instalados" +msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" -msgstr "Detalhes" +msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" -msgstr "Nenhuma mudança" +msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" -msgstr "Adicionado" +msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" -msgstr "Removido" +msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" -msgstr "Nenhum item instalado" +msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "O Item de Estoque conecta a uma peça que é um BOM deste Item de Estoque" +msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" -msgstr "Incluir subcategorias" +msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" -msgstr "Inscrito" +msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" -msgstr "É Serializado" +msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" -msgstr "Número de série GTE" +msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" -msgstr "Número de série maior ou igual a" +msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" -msgstr "Número de série LTE" +msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" -msgstr "Número de série menor ou igual a" +msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" -msgstr "Número de série" +msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" -msgstr "Código do lote" +msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" -msgstr "Peças Ativas" +msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" -msgstr "Mostrar estoque de peças ativas" +msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14918,140 +13927,128 @@ msgstr "" #: templates/js/translated/tables.js:549 msgid "Hide/Show pagination" -msgstr "Ocultar/Mostrar paginação" +msgstr "" #: templates/js/translated/tables.js:555 msgid "Toggle" -msgstr "Alternar" +msgstr "" + +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" #: templates/js/translated/tables.js:561 msgid "All" -msgstr "Todos" +msgstr "" #: templates/navbar.html:45 msgid "Buy" -msgstr "Comprar" +msgstr "" #: templates/navbar.html:57 msgid "Sell" -msgstr "Vender" +msgstr "" #: templates/navbar.html:121 msgid "Show Notifications" -msgstr "Mostrar Notificações" +msgstr "" #: templates/navbar.html:124 msgid "New Notifications" -msgstr "Novas Notificações" +msgstr "" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" -msgstr "Administrador" +msgstr "" #: templates/navbar.html:148 msgid "Logout" -msgstr "Encerrar sessão" +msgstr "" #: templates/notes_buttons.html:6 templates/notes_buttons.html:7 msgid "Save" -msgstr "Salvar" +msgstr "" #: templates/notifications.html:9 msgid "Show all notifications and history" -msgstr "Mostrar todas as notificações e histórico" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" msgstr "" #: templates/qr_code.html:11 msgid "QR data not provided" -msgstr "Nenhum dado QR providenciado" +msgstr "" #: templates/registration/logged_out.html:7 msgid "You were logged out successfully." -msgstr "Você foi desconectado com sucesso." +msgstr "" #: templates/registration/logged_out.html:9 msgid "Log in again" -msgstr "Entrar novamente" +msgstr "" #: templates/search.html:9 msgid "Show full search results" -msgstr "Mostrar todos os resultados da pesquisa" +msgstr "" #: templates/search.html:12 msgid "Clear search" -msgstr "Limpar pesquisa" +msgstr "" #: templates/search.html:15 msgid "Close search menu" -msgstr "Fechar menu de pesuisa" +msgstr "" #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" -msgstr "Falha ao acessar a rede social" +msgstr "" #: templates/socialaccount/authentication_error.html:8 msgid "Account Login Failure" -msgstr "Falha ao acessar conta" +msgstr "" #: templates/socialaccount/authentication_error.html:11 msgid "An error occurred while attempting to login via your social network account." -msgstr "Ocorreu um erro ao tentar entrar com a sua conta de rede social." +msgstr "" #: templates/socialaccount/authentication_error.html:13 msgid "Contact your system administrator for further information." -msgstr "Contate seu administrador de sistema para mais informações." +msgstr "" #: templates/socialaccount/login.html:13 #, python-format msgid "Connect %(provider)s" -msgstr "Conectar %(provider)s" +msgstr "" #: templates/socialaccount/login.html:15 #, python-format msgid "You are about to connect a new third party account from %(provider)s." -msgstr "Você está prestes a conectar uma nova conta de terceiros do %(provider)s." +msgstr "" #: templates/socialaccount/login.html:17 #, python-format msgid "Sign In Via %(provider)s" -msgstr "Entrar através %(provider)s" +msgstr "" #: templates/socialaccount/login.html:19 #, python-format msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "Você está prestes a entrar utilizando uma conta de terceiros de %(provider)s." +msgstr "" #: templates/socialaccount/login.html:24 msgid "Continue" -msgstr "Continuar" +msgstr "" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" -msgstr "Provedor SSO inválido" +msgstr "" #: templates/socialaccount/login.html:31 msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "O provedor de SSO selecionado é inválido ou não foi configurado corretamente" +msgstr "" #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "Você está prestes a usar sua conta %(provider_name)s para entrar no %(site_name)s." +msgstr "" #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" @@ -15059,181 +14056,173 @@ msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 msgid "Provider has not been configured" -msgstr "O provedor não foi configurado" +msgstr "" #: templates/socialaccount/snippets/provider_list.html:35 msgid "No SSO providers have been configured" -msgstr "Nenhum provedor de SSO foi configurado" +msgstr "" #: templates/stats.html:13 msgid "Instance Name" -msgstr "Nome da Instância" +msgstr "" #: templates/stats.html:18 msgid "Database" -msgstr "Banco de Dados" +msgstr "" #: templates/stats.html:26 msgid "Server is running in debug mode" -msgstr "O servidor está executando no modo de depuração" +msgstr "" #: templates/stats.html:33 msgid "Docker Mode" -msgstr "Modo Docker" +msgstr "" #: templates/stats.html:34 msgid "Server is deployed using docker" -msgstr "O servidor está implantado usando o docker" +msgstr "" #: templates/stats.html:39 msgid "Plugin Support" -msgstr "Suporte a Extensões" +msgstr "" #: templates/stats.html:43 msgid "Plugin support enabled" -msgstr "Suporte a extensões habilitado" +msgstr "" #: templates/stats.html:45 msgid "Plugin support disabled" -msgstr "Suporte de extensão desativado" +msgstr "" #: templates/stats.html:52 msgid "Server status" -msgstr "Estado do Servidor" +msgstr "" #: templates/stats.html:55 msgid "Healthy" -msgstr "Saudável" +msgstr "" #: templates/stats.html:57 msgid "Issues detected" -msgstr "Problemas detectados" +msgstr "" #: templates/stats.html:64 msgid "Background Worker" -msgstr "Funcionário em segundo plano" +msgstr "" #: templates/stats.html:67 msgid "Background worker not running" -msgstr "Trabalhador de fundo não está em execução" +msgstr "" #: templates/stats.html:75 msgid "Email Settings" -msgstr "Configurações de Email" +msgstr "" #: templates/stats.html:78 msgid "Email settings not configured" -msgstr "Configurações de e-mail não configuradas" - -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" msgstr "" #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "Sim" +msgstr "" #: templates/yesnolabel.html:6 msgid "No" -msgstr "Não" +msgstr "" #: users/admin.py:104 msgid "Users" -msgstr "Usuários" +msgstr "" #: users/admin.py:105 msgid "Select which users are assigned to this group" -msgstr "Selecione quais usuários estão atribuídos a este grupo" +msgstr "" #: users/admin.py:249 msgid "The following users are members of multiple groups" -msgstr "Os seguintes usuários são membros de vários grupos" +msgstr "" #: users/admin.py:283 msgid "Personal info" -msgstr "Informações pessoais" +msgstr "" #: users/admin.py:285 msgid "Permissions" -msgstr "Permissões" +msgstr "" #: users/admin.py:288 msgid "Important dates" -msgstr "Datas importantes" +msgstr "" #: users/authentication.py:29 users/models.py:138 msgid "Token has been revoked" -msgstr "O token foi revogado" +msgstr "" #: users/authentication.py:32 msgid "Token has expired" -msgstr "Token expirou" +msgstr "" #: users/models.py:81 msgid "API Token" -msgstr "Token da API" +msgstr "" #: users/models.py:82 msgid "API Tokens" -msgstr "Tokens de API" +msgstr "" #: users/models.py:118 msgid "Token Name" -msgstr "Nome do Token" +msgstr "" #: users/models.py:119 msgid "Custom token name" -msgstr "Nome de token personalizado" +msgstr "" #: users/models.py:125 msgid "Token expiry date" -msgstr "Data de validade do token" +msgstr "" #: users/models.py:133 msgid "Last Seen" -msgstr "Visto pela Última Vez" +msgstr "" #: users/models.py:134 msgid "Last time the token was used" -msgstr "Última vez que o token foi usado" +msgstr "" #: users/models.py:138 msgid "Revoked" -msgstr "Revogado" +msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" -msgstr "Permissão definida" +msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" -msgstr "Grupo" +msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" -msgstr "Visualizar" +msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" -msgstr "Permissão para ver itens" +msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" -msgstr "Permissão para adicionar itens" +msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" -msgstr "Alterar" +msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" -msgstr "Permissões para editar itens" +msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" -msgstr "Permissão para excluir itens" +msgstr "" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_br/LC_MESSAGES/django.po similarity index 58% rename from src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po rename to src/backend/InvenTree/locale/pt_br/LC_MESSAGES/django.po index d8a782cbbc5a..d05d3334d3de 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_br/LC_MESSAGES/django.po @@ -1,85 +1,77 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: inventree\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" -"Last-Translator: \n" -"Language-Team: Portuguese, Brazilian\n" -"Language: pt_BR\n" +"POT-Creation-Date: 2024-01-30 05:37+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: pt-BR\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" - -#: InvenTree/api.py:269 +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: InvenTree/api.py:165 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:418 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/conversion.py:160 -#, python-brace-format -msgid "Invalid unit provided ({unit})" -msgstr "" - -#: InvenTree/conversion.py:177 +#: InvenTree/conversion.py:95 msgid "No value provided" msgstr "" -#: InvenTree/conversion.py:204 +#: InvenTree/conversion.py:128 #, python-brace-format msgid "Could not convert {original} to {unit}" msgstr "" -#: InvenTree/conversion.py:206 +#: InvenTree/conversion.py:130 msgid "Invalid quantity supplied" msgstr "" -#: InvenTree/conversion.py:220 +#: InvenTree/conversion.py:144 #, python-brace-format msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:140 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:209 InvenTree/models.py:951 build/serializers.py:437 +#: build/serializers.py:515 build/templates/build/sidebar.html:21 +#: company/models.py:826 company/templates/company/sidebar.html:37 +#: order/models.py:1261 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: part/models.py:3148 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:224 stock/models.py:2260 stock/models.py:2364 +#: stock/serializers.py:428 stock/serializers.py:581 stock/serializers.py:677 +#: stock/serializers.py:727 stock/serializers.py:1023 stock/serializers.py:1112 +#: stock/serializers.py:1269 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2197 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1516 templates/js/translated/stock.js:2398 msgid "Notes" msgstr "" @@ -92,582 +84,594 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:394 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:459 order/models.py:521 order/models.py:723 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:467 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:496 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:528 InvenTree/helpers.py:571 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:559 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:589 InvenTree/helpers.py:596 InvenTree/helpers.py:615 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:625 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:630 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:748 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:138 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:143 InvenTree/helpers_model.py:150 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:146 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:156 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:159 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:171 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:176 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:184 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:16 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:17 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:18 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:19 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:20 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:21 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:22 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:23 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:24 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:25 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:26 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:27 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:28 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:29 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:30 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:31 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:32 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 -msgid "Latvian" -msgstr "" - -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:33 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:34 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:35 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:36 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:37 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:38 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:39 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:40 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:41 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:42 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:43 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:44 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:45 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:46 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:47 msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/magic_login.py:28 +#: InvenTree/magic_login.py:27 #, python-brace-format -msgid "[{site_name}] Log in to the app" +msgid "[{site.name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:37 company/models.py:134 +#: company/templates/company/company_base.html:132 #: templates/InvenTree/settings/user.html:49 -#: templates/js/translated/company.js:677 +#: templates/js/translated/company.js:667 msgid "Email" msgstr "" -#: InvenTree/models.py:103 -msgid "Error running plugin validation" -msgstr "" - -#: InvenTree/models.py:172 +#: InvenTree/models.py:83 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:89 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:90 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:320 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:327 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:333 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:344 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:352 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:384 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:466 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:467 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:488 stock/models.py:2359 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:489 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:497 common/models.py:2857 company/models.py:147 +#: company/models.py:452 company/models.py:507 company/models.py:809 +#: order/models.py:273 order/models.py:1266 order/models.py:1665 +#: part/admin.py:55 part/models.py:902 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:223 templates/js/translated/company.js:1309 +#: templates/js/translated/company.js:1663 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2037 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:498 build/models.py:307 part/models.py:903 +#: stock/models.py:814 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:504 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:505 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:513 InvenTree/models.py:514 common/models.py:2338 +#: common/models.py:2339 common/models.py:2563 common/models.py:2564 +#: common/models.py:2809 common/models.py:2810 part/models.py:3158 +#: part/models.py:3245 part/models.py:3338 part/models.py:3366 +#: plugin/models.py:234 plugin/models.py:235 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3007 users/models.py:100 +msgid "User" +msgstr "" + +#: InvenTree/models.py:518 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:540 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:551 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:581 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:584 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:593 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:600 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:776 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:793 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:823 common/models.py:2550 common/models.py:2943 +#: common/serializers.py:365 company/models.py:606 label/models.py:115 +#: part/models.py:838 part/models.py:3575 plugin/models.py:40 +#: report/models.py:172 stock/models.py:81 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:80 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 -#: templates/js/translated/company.js:676 -#: templates/js/translated/company.js:724 -#: templates/js/translated/company.js:913 -#: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/InvenTree/settings/settings_staff_js.html:446 +#: templates/js/translated/company.js:666 +#: templates/js/translated/company.js:714 +#: templates/js/translated/company.js:903 +#: templates/js/translated/company.js:1155 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2687 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 -#: company/templates/company/company_base.html:77 +#: InvenTree/models.py:829 build/models.py:180 +#: build/templates/build/detail.html:24 common/models.py:133 +#: company/models.py:515 company/models.py:817 +#: company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:122 +#: order/models.py:259 order/models.py:1294 part/admin.py:303 part/admin.py:413 +#: part/models.py:861 part/models.py:3590 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:185 +#: report/models.py:615 report/models.py:660 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:87 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 -#: templates/js/translated/company.js:1330 -#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/build.js:2132 templates/js/translated/company.js:518 +#: templates/js/translated/company.js:1320 +#: templates/js/translated/company.js:1631 templates/js/translated/index.js:119 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2873 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1703 +#: templates/js/translated/purchase_order.js:1846 +#: templates/js/translated/purchase_order.js:2019 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1495 templates/js/translated/stock.js:2028 +#: templates/js/translated/stock.js:2719 templates/js/translated/stock.js:2802 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:830 stock/models.py:88 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:839 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:845 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2728 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:951 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:980 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:981 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:987 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:988 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1041 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1084 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1085 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:60 part/models.py:4099 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:97 company/models.py:180 +#: company/templates/company/company_base.html:106 part/models.py:2966 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:100 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:427 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:439 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 -msgid "Your account has been created." +#: InvenTree/serializers.py:456 +#, python-brace-format +msgid "Welcome to {current_site.name}" msgstr "" -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" +#: InvenTree/serializers.py:458 +#, python-brace-format +msgid "" +"Your account has been created.\n" +"\n" +"Please use the password reset function to get access (at https://{domain})." msgstr "" -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" +#: InvenTree/serializers.py:520 +msgid "Filename" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:554 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:574 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:575 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:592 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:598 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:619 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:622 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:735 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:738 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:805 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:814 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:837 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:838 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:854 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1082 msgid "Background worker check failed" msgstr "" @@ -679,1076 +683,979 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:594 +msgid "Pending" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" msgstr "" -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" msgstr "" -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" msgstr "" -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" msgstr "" -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" msgstr "" -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" +#: InvenTree/status_codes.py:43 order/models.py:1531 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" msgstr "" -#: InvenTree/views.py:434 -msgid "Password fields must match" +#: InvenTree/status_codes.py:62 +msgid "OK" msgstr "" -#: InvenTree/views.py:442 -msgid "Wrong password provided" +#: InvenTree/status_codes.py:63 +msgid "Attention needed" msgstr "" -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" +#: InvenTree/status_codes.py:64 +msgid "Damaged" msgstr "" -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" +#: InvenTree/status_codes.py:65 +msgid "Destroyed" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" +#: InvenTree/status_codes.py:66 +msgid "Rejected" msgstr "" -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" +#: InvenTree/status_codes.py:70 +msgid "Quarantined" msgstr "" -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" msgstr "" -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" msgstr "" -#: build/api.py:125 -msgid "Assigned To" +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" msgstr "" -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" +#: InvenTree/status_codes.py:100 +msgid "Stock counted" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" msgstr "" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" +#: InvenTree/status_codes.py:105 +msgid "Location changed" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" +#: InvenTree/status_codes.py:106 +msgid "Stock updated" msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" +#: InvenTree/status_codes.py:113 +msgid "Removed component item" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" msgstr "" -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" +#: InvenTree/status_codes.py:117 +msgid "Split child item" msgstr "" -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1826 +msgid "Merged stock items" msgstr "" -#: build/models.py:163 -msgid "Invalid choice for parent build" +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" msgstr "" -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" +#: InvenTree/status_codes.py:126 +msgid "Build order output created" msgstr "" -#: build/models.py:180 -msgid "Build order part cannot be changed" +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" msgstr "" -#: build/models.py:241 -msgid "Build Order Reference" +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 -#: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 -#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 -msgid "Reference" +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1732 +msgid "Consumed by build order" msgstr "" -#: build/models.py:253 -msgid "Brief description of the build (optional)" +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:177 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" msgstr "" -#: build/models.py:262 +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "" + +#: build/api.py:237 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:281 part/models.py:3977 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2516 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:579 +msgid "Consumable" +msgstr "" + +#: build/api.py:282 part/models.py:3971 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2525 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:583 +msgid "Optional" +msgstr "" + +#: build/api.py:283 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:575 +msgid "Tracked" +msgstr "" + +#: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1736 +#: templates/js/translated/build.js:2621 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:567 +msgid "Allocated" +msgstr "" + +#: build/api.py:293 company/models.py:881 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2557 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:226 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:571 +msgid "Available" +msgstr "" + +#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2863 +msgid "Build Order" +msgstr "" + +#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:194 +msgid "Build Orders" +msgstr "" + +#: build/models.py:116 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:127 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:171 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:172 order/models.py:422 order/models.py:876 +#: order/models.py:1254 order/models.py:1954 part/admin.py:416 +#: part/models.py:3992 part/templates/part/upload_bom.html:54 +#: report/templates/report/inventree_bill_of_materials_report.html:139 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 +#: templates/js/translated/build.js:2508 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2062 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 +msgid "Reference" +msgstr "" + +#: build/models.py:183 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:191 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:192 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:197 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1030 +#: order/models.py:1379 order/models.py:1511 order/models.py:1512 +#: part/models.py:388 part/models.py:2977 part/models.py:3121 +#: part/models.py:3265 part/models.py:3288 part/models.py:3309 +#: part/models.py:3331 part/models.py:3438 part/models.py:3723 +#: part/models.py:3850 part/models.py:3943 part/models.py:4304 +#: part/serializers.py:1028 part/serializers.py:1591 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:201 stock/serializers.py:611 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 -#: templates/js/translated/company.js:1116 -#: templates/js/translated/company.js:1271 -#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 -#: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/build.js:1304 templates/js/translated/build.js:1735 +#: templates/js/translated/build.js:2155 templates/js/translated/build.js:2328 +#: templates/js/translated/company.js:348 +#: templates/js/translated/company.js:1106 +#: templates/js/translated/company.js:1261 +#: templates/js/translated/company.js:1549 templates/js/translated/index.js:109 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:760 +#: templates/js/translated/purchase_order.js:1300 +#: templates/js/translated/purchase_order.js:1845 +#: templates/js/translated/purchase_order.js:2004 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1967 +#: templates/js/translated/stock.js:2828 templates/js/translated/stock.js:3061 +#: templates/js/translated/stock.js:3204 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:205 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:210 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:214 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:219 build/serializers.py:946 +#: templates/js/translated/build.js:1723 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:223 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:228 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:232 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:236 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:239 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:243 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:245 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:249 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:253 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:262 build/serializers.py:279 order/serializers.py:525 +#: stock/models.py:818 stock/serializers.py:1234 +#: templates/js/translated/purchase_order.js:1125 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:266 build/serializers.py:280 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:269 order/models.py:286 part/models.py:1062 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:273 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:274 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:277 order/models.py:480 order/models.py:1999 +#: templates/js/translated/build.js:2240 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:283 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:291 templates/js/translated/build.js:2200 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:292 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:300 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:142 +#: order/models.py:304 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1079 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2212 +#: templates/js/translated/purchase_order.js:1760 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:527 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:301 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:306 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:814 #: stock/templates/stock/item_base.html:200 -#: templates/js/translated/company.js:1019 +#: templates/js/translated/company.js:1009 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:311 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:314 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:321 common/models.py:126 order/admin.py:18 +#: order/models.py:268 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2137 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:322 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:557 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:563 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:781 build/models.py:856 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:784 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:787 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:860 build/serializers.py:222 build/serializers.py:261 +#: build/serializers.py:819 order/models.py:518 order/serializers.py:393 +#: order/serializers.py:520 part/serializers.py:1385 part/serializers.py:1749 +#: stock/models.py:659 stock/models.py:1469 stock/serializers.py:399 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:865 build/serializers.py:227 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1279 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1293 build/models.py:1551 build/serializers.py:209 +#: build/serializers.py:246 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2360 +#: order/models.py:1237 order/models.py:1877 order/serializers.py:1282 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:415 +#: part/forms.py:48 part/models.py:3135 part/models.py:3965 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:158 stock/serializers.py:390 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 -#: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1361 +#: templates/js/translated/build.js:1738 templates/js/translated/build.js:2350 +#: templates/js/translated/company.js:1808 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3310 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 -#: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:763 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2068 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:2992 +#: templates/js/translated/stock.js:3075 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1294 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1374 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1383 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1393 order/models.py:1828 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1399 order/models.py:1831 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1405 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1466 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1538 build/serializers.py:799 order/serializers.py:1126 +#: order/serializers.py:1147 stock/serializers.py:493 stock/serializers.py:961 +#: stock/serializers.py:1073 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1737 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2948 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1539 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1552 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1560 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1561 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:159 build/serializers.py:828 +#: templates/js/translated/build.js:1314 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:171 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:175 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:179 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:190 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:210 build/serializers.py:247 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:268 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:271 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:286 order/serializers.py:533 order/serializers.py:1286 +#: stock/serializers.py:410 templates/js/translated/purchase_order.js:1149 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:287 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:300 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:301 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:336 stock/api.py:950 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:387 build/serializers.py:449 build/serializers.py:527 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:425 build/serializers.py:497 order/serializers.py:509 +#: order/serializers.py:617 order/serializers.py:1622 part/serializers.py:1048 +#: stock/serializers.py:421 stock/serializers.py:576 stock/serializers.py:672 +#: stock/serializers.py:1105 stock/serializers.py:1353 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2365 +#: templates/js/translated/purchase_order.js:1174 +#: templates/js/translated/purchase_order.js:1264 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2171 +#: templates/js/translated/stock.js:2842 +msgid "Location" +msgstr "" + +#: build/serializers.py:426 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:432 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:433 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:438 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:498 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:504 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:900 +#: order/models.py:1978 order/serializers.py:541 stock/admin.py:163 +#: stock/serializers.py:723 stock/serializers.py:1241 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2184 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1719 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2146 templates/js/translated/stock.js:2966 +#: templates/js/translated/stock.js:3091 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:510 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:511 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:580 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:581 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:587 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:588 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:615 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:616 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:617 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:639 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:641 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:651 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:656 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:657 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:667 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:672 order/serializers.py:278 order/serializers.py:1189 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:673 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:683 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:692 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:722 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:732 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:740 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:776 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:790 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:805 stock/serializers.py:974 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:853 order/serializers.py:1180 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:859 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:866 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:890 order/serializers.py:1432 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:947 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:955 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:956 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:961 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:962 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:967 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:968 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:973 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:974 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:149 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:166 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:171 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1671,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1683,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1694,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1707,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1731,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:279 +#: order/models.py:1272 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2232 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1736 +#: templates/js/translated/purchase_order.js:2144 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:663 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1408 order/models.py:1503 +#: order/models.py:1613 order/models.py:1765 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2895 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2149 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1861,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1408 +#: templates/js/translated/purchase_order.js:2186 msgid "Destination" msgstr "" @@ -1981,23 +1874,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:161 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1372 +#: templates/js/translated/model_renderers.js:233 +#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2160 +#: templates/js/translated/stock.js:3098 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2192 msgid "Created" msgstr "" @@ -2006,8 +1899,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:685 msgid "Completed" msgstr "" @@ -2015,12 +1908,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1936,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2052,39 +1945,31 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:192 -#: templates/js/translated/purchase_order.js:795 +#: templates/js/translated/purchase_order.js:803 msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:205 -msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" - -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:210 msgid "Incomplete Build Outputs" msgstr "" -#: build/templates/build/detail.html:219 +#: build/templates/build/detail.html:214 msgid "Create new build output" msgstr "" -#: build/templates/build/detail.html:220 +#: build/templates/build/detail.html:215 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:244 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +1979,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:271 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:426 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:427 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2005,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2047,1549 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:72 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:73 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 -msgid "Site URL is locked by configuration" -msgstr "" - -#: common/models.py:150 +#: common/models.py:127 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:134 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:143 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:714 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:718 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:770 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:786 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:794 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:831 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1063 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1088 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1090 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1102 +msgid "No plugin" +msgstr "" + +#: common/models.py:1176 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1178 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1185 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1186 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1191 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1193 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1197 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1198 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1203 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1204 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1209 company/models.py:109 company/models.py:110 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1210 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1214 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1215 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1221 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1222 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1228 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1230 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1233 common/models.py:1289 common/models.py:1302 +#: common/models.py:1310 common/models.py:1319 common/models.py:1328 +#: common/models.py:1530 common/models.py:1552 common/models.py:1661 +#: common/models.py:1918 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1237 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1238 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1243 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1245 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1251 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1252 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1258 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1260 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1265 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1266 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1271 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1272 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1277 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1279 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1285 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1286 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1292 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1293 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1298 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1299 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1305 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1307 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1314 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1316 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1323 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1325 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1332 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1333 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1338 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1339 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1345 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1346 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1351 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1352 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1357 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1358 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1361 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1362 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1367 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1368 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1373 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1374 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1379 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1380 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1385 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1386 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1391 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1392 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1397 part/admin.py:108 part/models.py:3731 +#: report/models.py:178 templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:763 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1398 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1403 part/admin.py:91 part/admin.py:430 part/models.py:999 +#: templates/js/translated/bom.js:1633 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:717 +msgid "Assembly" +msgstr "" + +#: common/models.py:1404 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1409 part/admin.py:95 part/models.py:1005 +#: templates/js/translated/table_filters.js:725 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1410 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1415 part/admin.py:100 part/models.py:1017 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1416 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1421 part/admin.py:104 part/models.py:1023 +#: templates/js/translated/table_filters.js:751 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1422 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1427 part/admin.py:113 part/models.py:1011 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:767 +msgid "Trackable" +msgstr "" + +#: common/models.py:1428 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1433 part/admin.py:117 part/models.py:1033 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:771 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1434 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1439 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1440 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1445 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1446 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1451 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1452 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1457 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1459 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1465 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1466 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1472 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1473 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1477 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1479 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1485 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1487 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1493 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1495 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1501 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1503 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1509 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1511 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1517 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1519 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1525 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1527 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1534 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1535 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1540 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1542 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1548 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1550 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1557 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1558 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1563 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1565 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1571 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1572 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1577 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1579 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1585 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1586 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1591 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1592 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 -msgid "Log Report Errors" -msgstr "" - -#: common/models.py:1695 -msgid "Log errors which occur when generating reports" -msgstr "" - -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1597 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:199 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1598 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1603 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1604 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1609 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1611 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1617 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1618 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1623 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1624 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1629 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 -msgid "Determines default behavior when a stock item is depleted" +#: common/models.py:1631 +msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1637 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1639 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1644 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1645 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1650 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1651 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1656 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1658 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1665 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1666 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1671 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1672 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1677 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1678 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1682 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1683 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1688 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1690 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/models.py:1852 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" - -#: common/models.py:1858 +#: common/models.py:1696 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1697 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1702 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1704 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1710 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1712 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1718 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1720 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1726 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1727 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1732 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1734 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1740 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1742 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1748 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1750 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1756 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1758 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1765 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1766 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1771 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1772 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1777 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1778 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1783 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1785 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1791 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1792 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1797 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1799 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1805 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1806 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1811 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1812 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1817 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1819 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1825 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1826 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1831 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1832 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1837 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1839 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:2070 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:2076 +#: common/models.py:1848 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1849 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1855 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1856 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1862 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1863 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:1869 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:1870 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:1876 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:1877 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:1883 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:1884 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:1889 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:1891 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:1897 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:1899 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:1905 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:1907 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:1913 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:1915 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:1922 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:1923 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 -msgid "Enable Test Station Data" -msgstr "" - -#: common/models.py:2157 -msgid "Enable test station data collection for test results" -msgstr "" - -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:1935 common/models.py:2330 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:1976 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:1978 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:1984 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:1985 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:1990 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:1991 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:1996 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:1997 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 -msgid "Show invalid BOMs" +#: common/models.py:2002 +msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2003 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2008 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2009 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2014 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2015 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2020 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2021 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2026 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2027 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2032 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2033 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2038 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2039 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2044 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2045 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2050 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2051 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2056 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2057 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2062 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2063 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2068 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2069 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2074 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2075 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2080 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2081 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2086 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2087 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2092 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2094 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2100 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2102 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2108 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2110 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2116 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2117 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2122 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2123 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2128 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2129 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2134 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2135 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2140 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2141 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2146 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2147 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2152 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2154 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2160 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2161 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2166 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2167 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2172 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2173 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2178 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2179 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2184 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2186 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2192 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2193 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2198 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2200 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2206 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2207 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2212 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2214 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2220 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2222 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2228 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2229 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2234 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2235 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2240 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2241 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2246 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2247 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2252 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2253 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2258 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2259 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2272 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2273 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2278 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2280 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2286 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2288 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 -msgid "Receive error reports" +#: common/models.py:2294 +msgid "Default part label template" msgstr "" -#: common/models.py:2531 -msgid "Receive notifications for system errors" +#: common/models.py:2295 +msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2536 -msgid "Last used printing machines" +#: common/models.py:2300 +msgid "Default stock item template" msgstr "" -#: common/models.py:2537 -msgid "Save the last used printing machines for a user" +#: common/models.py:2302 +msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" +#: common/models.py:2308 +msgid "Default stock location label template" msgstr "" -#: common/models.py:2580 +#: common/models.py:2310 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2316 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2317 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2361 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2368 company/serializers.py:481 order/admin.py:42 +#: order/models.py:1311 order/models.py:2199 +#: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2369 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2540 common/models.py:2725 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2541 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2551 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2555 part/admin.py:88 part/models.py:1028 +#: plugin/models.py:45 templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:516 +#: templates/js/translated/table_filters.js:712 users/models.py:169 +msgid "Active" +msgstr "" + +#: common/models.py:2555 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2571 users/models.py:148 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2572 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2580 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2581 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2689 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2690 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2698 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2699 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2707 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2708 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2715 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2716 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2726 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2731 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2732 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:2853 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:2855 templates/js/translated/company.js:955 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:2859 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:2861 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:2863 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:2866 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:2866 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:2883 company/models.py:157 part/models.py:912 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:2883 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:2925 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:2944 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:2951 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:2952 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:2959 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:2960 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3608,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 msgid "Items Received" msgstr "" @@ -4000,103 +3624,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:328 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:334 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:340 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:346 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:361 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:361 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:363 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:363 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:365 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:367 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:367 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:369 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:369 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:372 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:372 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,546 +3722,480 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 -msgid "Part is Active" -msgstr "" - -#: company/api.py:145 -msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:278 -msgid "Supplier Part is Active" -msgstr "" - -#: company/api.py:282 -msgid "Internal Part is Active" -msgstr "" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:115 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:116 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:121 company/templates/company/company_base.html:100 #: templates/InvenTree/settings/plugin_settings.html:54 -#: templates/js/translated/company.js:532 +#: templates/js/translated/company.js:522 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:121 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:126 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:128 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:135 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:140 company/templates/company/company_base.html:139 +#: order/models.py:313 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:142 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:148 msgid "Link to external company information" msgstr "" -#: company/models.py:163 -msgid "Is this company active?" -msgstr "" - -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:162 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:163 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:168 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:169 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:174 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:175 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:183 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:268 company/models.py:377 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:733 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:495 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:378 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:383 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:384 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:390 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:391 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 -#: templates/js/translated/company.js:971 +#: company/models.py:396 templates/js/translated/company.js:904 +#: templates/js/translated/company.js:961 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:397 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 -#: templates/js/translated/company.js:977 +#: company/models.py:403 templates/js/translated/company.js:905 +#: templates/js/translated/company.js:967 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:404 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 -#: templates/js/translated/company.js:983 +#: company/models.py:410 company/models.py:411 +#: templates/js/translated/company.js:973 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:417 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:418 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:424 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:425 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:431 templates/js/translated/company.js:991 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:432 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:438 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:439 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:445 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:446 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:453 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:482 company/models.py:776 stock/models.py:746 +#: stock/serializers.py:200 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:484 company/models.py:778 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:493 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:467 #: stock/templates/stock/item_base.html:207 -#: templates/js/translated/company.js:507 -#: templates/js/translated/company.js:1118 -#: templates/js/translated/company.js:1296 -#: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/company.js:506 +#: templates/js/translated/company.js:1108 +#: templates/js/translated/company.js:1286 +#: templates/js/translated/company.js:1601 +#: templates/js/translated/table_filters.js:792 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:494 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 -#: templates/js/translated/company.js:1117 -#: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: company/models.py:500 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:477 +#: templates/js/translated/company.js:351 +#: templates/js/translated/company.js:1107 +#: templates/js/translated/company.js:1302 +#: templates/js/translated/company.js:1620 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2050 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:501 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:508 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:516 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:573 company/models.py:600 company/models.py:802 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:607 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:613 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2351 templates/js/translated/company.js:1156 +#: templates/js/translated/company.js:1409 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1502 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:614 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:621 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:992 part/models.py:3582 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1415 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:622 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:716 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:723 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:737 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:786 company/templates/company/company_base.html:81 +#: company/templates/company/supplier_part.html:129 order/models.py:445 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:451 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 -#: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:510 +#: templates/js/translated/company.js:1574 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1686 +#: templates/js/translated/table_filters.js:796 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:787 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:793 part/serializers.py:462 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 -msgid "Is this supplier part active?" -msgstr "" - -#: company/models.py:812 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:818 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:825 company/templates/company/supplier_part.html:187 +#: part/admin.py:417 part/models.py:4000 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:506 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:834 part/models.py:1950 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:835 part/models.py:1951 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:842 company/templates/company/supplier_part.html:160 +#: stock/admin.py:222 stock/models.py:777 stock/serializers.py:1251 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1636 +#: templates/js/translated/stock.js:2394 +msgid "Packaging" +msgstr "" + +#: company/models.py:843 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:311 -#: templates/js/translated/purchase_order.js:841 -#: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: company/models.py:848 templates/js/translated/company.js:1641 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:314 +#: templates/js/translated/purchase_order.js:845 +#: templates/js/translated/purchase_order.js:1099 +#: templates/js/translated/purchase_order.js:2081 +#: templates/js/translated/purchase_order.js:2098 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:850 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:869 part/models.py:1957 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:870 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:882 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:888 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:889 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:153 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 -#: part/templates/part/part_base.html:197 -#: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 -msgid "In Stock" -msgstr "" - -#: company/templates/company/company_base.html:16 -#: part/templates/part/part_base.html:146 -#: templates/js/translated/company.js:1287 -#: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 -msgid "Inactive" -msgstr "" - -#: company/templates/company/company_base.html:27 +#: company/templates/company/company_base.html:21 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" msgstr "" -#: company/templates/company/company_base.html:33 +#: company/templates/company/company_base.html:27 msgid "Company actions" msgstr "" -#: company/templates/company/company_base.html:38 +#: company/templates/company/company_base.html:32 msgid "Edit company information" msgstr "" -#: company/templates/company/company_base.html:39 -#: templates/js/translated/company.js:445 +#: company/templates/company/company_base.html:33 +#: templates/js/translated/company.js:444 msgid "Edit Company" msgstr "" -#: company/templates/company/company_base.html:43 +#: company/templates/company/company_base.html:37 msgid "Delete company" msgstr "" -#: company/templates/company/company_base.html:44 -#: company/templates/company/company_base.html:168 +#: company/templates/company/company_base.html:38 +#: company/templates/company/company_base.html:162 msgid "Delete Company" msgstr "" -#: company/templates/company/company_base.html:53 +#: company/templates/company/company_base.html:47 #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" -#: company/templates/company/company_base.html:61 +#: company/templates/company/company_base.html:55 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" msgstr "" -#: company/templates/company/company_base.html:64 +#: company/templates/company/company_base.html:58 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:66 +#: company/templates/company/company_base.html:60 #: part/templates/part/part_thumb.html:16 msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:86 order/models.py:888 +#: order/models.py:1966 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:799 +#: stock/models.py:800 stock/serializers.py:1009 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/company.js:502 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2930 +#: templates/js/translated/table_filters.js:800 msgid "Customer" msgstr "" -#: company/templates/company/company_base.html:117 +#: company/templates/company/company_base.html:111 msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:131 +#: company/templates/company/company_base.html:118 order/models.py:323 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + +#: company/templates/company/company_base.html:125 msgid "Phone" msgstr "" -#: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: company/templates/company/company_base.html:205 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" -#: company/templates/company/company_base.html:212 +#: company/templates/company/company_base.html:206 msgid "Remove associated image from this company" msgstr "" -#: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: company/templates/company/company_base.html:208 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" -#: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: company/templates/company/company_base.html:237 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" -#: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: company/templates/company/company_base.html:252 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4211,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4224,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,11 +4238,11 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 -#: users/models.py:208 +#: users/models.py:195 msgid "Purchase Orders" msgstr "" @@ -4740,11 +4261,11 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 -#: users/models.py:209 +#: users/models.py:196 msgid "Sales Orders" msgstr "" @@ -4769,7 +4290,7 @@ msgstr "" #: order/templates/order/return_orders.html:15 #: templates/InvenTree/settings/sidebar.html:61 #: templates/js/translated/search.js:232 templates/navbar.html:65 -#: users/models.py:210 +#: users/models.py:197 msgid "Return Orders" msgstr "" @@ -4812,23 +4333,22 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:1343 +#: templates/js/translated/company.js:1333 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:1344 +#: templates/js/translated/company.js:1334 msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 msgid "Internal Part" msgstr "" @@ -4838,32 +4358,27 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 -#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 -#: templates/navbar.html:48 +#: part/admin.py:122 part/templates/part/part_sidebar.html:33 +#: templates/InvenTree/search.html:190 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,15 +4402,28 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 stock/models.py:757 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1590 +#: templates/js/translated/purchase_order.js:761 +#: templates/js/translated/stock.js:2250 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 -#: templates/js/translated/company.js:1526 +#: templates/js/translated/company.js:1516 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4905,1111 +4433,746 @@ msgid "Update Availability" msgstr "" #: company/templates/company/supplier_part.html:63 -#: company/templates/company/supplier_part.html:64 -#: templates/js/translated/company.js:294 -msgid "Edit Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:68 -#: company/templates/company/supplier_part.html:69 -#: templates/js/translated/company.js:269 -msgid "Duplicate Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:73 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:74 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:133 -msgid "No supplier information available" -msgstr "" - -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 -#: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 -msgid "SKU" -msgstr "" - -#: company/templates/company/supplier_part.html:206 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 -msgid "Create new stock item" -msgstr "" - -#: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 -msgid "New Stock Item" -msgstr "" - -#: company/templates/company/supplier_part.html:223 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/supplier_part.html:246 -msgid "Pricing Information" -msgstr "" - -#: company/templates/company/supplier_part.html:251 -#: templates/js/translated/company.js:398 -#: templates/js/translated/pricing.js:684 -msgid "Add Price Break" -msgstr "" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 -msgid "Supplier Part QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:316 -msgid "Link Barcode to Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:388 -msgid "Update Part Availability" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 -#: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 -#: users/models.py:206 -msgid "Stock Items" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/views.py:32 -msgid "New Supplier" -msgstr "" - -#: company/views.py:38 -msgid "New Manufacturer" -msgstr "" - -#: company/views.py:43 templates/InvenTree/search.html:210 -#: templates/navbar.html:60 -msgid "Customers" -msgstr "" - -#: company/views.py:44 -msgid "New Customer" -msgstr "" - -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" - -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" - -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" - -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" - -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" - -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" - -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" - -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" - -#: importer/status_codes.py:16 -msgid "Processing Data" +#: company/templates/company/supplier_part.html:64 +#: templates/js/translated/company.js:294 +msgid "Edit Supplier Part" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: company/templates/company/supplier_part.html:68 +#: company/templates/company/supplier_part.html:69 +#: templates/js/translated/company.js:269 +msgid "Duplicate Supplier Part" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: company/templates/company/supplier_part.html:73 +msgid "Delete Supplier Part" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: company/templates/company/supplier_part.html:74 +msgid "Delete Supplier Part" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: company/templates/company/supplier_part.html:133 +msgid "No supplier information available" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:461 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/purchase_order.js:2025 +msgid "SKU" msgstr "" -#: machine/machine_types/label_printer.py:215 -msgid "Copies" +#: company/templates/company/supplier_part.html:206 +msgid "Supplier Part Stock" msgstr "" -#: machine/machine_types/label_printer.py:216 -msgid "Number of copies to print for each label" +#: company/templates/company/supplier_part.html:209 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +msgid "Create new stock item" msgstr "" -#: machine/machine_types/label_printer.py:231 -msgid "Connected" +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 +msgid "New Stock Item" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 -msgid "Unknown" +#: company/templates/company/supplier_part.html:223 +msgid "Supplier Part Orders" msgstr "" -#: machine/machine_types/label_printer.py:233 -msgid "Printing" +#: company/templates/company/supplier_part.html:246 +msgid "Pricing Information" msgstr "" -#: machine/machine_types/label_printer.py:234 -msgid "No media" +#: company/templates/company/supplier_part.html:251 +#: templates/js/translated/company.js:398 +#: templates/js/translated/pricing.js:684 +msgid "Add Price Break" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" +#: company/templates/company/supplier_part.html:276 +msgid "Supplier Part QR Code" msgstr "" -#: machine/machine_types/label_printer.py:236 -msgid "Disconnected" +#: company/templates/company/supplier_part.html:287 +msgid "Link Barcode to Supplier Part" msgstr "" -#: machine/machine_types/label_printer.py:243 -msgid "Label Printer" +#: company/templates/company/supplier_part.html:359 +msgid "Update Part Availability" msgstr "" -#: machine/machine_types/label_printer.py:244 -msgid "Directly print labels for various items." +#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:709 stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2737 +#: users/models.py:193 +msgid "Stock Items" msgstr "" -#: machine/machine_types/label_printer.py:250 -msgid "Printer Location" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" msgstr "" -#: machine/machine_types/label_printer.py:251 -msgid "Scope the printer to a specific location" +#: company/views.py:32 +msgid "New Supplier" msgstr "" -#: machine/models.py:25 -msgid "Name of machine" +#: company/views.py:38 +msgid "New Manufacturer" msgstr "" -#: machine/models.py:29 -msgid "Machine Type" +#: company/views.py:43 templates/InvenTree/search.html:210 +#: templates/navbar.html:60 +msgid "Customers" msgstr "" -#: machine/models.py:29 -msgid "Type of machine" +#: company/views.py:44 +msgid "New Customer" msgstr "" -#: machine/models.py:34 machine/models.py:146 -msgid "Driver" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: machine/models.py:35 -msgid "Driver used for the machine" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: machine/models.py:39 -msgid "Machines can be disabled" +#: label/models.py:115 +msgid "Label name" msgstr "" -#: machine/models.py:95 -msgid "Driver available" +#: label/models.py:123 +msgid "Label description" msgstr "" -#: machine/models.py:100 -msgid "No errors" +#: label/models.py:131 +msgid "Label" msgstr "" -#: machine/models.py:105 -msgid "Initialized" +#: label/models.py:132 +msgid "Label template file" msgstr "" -#: machine/models.py:117 -msgid "Machine status" +#: label/models.py:138 report/models.py:315 +msgid "Enabled" msgstr "" -#: machine/models.py:145 -msgid "Machine" +#: label/models.py:139 +msgid "Label template is enabled" msgstr "" -#: machine/models.py:151 -msgid "Machine Config" +#: label/models.py:144 +msgid "Width [mm]" msgstr "" -#: machine/models.py:156 -msgid "Config type" +#: label/models.py:145 +msgid "Label width, specified in mm" msgstr "" -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" +#: label/models.py:151 +msgid "Height [mm]" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" +#: label/models.py:152 +msgid "Label height, specified in mm" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" +#: label/models.py:158 report/models.py:308 +msgid "Filename Pattern" msgstr "" -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" +#: label/models.py:159 +msgid "Pattern for generating label filenames" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: label/models.py:308 label/models.py:347 label/models.py:372 +#: label/models.py:407 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 -msgid "Has Pricing" +#: label/models.py:309 label/models.py:348 label/models.py:373 +#: label/models.py:408 report/models.py:336 report/models.py:487 +#: report/models.py:523 report/models.py:559 report/models.py:681 +msgid "Filters" msgstr "" -#: order/api.py:230 -msgid "No matching purchase order found" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 -msgid "Order" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: order/api.py:429 order/api.py:784 -msgid "Order Complete" +#: order/admin.py:30 order/models.py:87 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2122 +#: templates/js/translated/sales_order.js:1847 +msgid "Total Price" msgstr "" -#: order/api.py:452 -msgid "Order Pending" +#: order/api.py:233 +msgid "No matching purchase order found" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1406 order/models.py:1361 order/models.py:1457 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 -#: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:762 +#: templates/js/translated/purchase_order.js:1670 +#: templates/js/translated/stock.js:2230 templates/js/translated/stock.js:2878 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1410 order/models.py:2166 order/models.py:2217 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2912 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/api.py:1412 templates/js/translated/sales_order.js:1042 +msgid "Unknown" +msgstr "" + +#: order/models.py:88 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:71 +#: order/models.py:93 order/serializers.py:54 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:55 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:228 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:260 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:269 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:273 order/models.py:1266 order/models.py:1665 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:281 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:295 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:303 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:314 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:324 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:423 order/models.py:877 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:431 order/models.py:901 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:446 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:457 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1699 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:458 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:467 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:473 order/models.py:1992 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:474 order/models.py:1993 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:481 order/models.py:2000 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:525 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:719 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:889 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:912 order/models.py:1985 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:913 order/models.py:1986 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:917 order/models.py:1619 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:926 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:977 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:982 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:986 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:991 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1238 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1255 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1262 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1274 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1295 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1301 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1302 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1312 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1345 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1352 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1360 order/models.py:1456 order/models.py:1502 +#: order/models.py:1612 order/models.py:1764 order/models.py:2165 +#: order/models.py:2216 templates/js/translated/sales_order.js:1488 +msgid "Order" +msgstr "" + +#: order/models.py:1380 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1387 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1302 +#: templates/js/translated/purchase_order.js:2166 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:598 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1388 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1396 stock/models.py:918 stock/serializers.py:327 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2281 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1397 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1412 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1490 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1495 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1521 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1522 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1532 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1620 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1626 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1627 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1635 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1636 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1643 order/models.py:1854 order/serializers.py:1297 +#: order/serializers.py:1407 templates/js/translated/model_renderers.js:446 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1644 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1652 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1653 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1660 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1661 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1681 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1684 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1800 order/models.py:1802 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1809 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1812 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1815 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1834 order/serializers.py:1174 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1837 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1838 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1846 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1855 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1868 order/models.py:2173 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1869 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1878 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1955 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:1967 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:1979 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2158 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2174 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2180 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2181 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2192 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2193 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2200 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:264 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:279 order/serializers.py:1190 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:289 order/serializers.py:1200 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:400 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 -msgid "Auto Pricing" -msgstr "" - -#: order/serializers.py:529 -msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" - -#: order/serializers.py:539 +#: order/serializers.py:425 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:443 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:446 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:454 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:455 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:494 order/serializers.py:1268 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:500 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:510 order/serializers.py:618 order/serializers.py:1623 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:526 templates/js/translated/purchase_order.js:1126 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:534 templates/js/translated/purchase_order.js:1150 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:545 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:546 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:562 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:586 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:634 order/serializers.py:1639 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:650 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:661 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1018 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1078 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1138 order/serializers.py:1277 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1157 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1287 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1309 order/serializers.py:1415 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1312 order/serializers.py:1418 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1359 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1366 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1593 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1599 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1602 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1631 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1709 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5214,93 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5353,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 -#: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1621 +#: templates/js/translated/purchase_order.js:706 +#: templates/js/translated/purchase_order.js:1232 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5400,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6242,8 +5420,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/purchase_order.js:433 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5469,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5505,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5543,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5573,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:403 part/models.py:3851 part/stocktake.py:218 +#: stock/admin.py:151 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:410 part/models.py:3852 part/stocktake.py:219 +#: stock/admin.py:155 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:887 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2006 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:896 part/templates/part/part_base.html:277 +#: report/models.py:191 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:869 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5609,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,215 +5625,152 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:855 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:983 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" +#: part/admin.py:126 part/templates/part/part_base.html:197 +#: templates/js/translated/company.js:1679 +#: templates/js/translated/table_filters.js:355 +msgid "In Stock" +msgstr "" + +#: part/admin.py:132 part/bom.py:173 part/templates/part/part_base.html:210 +#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2609 +#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:229 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3053 part/models.py:3067 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3060 part/models.py:3074 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:392 stock/admin.py:58 stock/admin.py:209 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:399 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:389 part/serializers.py:343 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 -#: templates/navbar.html:24 users/models.py:203 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:190 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:383 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:386 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:396 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:407 part/models.py:3853 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:420 part/serializers.py:1182 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:425 part/serializers.py:1197 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 -msgid "Starred" -msgstr "" - -#: part/api.py:106 -msgid "Filter by starred categories" -msgstr "" - -#: part/api.py:123 stock/api.py:310 -msgid "Depth" -msgstr "" - -#: part/api.py:123 -msgid "Filter by category depth" -msgstr "" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:158 -msgid "Include sub-categories in filtered results" -msgstr "" - -#: part/api.py:179 templates/js/translated/part.js:311 -msgid "Parent" -msgstr "" - -#: part/api.py:181 -msgid "Filter by parent category" -msgstr "" - -#: part/api.py:214 -msgid "Exclude Tree" -msgstr "" - -#: part/api.py:216 -msgid "Exclude sub-categories under the specified category" -msgstr "" - -#: part/api.py:441 -msgid "Has Results" -msgstr "" - -#: part/api.py:608 +#: part/api.py:523 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:541 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:557 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:641 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 -#: templates/InvenTree/settings/settings_staff_js.html:300 -#: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 -msgid "Category" -msgstr "" - -#: part/api.py:1761 -msgid "Assembly part is testable" +#: part/api.py:786 +msgid "Valid" msgstr "" -#: part/api.py:1770 -msgid "Component part is testable" +#: part/api.py:787 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1821 -msgid "Uses" +#: part/api.py:793 +msgid "This option must be selected" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:107 part/models.py:922 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 -#: templates/email/low_stock_notification.html:16 +#: part/bom.py:171 templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" +#: part/bom.py:172 part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1893 +msgid "Available Stock" +msgstr "" + #: part/forms.py:49 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:3801 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:89 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 -#: users/models.py:202 +#: users/models.py:189 msgid "Part Categories" msgstr "" @@ -6656,10 +5778,9 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:113 stock/models.py:167 templates/js/translated/stock.js:2743 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" @@ -6675,1114 +5796,957 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:131 stock/models.py:94 stock/models.py:150 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:132 stock/models.py:151 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:152 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:479 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:523 part/models.py:530 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:542 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:607 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:687 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:790 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:800 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:815 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:838 part/models.py:3852 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:862 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:870 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 -msgid "Part category" +#: part/models.py:879 part/models.py:3359 part/models.py:3800 +#: part/serializers.py:358 part/serializers.py:1038 +#: part/templates/part/part_base.html:260 stock/api.py:705 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2377 +msgid "Category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" +#: part/models.py:880 +msgid "Part category" msgstr "" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:888 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:895 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:920 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:966 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:967 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:974 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:975 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:984 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:993 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1000 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1006 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1012 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1018 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1024 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1028 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1034 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1040 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1041 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1049 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1054 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1070 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1080 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1085 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1958 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2967 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:2983 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:2984 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:2990 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:2991 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:2997 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:2998 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3004 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3005 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3011 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3012 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3018 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3019 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3025 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3026 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3032 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3033 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3039 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3040 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3046 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3047 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3054 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3061 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3068 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3075 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3081 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3082 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3088 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3089 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3095 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3096 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3102 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3103 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3122 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3127 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3128 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3136 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3140 part/models.py:3223 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1728 +#: templates/js/translated/stock.js:2792 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3141 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3149 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3159 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3165 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3166 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3172 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3173 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3229 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3230 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3235 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3236 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3246 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 -msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3406 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 -msgid "Test template with the same key already exists for part" +#: part/models.py:3423 +msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3444 templates/js/translated/part.js:2868 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3445 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 -msgid "Test Key" -msgstr "" - -#: part/models.py:3611 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3618 +#: part/models.py:3452 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3453 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3458 templates/js/translated/part.js:2877 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3459 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3464 templates/js/translated/part.js:2885 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3465 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3470 templates/js/translated/part.js:2892 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3472 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3519 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3524 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3544 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3561 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3576 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3583 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3591 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3597 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:817 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3598 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3603 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3604 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3681 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3724 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3732 part/models.py:3808 part/models.py:3809 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3737 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3738 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3815 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3816 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3850 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3851 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3853 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3854 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3854 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" +#: part/models.py:3860 part/models.py:4296 stock/api.py:717 +msgid "BOM Item" msgstr "" -#: part/models.py:4232 +#: part/models.py:3944 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:3954 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:3955 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:3966 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:3972 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:3978 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:3985 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:3986 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:3993 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4001 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4007 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4008 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4013 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4014 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4019 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4020 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4025 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4026 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4111 stock/models.py:643 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4121 part/models.py:4123 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4263 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4284 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4297 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4305 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4321 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4329 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4330 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4349 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4354 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 -#: part/templates/part/category_sidebar.html:7 -msgid "Subcategories" -msgstr "" - -#: part/serializers.py:197 -msgid "Results" -msgstr "" - -#: part/serializers.py:198 -msgid "Number of results recorded against this template" -msgstr "" - -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:178 part/serializers.py:196 stock/serializers.py:333 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 -msgid "Number of parts using this template" -msgstr "" - -#: part/serializers.py:421 +#: part/serializers.py:349 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:359 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:389 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:390 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:395 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:396 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:402 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:403 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:409 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:410 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:416 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:417 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:430 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:432 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:439 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:440 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:452 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:468 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:478 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:485 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:494 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:505 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:512 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" - -#: part/serializers.py:908 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:911 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:777 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:778 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:784 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:785 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:791 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:792 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:800 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:801 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:806 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:807 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:824 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1030 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1040 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1050 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1056 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1057 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1062 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1063 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1068 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1069 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1077 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1183 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1190 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1198 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1205 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1234 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1235 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1258 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1265 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1268 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1592 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1600 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1601 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1606 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1607 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1612 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1613 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1618 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1619 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1653 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1654 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1684 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1728 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1731 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1734 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1743 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1751 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1772 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2081 msgid "Total Quantity" msgstr "" @@ -7828,65 +6792,70 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +6901,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:249 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2186 users/models.py:191 msgid "Stocktake" msgstr "" @@ -7946,105 +6915,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 -#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7044,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7068,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7078,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7090,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8169,12 +7134,20 @@ msgstr "" msgid "Part is not active" msgstr "" +#: part/templates/part/part_base.html:146 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/company.js:1565 +#: templates/js/translated/model_renderers.js:304 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:153 msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7161,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7259,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2040 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7301,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:245 #: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1693 #: templates/js/translated/company.js:1703 -#: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2216 msgid "Last Updated" msgstr "" @@ -8405,10 +7382,8 @@ msgstr "" msgid "Update Pricing" msgstr "" -#: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:704 +#: templates/js/translated/part.js:2140 templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,120 +7461,108 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 -msgid "Plugin cannot be deleted as it is currently active" -msgstr "" - -#: plugin/base/action/api.py:32 +#: plugin/base/action/api.py:24 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:41 +#: plugin/base/action/api.py:33 msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1402 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2585 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:207 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:441 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:472 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:480 msgid "Received purchase order line item" msgstr "" @@ -8607,121 +7570,76 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,40 +7686,22 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:61 -msgid "InvenTree machine label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:62 -msgid "Provides support for printing using a machine" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:149 -msgid "last used" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:166 -msgid "Options" -msgstr "" - #: plugin/builtin/labels/label_sheet.py:29 msgid "Page size for the label sheet" msgstr "" @@ -8822,7 +7722,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:205 msgid "Landscape" msgstr "" @@ -8838,11 +7738,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8894,121 +7794,84 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:194 plugin/installer.py:282 -msgid "Only staff users can administer plugins" -msgstr "" - -#: plugin/installer.py:197 -msgid "Plugin installation is disabled" +#: plugin/installer.py:140 +msgid "Permission denied: only staff users can install plugins" msgstr "" -#: plugin/installer.py:248 +#: plugin/installer.py:189 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:254 +#: plugin/installer.py:195 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:273 -msgid "Plugin was not found in registry" -msgstr "" - -#: plugin/installer.py:276 -msgid "Plugin is not a packaged plugin" -msgstr "" - -#: plugin/installer.py:279 -msgid "Plugin package name not found" +#: plugin/installer.py:203 +msgid "Plugin installation failed" msgstr "" -#: plugin/installer.py:299 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:303 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" - -#: plugin/installer.py:316 -msgid "Uninstalled plugin successfully" -msgstr "" - -#: plugin/models.py:36 +#: plugin/models.py:29 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:30 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:33 users/models.py:89 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:33 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:41 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 -msgid "Package Name" -msgstr "" - -#: plugin/models.py:61 -msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" - -#: plugin/models.py:66 +#: plugin/models.py:45 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:139 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:500 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:148 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:156 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 -msgid "Package Plugin" -msgstr "" - -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:180 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:227 msgid "Method" msgstr "" -#: plugin/plugin.py:270 +#: plugin/plugin.py:279 msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:553 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:556 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:558 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9053,1232 +7916,862 @@ msgstr "" msgid "InvenTree Contributors" msgstr "" -#: plugin/serializers.py:81 +#: plugin/serializers.py:79 msgid "Source URL" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:81 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:92 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" - -#: plugin/serializers.py:99 -#: templates/InvenTree/settings/plugin_settings.html:42 -#: templates/js/translated/plugin.js:86 -msgid "Version" +#: plugin/serializers.py:87 +msgid "Package Name" msgstr "" -#: plugin/serializers.py:101 -msgid "Version specifier for the plugin. Leave blank for latest version." +#: plugin/serializers.py:89 +msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:106 +#: plugin/serializers.py:93 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:108 +#: plugin/serializers.py:95 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:121 +#: plugin/serializers.py:108 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:123 +#: plugin/serializers.py:110 msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:139 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:140 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:146 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:148 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 -msgid "Collect plugins" -msgstr "" - -#: plugin/serializers.py:178 -msgid "Collect plugins and add them to the registry" -msgstr "" - -#: plugin/serializers.py:205 -msgid "Activate Plugin" -msgstr "" - -#: plugin/serializers.py:206 -msgid "Activate this plugin" -msgstr "" - -#: plugin/serializers.py:226 -msgid "Delete configuration" -msgstr "" - -#: plugin/serializers.py:227 -msgid "Delete the plugin configuration from the database" -msgstr "" - -#: report/api.py:88 -msgid "No valid objects provided to template" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "" - -#: report/helpers.py:43 -msgid "A4" +#: plugin/serializers.py:155 +msgid "Collect plugins" msgstr "" -#: report/helpers.py:44 -msgid "A3" +#: plugin/serializers.py:156 +msgid "Collect plugins and add them to the registry" msgstr "" -#: report/helpers.py:45 -msgid "Legal" +#: plugin/serializers.py:178 +msgid "Activate Plugin" msgstr "" -#: report/helpers.py:46 -msgid "Letter" +#: plugin/serializers.py:179 +msgid "Activate this plugin" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" +#: report/api.py:175 +msgid "No valid objects provided to template" msgstr "" -#: report/models.py:150 -msgid "Template name" +#: report/api.py:214 report/api.py:251 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/models.py:156 -msgid "Template description" +#: report/api.py:331 +msgid "Test report" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/helpers.py:15 +msgid "A4" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" +#: report/helpers.py:16 +msgid "A3" msgstr "" -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/helpers.py:17 +msgid "Legal" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/helpers.py:18 +msgid "Letter" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:173 +msgid "Template name" msgstr "" -#: report/models.py:234 -msgid "Filters" +#: report/models.py:179 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:186 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:192 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:200 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:206 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:309 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:316 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:338 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:345 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:347 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:415 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:416 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:455 +msgid "Part Filters" msgstr "" #: report/models.py:456 -msgid "Report Template" -msgstr "" - -#: report/models.py:463 report/models.py:486 -msgid "Output File" +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:488 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:524 +msgid "Sales order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:560 +msgid "Return order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:608 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:609 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:616 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:653 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:654 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:661 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:683 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2112 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2014 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:804 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1359 +#: templates/js/translated/build.js:2348 +#: templates/js/translated/model_renderers.js:222 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2341 templates/js/translated/stock.js:1475 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2345 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:160 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3081 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:95 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:151 report/templatetags/report.py:216 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:241 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:282 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:170 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:174 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:147 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:166 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:178 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:183 +msgid "Supplier ID" msgstr "" #: stock/admin.py:189 -msgid "Supplier ID" +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:194 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:199 stock/models.py:784 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:204 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:214 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:219 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:234 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:239 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:254 stock/models.py:878 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2200 users/models.py:113 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 -msgid "Filter by location depth" -msgstr "" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 -msgid "Include sub-locations in filtered results" -msgstr "" - -#: stock/api.py:367 stock/serializers.py:1186 -msgid "Parent Location" -msgstr "" - -#: stock/api.py:368 -msgid "Filter by parent location" -msgstr "" - -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:540 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:725 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:753 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:757 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:760 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:846 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:852 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:883 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:893 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:924 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:68 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:69 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:95 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:127 stock/models.py:766 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:128 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 -#: users/models.py:205 +#: users/models.py:192 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:160 stock/models.py:927 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:161 stock/models.py:928 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:169 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:176 templates/js/translated/stock.js:2752 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:177 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:183 templates/js/translated/stock.js:2761 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:187 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:256 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:620 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:650 stock/serializers.py:224 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:667 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:677 stock/models.py:690 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:680 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:704 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:709 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:722 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:736 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:748 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:758 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:770 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:778 stock/serializers.py:1252 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:789 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:808 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:822 stock/serializers.py:1235 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:827 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:837 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:840 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:847 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:850 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:859 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:863 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:869 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:880 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:898 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:899 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:919 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:950 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1460 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1466 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1474 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1480 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1485 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1493 stock/serializers.py:456 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 -msgid "Test template does not exist" -msgstr "" - -#: stock/models.py:1659 +#: stock/models.py:1560 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1564 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1567 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1570 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1573 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1576 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1583 stock/serializers.py:1149 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1587 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1595 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1600 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1804 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2261 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2320 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2326 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" +#: stock/models.py:2341 +msgid "Test name" msgstr "" -#: stock/models.py:2544 +#: stock/models.py:2345 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2352 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2360 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2364 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 -msgid "Test station" -msgstr "" - -#: stock/models.py:2572 -msgid "The identifier of the test station where the test was performed" -msgstr "" - -#: stock/models.py:2578 -msgid "Started" -msgstr "" - -#: stock/models.py:2579 -msgid "The timestamp of the test start" -msgstr "" - -#: stock/models.py:2585 -msgid "Finished" -msgstr "" - -#: stock/models.py:2586 -msgid "The timestamp of the test finish" -msgstr "" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 +#: stock/serializers.py:118 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:216 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:329 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:391 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:404 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:411 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:422 stock/serializers.py:1106 stock/serializers.py:1354 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:429 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:439 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:494 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:501 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:502 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:507 stock/serializers.py:582 stock/serializers.py:678 +#: stock/serializers.py:728 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:515 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:523 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:530 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:542 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:577 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:612 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:625 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:642 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:673 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:710 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:716 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 -#: stock/templates/stock/location_sidebar.html:5 -msgid "Sublocations" -msgstr "" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:978 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:982 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:986 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1010 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1016 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1024 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1034 stock/serializers.py:1280 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1113 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1118 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1119 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1124 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1125 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1135 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 +#: stock/serializers.py:1223 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1570 +#: stock/serializers.py:1242 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1598 +#: stock/serializers.py:1270 msgid "Stock transaction notes" msgstr "" -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "" - #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -10300,7 +8793,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:279 msgid "Delete Test Data" msgstr "" @@ -10316,15 +8809,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3239 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:267 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:296 templates/js/translated/stock.js:1667 msgid "Add Test Result" msgstr "" @@ -10337,8 +8830,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +8840,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1792 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1774 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1783 msgid "Remove stock" msgstr "" @@ -10366,12 +8859,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1801 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1855 msgid "Assign to customer" msgstr "" @@ -10412,10 +8905,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2116 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +8922,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +8966,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2373 msgid "No location set" msgstr "" @@ -10487,6 +8988,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:163 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9002,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1922 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9047,86 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:289 +#: templates/js/translated/stock.js:2543 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9142,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9352,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9396,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9434,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:35 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:41 +#: templates/InvenTree/settings/plugin.html:42 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:55 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:70 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:79 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:81 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10960,6 +9472,11 @@ msgstr "" msgid "Plugin information" msgstr "" +#: templates/InvenTree/settings/plugin_settings.html:42 +#: templates/js/translated/plugin.js:86 +msgid "Version" +msgstr "" + #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" msgstr "" @@ -10994,7 +9511,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:492 msgid "Builtin" msgstr "" @@ -11004,7 +9521,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:496 msgid "Sample" msgstr "" @@ -11038,20 +9555,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +9624,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:543 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:399 msgid "Delete" msgstr "" @@ -11130,7 +9647,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2221 msgid "group" msgstr "" @@ -11149,12 +9666,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +9679,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:35 msgid "New Location Type" msgstr "" @@ -11218,7 +9735,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2155 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +9770,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:31 msgid "Stock Location Types" msgstr "" @@ -11267,6 +9784,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11280,7 +9809,7 @@ msgid "Unverified" msgstr "" #: templates/InvenTree/settings/user.html:80 -#: templates/js/translated/company.js:957 +#: templates/js/translated/company.js:947 msgid "Primary" msgstr "" @@ -11340,49 +9869,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10061,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10083,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:770 msgid "Confirm" msgstr "" @@ -11563,26 +10092,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 -#: templates/socialaccount/signup.html:23 +#: templates/socialaccount/signup.html:20 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10125,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11654,7 +10183,7 @@ msgstr "" #: templates/account/signup_closed.html:15 #: templates/socialaccount/authentication_error.html:19 -#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 +#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:27 msgid "Return to login page" msgstr "" @@ -11710,19 +10239,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10312,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2552 msgid "Required Quantity" msgstr "" @@ -11801,15 +10326,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3187 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10346,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10378,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10414,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10467,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,9 +10562,9 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 -#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 +#: templates/js/translated/purchase_order.js:805 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -12156,7 +10681,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2496 msgid "Variant stock allowed" msgstr "" @@ -12176,183 +10701,179 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 -msgid "External stock" -msgstr "" - -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2595 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2597 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2599 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2582 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1285 +#: templates/js/translated/bom.js:1279 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1281 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1289 +#: templates/js/translated/bom.js:1283 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 +#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1293 +#: templates/js/translated/bom.js:1287 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1313 +#: templates/js/translated/bom.js:1307 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1397 +#: templates/js/translated/bom.js:1391 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2481 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1683 +#: templates/js/translated/bom.js:1677 msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +10897,236 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2337 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1289 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1382 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1396 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 -#: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/build.js:1568 +#: templates/js/translated/purchase_order.js:630 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1569 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1632 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1709 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1710 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1724 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1752 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1763 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1836 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1933 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1934 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1936 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1937 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1938 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1969 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2075 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2110 templates/js/translated/build.js:2475 +#: templates/js/translated/forms.js:2151 templates/js/translated/forms.js:2167 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1953 templates/js/translated/stock.js:2681 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2124 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2170 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2206 templates/js/translated/stock.js:3013 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2382 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2383 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2398 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2410 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2451 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2452 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2470 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2500 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2535 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2587 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 -msgid "Consumable Item" +#: templates/js/translated/build.js:2613 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" msgstr "" -#: templates/js/translated/build.js:2844 -msgid "Tracked item" +#: templates/js/translated/build.js:2638 +msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" +#: templates/js/translated/build.js:2643 +msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2650 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2655 templates/js/translated/stock.js:1836 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2663 msgid "Remove stock allocation" msgstr "" @@ -12655,7 +11149,7 @@ msgid "Add Supplier" msgstr "" #: templates/js/translated/company.js:243 -#: templates/js/translated/purchase_order.js:318 +#: templates/js/translated/purchase_order.js:352 msgid "Add Supplier Part" msgstr "" @@ -12667,329 +11161,329 @@ msgstr "" msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:466 +#: templates/js/translated/company.js:465 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:546 +#: templates/js/translated/company.js:536 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:555 +#: templates/js/translated/company.js:545 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:570 +#: templates/js/translated/company.js:560 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:619 +#: templates/js/translated/company.js:609 msgid "Create New Contact" msgstr "" -#: templates/js/translated/company.js:635 -#: templates/js/translated/company.js:758 +#: templates/js/translated/company.js:625 +#: templates/js/translated/company.js:748 msgid "Edit Contact" msgstr "" -#: templates/js/translated/company.js:672 +#: templates/js/translated/company.js:662 msgid "All selected contacts will be deleted" msgstr "" -#: templates/js/translated/company.js:678 -#: templates/js/translated/company.js:742 +#: templates/js/translated/company.js:668 +#: templates/js/translated/company.js:732 msgid "Role" msgstr "" -#: templates/js/translated/company.js:686 +#: templates/js/translated/company.js:676 msgid "Delete Contacts" msgstr "" -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:707 msgid "No contacts found" msgstr "" -#: templates/js/translated/company.js:730 +#: templates/js/translated/company.js:720 msgid "Phone Number" msgstr "" -#: templates/js/translated/company.js:736 +#: templates/js/translated/company.js:726 msgid "Email Address" msgstr "" -#: templates/js/translated/company.js:762 +#: templates/js/translated/company.js:752 msgid "Delete Contact" msgstr "" -#: templates/js/translated/company.js:859 +#: templates/js/translated/company.js:849 msgid "Create New Address" msgstr "" -#: templates/js/translated/company.js:874 -#: templates/js/translated/company.js:1035 +#: templates/js/translated/company.js:864 +#: templates/js/translated/company.js:1025 msgid "Edit Address" msgstr "" -#: templates/js/translated/company.js:909 +#: templates/js/translated/company.js:899 msgid "All selected addresses will be deleted" msgstr "" -#: templates/js/translated/company.js:923 +#: templates/js/translated/company.js:913 msgid "Delete Addresses" msgstr "" -#: templates/js/translated/company.js:950 +#: templates/js/translated/company.js:940 msgid "No addresses found" msgstr "" -#: templates/js/translated/company.js:989 +#: templates/js/translated/company.js:979 msgid "Postal city" msgstr "" -#: templates/js/translated/company.js:995 +#: templates/js/translated/company.js:985 msgid "State/province" msgstr "" -#: templates/js/translated/company.js:1007 +#: templates/js/translated/company.js:997 msgid "Courier notes" msgstr "" -#: templates/js/translated/company.js:1013 +#: templates/js/translated/company.js:1003 msgid "Internal notes" msgstr "" -#: templates/js/translated/company.js:1039 +#: templates/js/translated/company.js:1029 msgid "Delete Address" msgstr "" -#: templates/js/translated/company.js:1112 +#: templates/js/translated/company.js:1102 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:1127 +#: templates/js/translated/company.js:1117 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:1161 +#: templates/js/translated/company.js:1151 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:1175 +#: templates/js/translated/company.js:1165 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1469 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" -#: templates/js/translated/company.js:1208 +#: templates/js/translated/company.js:1198 msgid "Delete manufacturer parts" msgstr "" -#: templates/js/translated/company.js:1240 +#: templates/js/translated/company.js:1230 msgid "Manufacturer part actions" msgstr "" -#: templates/js/translated/company.js:1259 +#: templates/js/translated/company.js:1249 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1269 +#: templates/js/translated/company.js:1557 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1273 +#: templates/js/translated/company.js:1561 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1393 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1428 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1429 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1446 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1455 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:1496 +#: templates/js/translated/company.js:1486 msgid "Delete supplier parts" msgstr "" -#: templates/js/translated/company.js:1546 +#: templates/js/translated/company.js:1536 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1664 +#: templates/js/translated/company.js:1654 msgid "Base Units" msgstr "" -#: templates/js/translated/company.js:1694 +#: templates/js/translated/company.js:1684 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1725 +#: templates/js/translated/company.js:1715 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1726 +#: templates/js/translated/company.js:1716 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1779 +#: templates/js/translated/company.js:1769 #: templates/js/translated/pricing.js:694 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1789 +#: templates/js/translated/company.js:1779 #: templates/js/translated/pricing.js:712 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1804 +#: templates/js/translated/company.js:1794 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1833 +#: templates/js/translated/company.js:1823 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1840 +#: templates/js/translated/company.js:1830 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1841 +#: templates/js/translated/company.js:1831 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:374 templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:403 templates/js/translated/forms.js:417 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:376 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:391 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:405 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:419 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:796 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:899 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1469 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1967 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2271 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2485 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3071 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3071 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3083 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +11491,114 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +11608,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +11636,396 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:743 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1651 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2150 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2217 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2640 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2660 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2854 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 -msgid "results" -msgstr "" - -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2905 templates/js/translated/stock.js:1436 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2906 templates/js/translated/stock.js:1437 +#: templates/js/translated/stock.js:1699 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2910 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2926 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2940 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3019 templates/js/translated/part.js:3020 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3022 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3028 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3078 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3084 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3180 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3196 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3241 msgid "Minimum Stock Level" msgstr "" @@ -13619,229 +12145,227 @@ msgstr "" msgid "Duplication Options" msgstr "" -#: templates/js/translated/purchase_order.js:431 +#: templates/js/translated/purchase_order.js:450 msgid "Complete Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:448 +#: templates/js/translated/purchase_order.js:467 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" -#: templates/js/translated/purchase_order.js:454 +#: templates/js/translated/purchase_order.js:473 msgid "All line items have been received" msgstr "" -#: templates/js/translated/purchase_order.js:459 +#: templates/js/translated/purchase_order.js:478 msgid "This order has line items which have not been marked as received." msgstr "" -#: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/purchase_order.js:479 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" -#: templates/js/translated/purchase_order.js:483 +#: templates/js/translated/purchase_order.js:502 msgid "Cancel Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:488 +#: templates/js/translated/purchase_order.js:507 msgid "Are you sure you wish to cancel this purchase order?" msgstr "" -#: templates/js/translated/purchase_order.js:494 +#: templates/js/translated/purchase_order.js:513 msgid "This purchase order can not be cancelled" msgstr "" -#: templates/js/translated/purchase_order.js:515 +#: templates/js/translated/purchase_order.js:534 #: templates/js/translated/return_order.js:164 msgid "After placing this order, line items will no longer be editable." msgstr "" -#: templates/js/translated/purchase_order.js:520 +#: templates/js/translated/purchase_order.js:539 msgid "Issue Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:612 +#: templates/js/translated/purchase_order.js:631 msgid "At least one purchaseable part must be selected" msgstr "" -#: templates/js/translated/purchase_order.js:637 +#: templates/js/translated/purchase_order.js:656 msgid "Quantity to order" msgstr "" -#: templates/js/translated/purchase_order.js:646 +#: templates/js/translated/purchase_order.js:665 msgid "New supplier part" msgstr "" -#: templates/js/translated/purchase_order.js:664 +#: templates/js/translated/purchase_order.js:683 msgid "New purchase order" msgstr "" -#: templates/js/translated/purchase_order.js:705 +#: templates/js/translated/purchase_order.js:715 msgid "Add to purchase order" msgstr "" -#: templates/js/translated/purchase_order.js:755 -msgid "Merge" -msgstr "" - -#: templates/js/translated/purchase_order.js:859 +#: templates/js/translated/purchase_order.js:863 msgid "No matching supplier parts" msgstr "" -#: templates/js/translated/purchase_order.js:878 +#: templates/js/translated/purchase_order.js:882 msgid "No matching purchase orders" msgstr "" -#: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/purchase_order.js:1069 msgid "Select Line Items" msgstr "" -#: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/purchase_order.js:1070 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/purchase_order.js:1104 +#: templates/js/translated/purchase_order.js:1100 msgid "Received Quantity" msgstr "" -#: templates/js/translated/purchase_order.js:1115 +#: templates/js/translated/purchase_order.js:1111 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1187 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1201 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1202 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1205 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1213 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1224 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1276 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1301 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1303 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1329 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1330 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1398 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1399 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1413 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1678 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1744 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1840 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1858 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1928 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1939 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2222 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12397,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12459,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1744 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14100,6 +12608,10 @@ msgstr "" msgid "result" msgstr "" +#: templates/js/translated/search.js:342 +msgid "results" +msgstr "" + #: templates/js/translated/search.js:352 msgid "Minimize results" msgstr "" @@ -14108,751 +12620,730 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:389 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3267 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1429 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1432 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1456 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1520 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 -msgid "Test started" -msgstr "" - -#: templates/js/translated/stock.js:1647 -msgid "Test finished" -msgstr "" - -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1682 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1704 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1736 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1740 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1748 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1754 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1810 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1819 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1868 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1923 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1928 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1939 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:1983 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2061 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2066 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2069 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2072 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2074 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2076 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2079 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2081 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2085 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2087 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2092 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2094 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2096 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2100 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2265 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2312 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2440 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2544 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2699 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2817 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2821 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2833 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2855 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2872 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2887 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2904 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2921 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2940 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2958 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:2976 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:2984 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3056 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3108 templates/js/translated/stock.js:3143 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3165 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3186 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3187 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3189 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3190 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3191 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3192 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3205 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3268 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3281 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3285 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:601 +#: templates/js/translated/table_filters.js:613 +#: templates/js/translated/table_filters.js:654 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:618 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:659 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:775 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:707 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:755 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:696 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:511 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:708 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:713 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:721 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:729 +#: templates/js/translated/table_filters.js:825 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:730 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:734 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:735 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:739 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:747 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:759 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:821 msgid "Has Choices" msgstr "" @@ -14924,6 +13415,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14944,7 +13439,7 @@ msgstr "" msgid "New Notifications" msgstr "" -#: templates/navbar.html:144 users/models.py:201 +#: templates/navbar.html:144 users/models.py:188 msgid "Admin" msgstr "" @@ -14960,22 +13455,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15048,13 +13527,11 @@ msgstr "" msgid "The selected SSO provider is invalid, or has not been correctly configured" msgstr "" -#: templates/socialaccount/signup.html:11 +#: templates/socialaccount/signup.html:10 #, python-format -msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" - -#: templates/socialaccount/signup.html:13 -msgid "As a final step, please complete the following form" +msgid "" +"You are about to use your %(provider_name)s account to login to\n" +"%(site_name)s.
    As a final step, please complete the following form:" msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 @@ -15125,14 +13602,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15141,31 +13610,31 @@ msgstr "" msgid "No" msgstr "" -#: users/admin.py:104 +#: users/admin.py:103 msgid "Users" msgstr "" -#: users/admin.py:105 +#: users/admin.py:104 msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:249 +#: users/admin.py:248 msgid "The following users are members of multiple groups" msgstr "" -#: users/admin.py:283 +#: users/admin.py:282 msgid "Personal info" msgstr "" -#: users/admin.py:285 +#: users/admin.py:284 msgid "Permissions" msgstr "" -#: users/admin.py:288 +#: users/admin.py:287 msgid "Important dates" msgstr "" -#: users/authentication.py:29 users/models.py:138 +#: users/authentication.py:29 users/models.py:127 msgid "Token has been revoked" msgstr "" @@ -15173,67 +13642,66 @@ msgstr "" msgid "Token has expired" msgstr "" -#: users/models.py:81 +#: users/models.py:70 msgid "API Token" msgstr "" -#: users/models.py:82 +#: users/models.py:71 msgid "API Tokens" msgstr "" -#: users/models.py:118 +#: users/models.py:107 msgid "Token Name" msgstr "" -#: users/models.py:119 +#: users/models.py:108 msgid "Custom token name" msgstr "" -#: users/models.py:125 +#: users/models.py:114 msgid "Token expiry date" msgstr "" -#: users/models.py:133 +#: users/models.py:122 msgid "Last Seen" msgstr "" -#: users/models.py:134 +#: users/models.py:123 msgid "Last time the token was used" msgstr "" -#: users/models.py:138 +#: users/models.py:127 msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:372 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:381 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:385 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:385 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:389 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:393 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:395 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:401 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 61343c86397f..2265c30193dd 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -48,38 +48,34 @@ msgstr "Недопустимое количество" msgid "Invalid quantity supplied ({exc})" msgstr "Недопустимое количество ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Подробности об ошибке можно найти в панели администратора" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Записи" @@ -92,270 +88,250 @@ msgstr "Значение '{name}' отсутствует в формате ша msgid "Provided value does not match required pattern: " msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Введите пароль" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Введите новый пароль" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Подтвердить пароль" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Подтвердите новый пароль" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Старый пароль" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (еще раз)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Подтверждение адреса электронной почты" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Вы должны вводить один и тот же адрес электронной почты." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Указанный основной адрес электронной почты неверен." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Указанный домен электронной почты не утверждён." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Регистрация отключена." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "недопустимое количество" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Повторяющийся серийный номер" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Недопустимый диапазон группы: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Неверная последовательность групп: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Число уникальных серийных номеров ({s}) должно соответствовать количеству ({q})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Удалить HTML теги из этого значения" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Арабский" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Болгарский" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Чешский" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Датский" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Немецкий" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Греческий" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Английский" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Испанский" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Эстонский" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Фарси / Персидский" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Финский" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Французский" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Хинди" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Венгерский" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Итальянский" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Японский" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Корейский" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Латышский" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Голландский" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Польский" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Португальский" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Португальский (Бразильский диалект)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Румынский" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Русский" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Словацкий" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Словенский" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Сербский" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Шведский" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Тайский" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Украинский" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Китайский (Упрощенный)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" @@ -364,310 +340,349 @@ msgstr "Китайский (Традиционный)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Войти в приложение" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "EMail" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Ошибка запуска проверки плагина" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Метаданные должны быть объектом python dict" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Метаданные плагина" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Поле метаданных JSON для использования внешними плагинами" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Неправильно отформатированный шаблон" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Указан неизвестный ключ формата" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Отсутствует требуемый ключ формата" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Ссылочный идентификатор не может быть пустым" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Ссылка должна соответствовать шаблону {pattern}" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Номер ссылки слишком большой" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Файл не найден" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Отсутствует внешняя ссылка" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Вложения" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Выберите файл для вложения" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Ссылка" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Ссылка на внешний URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Комментарий" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Комментарий к файлу" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Пользователь" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "дата загрузки" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Имя файла не должно быть пустым" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Неверная директория вложений" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Имя файла содержит запрещенные символы '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Отсутствует расширение для имени файла" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Вложение с таким именем файла уже существует" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Ошибка переименования файла" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Название" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "родитель" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Записи о скидке (необязательно)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Данные штрих-кода" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Данные стороннего штрих-кода" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Хэш штрих-кода" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Уникальный хэш данных штрих-кода" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Имя пользователя" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Имя" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Имя пользователя" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Фамилия" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Фамилия пользователя" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Электронный адрес пользователя" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Персонал" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Имеет ли этот пользователь права персонала" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Суперпользователь" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Это пользователь является суперпользователем" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Активный" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Активна эта учетная запись" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "У вас недостаточно прав для изменения роли этого пользователя." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Только суперпользователи могут создавать новых пользователей" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Имя файла" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Файл данных" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Выберите файл данных для загрузки" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Неподдерживаемый тип файла" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Файл слишком большой" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Столбцы в файле не найдены" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Столбцы данных не предоставлены" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Отсутствует обязательный столбец: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Повторяющийся столбец: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Проверка фонового работника не удалась" @@ -679,27 +694,223 @@ msgstr "Сервер электронной почты не настроен" msgid "InvenTree system health checks failed" msgstr "Ошибка проверки состояния системы InvenTree" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ожидаемый" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Размещены" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Готово" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Отменено" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Потерян" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Возвращено" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Выполняется" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Доставлено" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "Да" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Требует внимания" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Поврежденный" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Разрушено" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Отклоненный" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Карантин" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Отслеживание устаревших запасов" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Складская позиция создана" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Отредактированная складская позиция" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Присвоенный серийный номер" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Новое значение запасов установлено" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Запасы, добавленные вручную" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Запасы удаленные вручную" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Место хранения изменено" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Запас обновлен" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Установленно в производимую деталь" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Удалено из производимой детали" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Установленный компонент" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Удаленный компонент" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Отделить от родительского элемента" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Разбить дочерний элемент" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Объединенные складские позиции" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Преобразовать в разновидность" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Создан выход продукции для этого заказа на производство" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Продукция заказа на производство завершена" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Продукция заказа на производство отклонена" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Поглощен заказом на производство" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Отгружено по заказу на продажу" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Получено по заказу на поставку" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Возвращено по заказу на возврат" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Отправлено клиенту" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Возвращено от клиента" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Продукция" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Возврат" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Починить" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Заменить" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Возврат" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Отклонить" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Неизвестная база данных" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Неверная физическая единица" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Значение избытка не должно быть отрицательным" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Избыток не может превысить 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Неверное значение для избытка" @@ -727,105 +938,62 @@ msgstr "Информация о системе" msgid "About InvenTree" msgstr "О программе InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Родительский заказ на производство" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "Назначено мне" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Создано" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Расходники" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Необязательно" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Производимая деталь" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Доступно" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Заказ на производство" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Заказ на производство" msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "Сборка BOM не подтверждена" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "Порядок сборки не может быть создан для неактивной части" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "Порядок сборки не может быть создан для разблокированной части" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Неверный выбор для родительской сборки" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" -msgstr "Должен быть указан ответственный пользователь или группа" +msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Отсылка" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Родительский заказ на производство" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Заказ на производство, которому принадлежит этот заказ на производство" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Деталь" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Место хранения - источник" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "выполнено" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Создано" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Ссылка на внешний URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "Не удалось выгрузить задачу для распределения на сборку" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "Номер позиции для производства" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Количество" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Установить в" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Наименование детали" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "Название кода проекта" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Расположение" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "Для отслеживаемых частей должны быть указаны серийные номера" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Расположение" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Статус" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, если запасы не были полностью распределены" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Удалить зарезервированный запас" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Вычесть запасы, которые уже были зарезервированы для этого производства" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" -msgstr "Элемент должен быть в наличии" - -#: build/serializers.py:949 order/serializers.py:1351 -#, python-brace-format -msgid "Available quantity ({q}) exceeded" -msgstr "Превышено доступное количество ({q})" - -#: build/serializers.py:955 -msgid "Build output must be specified for allocation of tracked parts" -msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" - -#: build/serializers.py:962 -msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" - -#: build/serializers.py:986 order/serializers.py:1610 -msgid "Allocation items must be provided" -msgstr "Необходимо указать резервируемые элементы" - -#: build/serializers.py:1049 -msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" - -#: build/serializers.py:1057 -msgid "Exclude Location" -msgstr "Исключить место хранения" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "Исключить складские позиции из этого выбранного места хранения" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "Обменный остаток" - -#: build/serializers.py:1064 -msgid "Stock items in multiple locations can be used interchangeably" -msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" - -#: build/serializers.py:1069 -msgid "Substitute Stock" -msgstr "Заменить остатки" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "Разрешить резервирование замещающих деталей" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "Необязательные элементы" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "Не удалось запустить задачу автораспределения" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Код производителя" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Имя Места Хранения" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Упаковка" +msgstr "Элемент должен быть в наличии" -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "Код детали" +#: build/serializers.py:865 order/serializers.py:1233 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN детали" +#: build/serializers.py:871 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Описание детали" +#: build/serializers.py:878 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" +#: build/serializers.py:902 order/serializers.py:1485 +msgid "Allocation items must be provided" +msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" +#: build/serializers.py:965 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Серийный номер" +#: build/serializers.py:973 +msgid "Exclude Location" +msgstr "Исключить место хранения" -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "Зарезервированное количество" +#: build/serializers.py:974 +msgid "Exclude stock items from this selected location" +msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Доступный запас" +#: build/serializers.py:979 +msgid "Interchangeable Stock" +msgstr "Обменный остаток" -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" +#: build/serializers.py:980 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" +#: build/serializers.py:985 +msgid "Substitute Stock" +msgstr "Заменить остатки" -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Отслеживание" +#: build/serializers.py:986 +msgid "Allow allocation of substitute parts" +msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "Унаследованные" +#: build/serializers.py:991 +msgid "Optional Items" +msgstr "Необязательные элементы" -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Разрешить разновидности" +#: build/serializers.py:992 +msgid "Allocate optional BOM items to build order" +msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Зарезервированные Запасы" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "В заказе" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "Внешний склад" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Ожидаемый" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Продукция" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Отменено" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Готово" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Необходимый запас для заказа на производство" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Просроченный заказ сборки" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" @@ -1764,8 +1721,8 @@ msgstr "Миниатюра детали" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Действия со штрих-кодом" @@ -1776,7 +1733,7 @@ msgstr "Действия со штрих-кодом" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Показать QR-код" @@ -1787,9 +1744,9 @@ msgstr "Показать QR-код" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Отвязать штрих-код" @@ -1800,7 +1757,7 @@ msgstr "Отвязать штрих-код" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Привязать штрих-код" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Редактировать производство" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Дублировать производство" +msgid "Cancel Build" +msgstr "Отменить производство" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Дублировать производство" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Отменить производство" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Удалить производство" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Завершить производство" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Описание производства" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Не указана продукция для этого заказа на производство" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Заказ на производство готов быть отмечен как выполненный" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Заказ на производство не может быть выполнен, так как осталась незавершенная продукция" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Требуемое кол-во не было произведено" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Остатки не были полностью зарезервированы для этого заказа на производство" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Целевая дата" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Производство было просрочено на %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Просрочено" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Завершенная продукция" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Заказ на продажу" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Создано" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Приоритет" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "Удалить заказ на производство" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "QR-код заказа на производство" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "Привязать штрих-код для заказа на производство" @@ -1968,8 +1911,8 @@ msgstr "Источник запаса" msgid "Stock can be taken from any available location." msgstr "Остатки не могут быть получены из любого доступного места хранения." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Назначение" @@ -1981,23 +1924,23 @@ msgstr "Место назначения не указано" msgid "Allocated Parts" msgstr "Зарезервированные детали" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Партия" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Создано" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Нет конечной даты" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Завершённые" @@ -2015,13 +1958,13 @@ msgstr "Завершённые" msgid "Build not complete" msgstr "Производство не завершено" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Дочерние заказы на производство" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Зарезервировать остатки для производства" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,13 +1986,13 @@ msgstr "Автоматически Зарезервировать" msgid "Manually allocate stock to build" msgstr "Вручную зарезервировать остатки для производства" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Зарезервировать Остатки" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "Заказать необходимые части" +msgstr "" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 @@ -2072,19 +2015,15 @@ msgstr "Создать выход производства" msgid "New Build Output" msgstr "Новая продукция" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Поглощенные Остатки" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Завершенная продукция" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Файлы" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Записи производства" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Резервирование Завершено" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Все позиции были полностью зарезервированы" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Новый заказ на производство" @@ -2120,57 +2059,10 @@ msgstr "Новый заказ на производство" msgid "Build Order Details" msgstr "Подробности Заказа на Производство" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Позиции" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Незавершенная продукция" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "Ссылка" - -#: common/api.py:701 -msgid "Is File" -msgstr "Файл" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "У пользователя нет прав на удаление этого вложения" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Неверный код валюты" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "Код валюты дублируется" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "Не указаны действительные коды валют" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Нет плагина" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "Файл {name.title()}" msgid "Select {name} file to upload" msgstr "Выберите {name} файл для загрузки" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Обновлено" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Временная метка последнего обновления" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "URL сайта заблокирован настройками" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Уникальный код проекта" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Описание проекта" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Ключ настроек (должен быть уникальным - не чувствителен к регистрам)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Нет группы" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Пустой домен не допускается." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Недопустимое доменное имя: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Нет плагина" + +#: common/models.py:1259 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Название сервера" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Название инстанса" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Название компании" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Базовая ссылка" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "Поддерживаемые валюты" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "Список поддерживаемых кодов валют" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "дней" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Позволяет переопределить user-Agent, используемый для загрузки изображений и файлов с внешнего URL (оставьте пустым по умолчанию)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Требуется подтверждение" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Требовать явное подтверждение пользователя для определенного действия." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Глубина дерева" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Глубина дерева по умолчанию для просмотра дерева. Глубокие уровни загружены по мере необходимости." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "Отображать данные штрих-кода в браузере в виде текста" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "Плагин генерации штрих-кода" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "Разрешить удаление из заказа" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "Разрешить удаление частей, которые используются в заказе" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" -msgstr "Регулярное выражение IPN" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Шаблон" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Производимая деталь" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Компонент" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Можно купить" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Можно продавать" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Отслеживание" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Виртуальная" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Показать Импорт в просмотре" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" -msgstr "Отобразить мастер импорта на некоторых видах деталей" +msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" -msgstr "Разрешить создание начального запаса при добавлении новой детали" +msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" +msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" -msgstr "Принудительное применение единиц измерения параметров" +msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" +msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Режим отладки" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Размер страницы" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Включить отчеты" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Прикрепить отчеты о тестах" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "При печати отчета о тестировании приложить копию тестового отчета к соответствующему складской позиции" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" -msgstr "Глобально уникальные серийные номера" +msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" -msgstr "Автоматическое заполнение серийных номеров" +msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" -msgstr "Автоматическое заполнение серийных номеров в формах" +msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" -msgstr "Удалить исчерпанный запас" +msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" -msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" -msgstr "Код партии Шаблона" +msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" -msgstr "Включить функцию истечения срока годности" +msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" -msgstr "Использовать просроченные остатки в производстве" +msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" -msgstr "Разрешить продажу просроченных запасов" +msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" -msgstr "Контроль за собственными запасами" +msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" -msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" +msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" -msgstr "Значок местоположения по умолчанию" +msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" -msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" +msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" -msgstr "Проверять спецификацию при установке изделий" +msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "Разрешить передачу товара, отсутствующего на складе" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" +msgstr "" -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" -msgstr "Требуется ответственный владелец" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "Ответственный владелец должен быть назначен для каждого заказа" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 +msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Включить заказы на возврат" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" -msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе" +msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" -msgstr "Шаблон заказа на возврат товара" +msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" -msgstr "Необходимый шаблон для создания поля «Возврат заказа»" +msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" -msgstr "Редактировать завершенные возвратные заказы" +msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" -msgstr "Разрешить редактирование возвращенных заказов после их завершения" +msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" -msgstr "Шаблон заказа на возврат товара" +msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" -msgstr "Необходимый шаблон для создания поля «Возврат заказа»" +msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершенные заказы на покупку" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" -msgstr "Разрешить регистрацию" +msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Включить SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Написать дважды" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Пароль дважды" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить складские позиции во внешних местах хранения из инвентаризации" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" -msgstr "Автоматический период инвентаризации" +msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "Количество дней между автоматической записью запасов (установите нулевое значение для отключения)" +msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" -msgstr "Интервал удаления журнала ошибок" +msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" -msgstr "Журналы ошибок будут удалены после указанного количества дней" +msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" -msgstr "Показывать полные имена пользователей" +msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" -msgstr "Отображать полные имена пользователей вместо логинов" +msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" -msgstr "Включить данные тестовой станции" +msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" -msgstr "Включить сбор данных с тестовой станции для получения результатов тестирования" +msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" -msgstr "Ключ настроек (должен быть уникальным - не чувствителен к регистру)" +msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" -msgstr "Скрыть неактивные детали" +msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "Скрывать неактивные части в результатах, отображаемых на главной странице," +msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Показывать детали, на которые включены уведомления" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Показывать детали, на которые включены уведомления, на главной странице" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Показывать категории, на которые включены уведомления" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Показывать категории, на которые включены уведомления, на главной странице" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Показывать последние детали" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Показывать последние детали на главной странице" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" -msgstr "Показывать недопустимые спецификации" +msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Показывать BOMы, ожидающие проверки, на главной странице" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Показывать изменившиеся складские запасы" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Показывать складские позиции с недавно изменившимися запасами на главной странице" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Показывать низкие складские запасы" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Показывать складские позиции с низкими запасами на главной странице" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Показывать закончившиеся складские позиции" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Показывать закончившиеся складские позиции на главной странице" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Показывать требуемые складские позиции" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Показывать требуемые для производства складские позиции на главной странице" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Показывать складские позиции с истекшим сроком годности" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Показывать складские позиции с истёкшим сроком годности на главной странице" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Показывать залежалые складские позиции" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Показывать складские позиции с истекающим сроком годности на главной странице" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Показывать незавершённые производства" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Показывать незавершённые производства на главной странице" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Показывать просроченные производства" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Показывать просроченные производства на главной странице" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" -msgstr "Показать невыполненные заказы" +msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" -msgstr "Покажите невыполненные заказы на покупку на главной странице" +msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Показать просроченные заказы на производство" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" -msgstr "Показывать просроченные сборки на главной странице" +msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" -msgstr "Показать невыполненные заказы" +msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" -msgstr "Покажите невыполненные заказы на покупку на главной странице" +msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Показать просроченные заказы на продажу" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" -msgstr "Показывать просроченные заказы на покупку на главной странице" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Показывать новости" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "Отображение PDF-этикетки в браузере вместо загрузки в виде файла" +msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" -msgstr "Принтер этикетки по умолчанию" +msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" -msgstr "Настроить принтер этикеток по умолчанию" +msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" -msgstr "Отображение встроенного отчета" +msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "Отображение PDF-этикетки в браузере вместо загрузки в виде файла" +msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Поиск Деталей" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" -msgstr "Отображение деталей в окне предварительного просмотра поиска" +msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "Поиск деталей поставщика" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" -msgstr "Отображение деталей поставщика в окне предварительного просмотра поиска" +msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" -msgstr "Новая деталь производителя" +msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" -msgstr "Отображение деталей поставщика в окне предварительного просмотра поиска" +msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" -msgstr "Скрыть неактивные детали" +msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" -msgstr "Исключить неактивные детали из окна предварительного просмотра поиска" +msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" -msgstr "Категории поиска" +msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" -msgstr "Отображение деталей в окне предварительного просмотра поиска" +msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Поиск Запасов" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Отображать складские позиции в окне предварительного просмотра поиска" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Скрыть недоступные складские позиции" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Исключить недоступные складские позиции из окна предварительного просмотра поиска" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Поиск мест хранения" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" -msgstr "Отображать места хранения в окне предварительного просмотра поиска" +msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Поиск компаний" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Поиск заказов на производство" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Отображать заказы на производство в окне предварительного просмотра поиска" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" -msgstr "Поиск заказов на покупку" +msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Поиск заказов на продажу" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Поиск заказов на возврат" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Поиск по Regex" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Фиксированная панель навигации" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Формат даты" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Планирование деталей" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Инвентаризация детали" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Шаблон складской позиции по умолчанию" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "Шаблон метки складской позиции для автоматического выбора" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Пользователь" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Цена" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Активный" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "Токен" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Секрет" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Хост" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Заголовок" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Тело" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Работал над" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "Код" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Заголовок" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Ссылка" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Опубликовано" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Автор" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Итого" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Читать" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Изображение" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Символ" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Определение" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Вложения" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Файл не найден" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Отсутствует внешняя ссылка" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Выберите файл для вложения" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Комментарий" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Полученные элементы" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "Функция" -#: common/serializers.py:414 -msgid "Function name" -msgstr "Имя функции" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Аргументы" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Аргументы задачи" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Имя файла" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" +#: common/serializers.py:372 +msgid "Function name" +msgstr "Имя функции" -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" +#: common/serializers.py:374 +msgid "Arguments" +msgstr "Аргументы" -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" +#: common/serializers.py:374 +msgid "Task arguments" +msgstr "Аргументы задачи" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" +#: common/serializers.py:377 +msgid "Keyword Arguments" msgstr "" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" +#: common/serializers.py:377 +msgid "Task keyword arguments" msgstr "" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Пустой домен не допускается." - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Недопустимое доменное имя: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "Детали импортированы" msgid "Previous Step" msgstr "Предыдущий шаг" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Компания" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Компании" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Описание компании" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Описание компании" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Сайт" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Сайт компании" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Телефон" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Контактный телефон" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Контактный EMail" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Контакт" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Контактное лицо" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "покупатель" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Вы продаёте детали этой компании?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "поставщик" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Вы закупаете детали у этой компании?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "производитель" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Является ли компания производителем деталей?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Для этой компании используется валюта по умолчанию" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Адрес" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Адреса" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Компания" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Выберите компанию" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "Заголовок адреса" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Строка 1" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Адресная строка 1" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Строка 2" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Адресная строка 2" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Почтовый индекс" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Город/Регион" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "Регион/Область" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Страна" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Страна адреса" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Записи отправления" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Записи для курьера" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Внутренние записи отправления" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Записи отправления для внутреннего пользования" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" -msgstr "Ссылка на адресную информацию (внешняя)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Деталь производителя" +msgstr "" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Базовая деталь" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Выберите деталь" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Производитель" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Код производителя" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "Ссылка на сайт производителя" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" -msgstr "Описание детали производителя" - -#: company/models.py:575 -msgid "Manufacturer Part Parameter" msgstr "" -#: company/models.py:594 +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Деталь производителя" + +#: company/models.py:614 msgid "Parameter name" msgstr "Наименование параметра" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Значение" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Значение параметра" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Ед.изм" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Единицы измерения параметра" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Деталь поставщика" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" -msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" +msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Поставщик" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Код поставщика" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Выберите производителя части" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "Ссылка на сайт поставщика" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" -msgstr "Описание детали поставщика" +msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Запись" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Упаковка" + +#: company/models.py:864 msgid "Part packaging" msgstr "Упаковка детали" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Кол-во в упаковке" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "множественные" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Кратность заказа" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "На складе" @@ -4571,8 +4257,8 @@ msgstr "На складе" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Неактивный" @@ -4607,11 +4293,11 @@ msgstr "Удалить компанию" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Изображение детали" @@ -4630,17 +4316,17 @@ msgstr "Скачать изображение по ссылке" msgid "Delete image" msgstr "Удалить изображение" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Покупатель" @@ -4648,12 +4334,19 @@ msgstr "Покупатель" msgid "Uses default currency" msgstr "Использовать валюту по умолчанию" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Адрес" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Телефон" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "Удалить Изображение" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Удалить" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "Загрузить Изображение" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "Скачать изображение" @@ -4690,7 +4383,7 @@ msgstr "Создать новую деталь поставщика" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Новая деталь поставщика" @@ -4703,7 +4396,7 @@ msgstr "Детали производителя" msgid "Create new manufacturer part" msgstr "Создать новую деталь производителя" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Новая деталь производителя" @@ -4717,7 +4410,7 @@ msgstr "Склад поставщика" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Новый заказ на закупку" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Производители" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Заказать деталь" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Поставщики" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Параметры" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Новый параметр" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "Добавить параметр" @@ -4887,6 +4575,19 @@ msgstr "Назначенные складские позиции" msgid "Contacts" msgstr "Контакты" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Адреса" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Деталь поставщика" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Заказать Деталь" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Создать новую складскую позицию" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Новая складская позиция" @@ -4966,33 +4667,29 @@ msgstr "Информация о цене" msgid "Add Price Break" msgstr "Добавить разрыв цен" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" -msgstr "Привязать штрихкод к части поставщика" +msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Складские позиции" @@ -5018,242 +4715,140 @@ msgstr "Покупатели" msgid "New Customer" msgstr "Новый покупатель" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Компании" + #: company/views.py:52 msgid "New Company" msgstr "Новая компания" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Размещены" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Столбцы" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "Номер строки" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Данные" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "Ошибки" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Корректный" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Имя метки" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "Строки" +#: label/models.py:136 +msgid "Label" +msgstr "Метка" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Включено" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Ширина [мм]" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "Инициализация" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Высота [мм]" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Шаблон имени файла" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Фильтры" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR Код" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR код" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "Копии" +msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" -msgstr "Подключен" +msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Неизвестно" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "Печать" - -#: machine/machine_types/label_printer.py:234 -msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" +#: machine/machine_types/label_printer.py:236 +msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "Расположение принтера" +msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "Имя машины" +msgstr "" #: machine/models.py:29 msgid "Machine Type" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Общая стоимость" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Статсу заказа" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Ссылка на заказ" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "Невыполненный" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Заказ" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Заказ на возврат" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "Контакт не соответствует выбранной компании" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" -msgstr "Ссылка на внешнюю страницу" +msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "Создал" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "Пользователь или группа, ответственная за этот заказ" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "Компания, в которой детали заказываются" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "получил" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Дата создания" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Контекст" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "удалено" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Получено" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Доставлено" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Проверн" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Отправление" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Строка" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Элемент" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Результат" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Имя поставщика" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Валюта цены закупки" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Внутренний код детали" +msgstr "" -#: order/serializers.py:568 -msgid "Internal Part Name" +#: order/serializers.py:477 +msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Потерян" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Возвращено" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Выполняется" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Возврат" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Починить" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Заменить" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Возврат" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Отклонить" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Просроченные заказы на закупку" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Редактировать заказ" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Дублировать заказ" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Отменить заказ" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Дублировать заказ" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "Оформить Заказа" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Завершить заказ" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Ссылка на заказ" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Описание заказа" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Завершенные позиции" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Не завершен" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Создан" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Общая стоимость" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "Дублировать выбранное" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Удалить строку" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "Шаг %(step)s из %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Позиции" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Полученные Запасы" @@ -6243,7 +5729,7 @@ msgstr "Позиции заказа на закупку" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Добавить позицию" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Общая Стоимость" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "Сведения о заказе" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Отправить" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Ожидающие отправления" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Действия" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "Код детали" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Наименование детали" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Описание детали" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Ревизия" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Ключевые слова" @@ -6423,16 +5917,15 @@ msgstr "Ключевые слова" msgid "Part Image" msgstr "Изображение Детали" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "Код категории" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Название категории" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Разновидность" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -6452,187 +5945,165 @@ msgstr "Минимальный запас" msgid "Used In" msgstr "Используется в" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "Производится" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID родителя" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Имя родителя" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Путь к категории" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Детали" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "Уровень BOM" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "ID Элемента BOM" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "Родительский IPN" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "IPN детали" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Остатки произведенные заказом на производство" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Остатки требуемые для заказов на производство" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Корректный" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Необходимо выбрать эту опцию" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Категория" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Место хранения по умолчанию" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Общий запас" @@ -6641,1148 +6112,1024 @@ msgstr "Общий запас" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Категория детали" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Место хранения по умолчанию для деталей этой категории" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Структура" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Детали не могут быть непосредственно отнесены к структурной категории, но могут быть отнесены к дочерним категориям." -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Ключевые слова по умолчанию" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "Ключевые слова по умолчанию для деталей этой категории" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Иконка" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Иконка (необязательно)" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." -msgstr "Часть с таким именем, IPN и ревизией уже существует." +msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "Категория" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Внутренний код детали" + +#: part/models.py:912 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Поставщик по умолчанию" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Последняя инвентаризация" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Количество Элементов" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Дата" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Дополнительные Записи" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Отчет" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Количество Деталей" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Шаблоны тестирования могут быть созданы только для отслеживаемых деталей" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Включено" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Требуется" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Варианты" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Название параметра" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" -msgstr "Описание параметра" +msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Чекбокс" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "Варианты" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Родительская деталь" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Шаблон параметра" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Данные" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Значение Параметра" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Значение по умолчанию" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "Код или наименование детали" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Значение IPN" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Уровень" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "Уровень BOM" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник. (она не отслеживается в заказах на производство)" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Перерасход" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Расчетное количество перерасходов производства (абсолютное или процентное)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Записи о позиции BOM" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Проверен" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Разрешить разновидности" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Складские позиции для разновидностей деталей могут быть использованы для этой позиции BOM" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Часть 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Часть 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Выберите связанную часть" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" -msgstr "Результаты" +msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Не выбрана ни одна деталь" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Выберите категорию" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Код производителя" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "Исключить складские позиции в внешних местах хранения" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Обновить детали" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Можно произвести" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" -msgstr "Пропустить некорректные строки" +msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Подходящая деталь не найдена" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Некорректное количество" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Общее количество" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Выполнить инвентаризацию для этой части категории" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Вы подписаны на уведомления для данной категории" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Включить уведомления для данной категории" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Действия с категорией" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Удалить категорию" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Удалить категорию" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Категория детали верхнего уровня" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Детали (включая подкатегории)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Создать новую деталь" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Новая деталь" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Параметры детали" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Создать новую категорию деталей" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Новая категория" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Инвентаризация" @@ -7946,105 +7293,101 @@ msgstr "Шаблоны тестирования детали" msgid "Add Test Template" msgstr "Добавить шаблон тестирования" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Записи Детали" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Разновидности детали" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Создать новую разновидность" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Новая разновидность" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Связанные детали" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Добавить Связанные" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Спецификация" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Экспорт" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Экспорт BOM" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Печать отчета о BOM" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "Действия с BOM" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Загрузить BOM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Проверить BOM" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Добавить элемент BOM" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Производимые детали" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Производства детали" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Резервы заказа на производство" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Поставщики" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "Связанная деталь" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "Добавить связанную деталь" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "Формат" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Выбрать формат файла" @@ -8103,7 +7446,7 @@ msgstr "Включить уведомления для данной детали #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Печать этикетки" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Действия со складом" @@ -8125,7 +7468,7 @@ msgstr "Установить запасы детали" msgid "Transfer part stock" msgstr "Переместить запасы детали" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Действия с деталью" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Показать описание детали" @@ -8188,47 +7531,51 @@ msgstr "Зарезервировано заказами на производс msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Можно произвести" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Минимальный складской запас" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Диапазон цен" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Последний Серийный Номер" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "QR-код детали" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "Рассчитать" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "Скрыть описание детали" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Разновидности" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Склад" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Редактировать" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Последнее обновление" @@ -8380,7 +7727,7 @@ msgstr "" #: part/templates/part/prices.html:164 msgid "Price range data is not available for this part." -msgstr "Данные о ценовом диапазоне недоступны для данной детали." +msgstr "" #: part/templates/part/prices.html:175 part/templates/part/prices.html:207 #: part/templates/part/prices.html:228 part/templates/part/prices.html:251 @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "Обновить цены" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Нет запасов" @@ -8486,7 +7833,7 @@ msgstr "Изображение детали не найдено" msgid "Part Pricing" msgstr "Цена Детали" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "Действие не указано" msgid "No matching action found" msgstr "Соответствующее действие не найдено" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "Штрих-код не соответствует существующим складским позициям" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "Складская позиция не соответствует позиции" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,119 +7946,87 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 -msgid "Label printing failed" -msgstr "" - -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:28 -msgid "Provides native support for barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/integration/core_notifications.py:35 -#: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" +#: plugin/base/label/label.py:39 +msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" +#: plugin/base/label/mixins.py:63 +msgid "Error rendering label to PDF" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" +#: plugin/base/label/mixins.py:76 +msgid "Error rendering label to HTML" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" +#: plugin/builtin/barcodes/inventree_barcode.py:25 +msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" +#: plugin/builtin/barcodes/inventree_barcode.py:26 +msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" +#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/integration/core_notifications.py:35 +#: plugin/builtin/integration/currency_exchange.py:21 +#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" msgstr "" #: plugin/builtin/integration/core_notifications.py:34 @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "Режим отладки" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "Граница" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "Альбомная" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Ключ" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Ключ плагина" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Имя Упаковки" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Установлено" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Образец плагина" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Встроенный плагин" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Плагин" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Метод" @@ -8998,17 +8302,17 @@ msgstr "Метод" msgid "No author found" msgstr "Автор не найден" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Полная перезагрузка" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Принудительная перезагрузка" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "Собрать плагины" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Активировать плагин" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "Элементы" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Отчет тестирования" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "Правовая информация" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "Письмо" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Название шаблона" -#: report/models.py:156 -msgid "Template description" -msgstr "Описание шаблона" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "Номер ревизии (автоматически)" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Шаблон имени файла" +#: report/models.py:183 +msgid "Report template file" +msgstr "Файл шаблона отчёта" -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:204 +msgid "Page size for PDF reports" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "Фильтры" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:210 +msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:302 -msgid "Page size for PDF reports" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:308 -msgid "Render report in landscape orientation" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Ширина [мм]" - -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Высота [мм]" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Включить результаты тестирования для складских позиций установленных в производимую деталь" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Фильтры производства" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Фильтры запросов производства (разделенные запятыми список ключей=значения пар ключей" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "Прогресс" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Фильтры деталей" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "Выходной файл" - -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "Сгенерированный выходной файл" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Сниппет" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" -msgstr "Описание файла сниппета" +msgstr "" + +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" -#: report/models.py:528 +#: report/models.py:722 msgid "Asset" msgstr "Объект" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" -msgstr "Описание медиафайла" - -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" msgstr "" -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR Код" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR код" - #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Необходимые материалы" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Требуется для" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Цена за Единицу" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "Дополнительные элементы" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Всего" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Серийный номер" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Отчет тестирования складской позиции" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Результаты тестирования" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "Тестирование" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Результат" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Прошел" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Провален" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Нет результата" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Установленные элементы" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Серийный номер" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "Код места хранения" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Имя Места Хранения" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Путь места хранения" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "Код складской позиции" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Код статуса" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "Код детали поставщика" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "ID Поставщика" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Имя поставщика" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "ID Клиента" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Установлено в" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "Код производства" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "ID заказа на продажу" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Требуется рецензия" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Истекает" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Места хранения" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Владелец" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Выберите владельца" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Складские позиции не могут находиться в структурных местах хранения, но могут находиться в дочерних местах хранения." -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Внешний" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Тип Места Хранения" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Где находиться эта складская позиция?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Результат тестирования" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Записи Тестирования" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Родительский элемент" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Просрочен" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Дочерние элементы" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Опциональное поле записей" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Записи о слияниях запасов" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить слияние складских позиций с различными поставщиками" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить слияние складских позиций с различными статусами" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 msgid "No Change" -msgstr "Нет изменений" +msgstr "" -#: stock/serializers.py:1551 +#: stock/serializers.py:1322 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "Статус складской позиции" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "Записи о перемещениях запасов" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "Да" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Требует внимания" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Поврежденный" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Разрушено" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Отклоненный" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Карантин" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Отслеживание устаревших запасов" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Складская позиция создана" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Отредактированная складская позиция" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Присвоенный серийный номер" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Новое значение запасов установлено" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Запасы, добавленные вручную" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Запасы удаленные вручную" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Место хранения изменено" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Запас обновлен" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Установленно в производимую деталь" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Удалено из производимой детали" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Установленный компонент" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Удаленный компонент" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Отделить от родительского элемента" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Разбить дочерний элемент" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Объединенные складские позиции" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Преобразовать в разновидность" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Создан выход продукции для этого заказа на производство" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Продукция заказа на производство завершена" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Продукция заказа на производство отклонена" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Поглощен заказом на производство" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Отгружено по заказу на продажу" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Получено по заказу на поставку" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Возвращено по заказу на возврат" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Отправлено клиенту" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "Статус складской позиции" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Возвращено от клиента" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "Записи о перемещениях запасов" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "Данные тестов" msgid "Test Report" msgstr "Отчет тестирования" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Удалить данные тестирования" @@ -10316,15 +9335,15 @@ msgstr "Записи складской позиции" msgid "Installed Stock Items" msgstr "Установленные складские позиции" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Установить складскую позицию" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Удалить все результаты тестирования для этой складской позиции" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "Добавить Результат Тестирования" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Сканировать в место хранения" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Действия печати" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Установить запасы" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Добавить Остатки" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Удалить запасы" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Сериализовать запасы" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Переместить запасы" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "Удалить складскую позицию" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Производство" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Родительский элемент" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Вы не в списке владельцев этого элемента. Складская позиция не может быть отредактирована." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Только для чтения" @@ -10469,8 +9492,12 @@ msgstr "следующая страница" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Доступный запас" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Место хранения не установлено" @@ -10487,6 +9514,11 @@ msgstr "Эта складская позиция не прошла требуе msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Просрочен" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "QR-код складской позиции" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "Привязать штрих-код к складской позиции" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Предупреждение" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "Преобразовать складскую позицию" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "Вернуть на склад" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Сканировать складские позиции в это место хранения" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Сканировать в складские позиции" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Действия с местом хранения" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Редактировать место хранения" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Удалить место хранения" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Склад верхнего уровня" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Ответственный за место хранения" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Создать новое место хранения" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Новое место хранения" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "места хранения" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "Запас" msgid "Allocations" msgstr "Места хранения" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Дочерние элементы" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Доступ запрещён" @@ -10797,7 +9829,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:89 #: templates/js/translated/notification.js:85 msgid "Delete Notification" -msgstr "Удалить уведомление" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" @@ -10840,14 +9872,14 @@ msgstr "Настройки входа" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Регистрация" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" -msgstr "Единый вход" +msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "Настройки деталей" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Импорт деталей" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Импорт детали" @@ -10922,47 +9954,47 @@ msgstr "Настройки плагинов" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Плагины" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Установить плагины" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Перезагрузить плагины" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "Стадия" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Сообщения" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" -msgstr "Информация о плагине" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" -msgstr "нет информации о версии" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:61 msgid "License" @@ -10974,15 +10006,15 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:76 msgid "Package information" -msgstr "Информация о пакете" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:82 msgid "Installation method" -msgstr "Способ установки" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:85 msgid "This plugin was installed as a package" -msgstr "Этот плагин был установлен как пакет" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:87 msgid "This plugin was found in a local server path" @@ -10990,11 +10022,11 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:93 msgid "Installation path" -msgstr "Путь установки" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "Встроенный" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "Образец" @@ -11038,20 +10070,20 @@ msgstr "Настройки заказа на закупку" msgid "Pricing Settings" msgstr "Настройки ценообразования" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Курсы Валют" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Обновить Сейчас" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Последнее обновление" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Никогда" @@ -11104,12 +10136,12 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" -msgstr "Оценить" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Удалить" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "группа" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "Редактировать шаблон" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "Удалить шаблон" @@ -11162,41 +10194,41 @@ msgstr "Удалить шаблон" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" -msgstr "Типы местоположения склада не найдены" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "Количество мест хранения" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Главная страница" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "Настройки заказов на продажу" msgid "Stock Settings" msgstr "Настройки склада" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "Настройки учётной записи" msgid "Change Password" msgstr "Изменить пароль" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Имя пользователя" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Имя" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Фамилия" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Следующие адреса электронной почты связаны с вашей учётной записью:" @@ -11318,7 +10362,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:135 msgid "TOTP" -msgstr "TOTP" +msgstr "" #: templates/InvenTree/settings/user.html:141 msgid "Static" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Активные Сессии" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP Адрес" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Устройство" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Последняя активность" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s назад" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "Подтверждение адреса электронной почт msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Пожалуйста, подтвердите, что %(email)s является адресом электронной почты пользователя %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Подтвердить" @@ -11563,26 +10607,26 @@ msgstr "Подтвердить" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Эта ссылка для подтверждения электронной почты устарела или является недействительной. Пожалуйста, отправьте новый запрос на подтверждение электронной почты." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Вход" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Не член?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Зарегистрироваться" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Забыли пароль?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "или войти с помощью" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Вернуться на сайт" @@ -11710,19 +10754,15 @@ msgstr "Шаг 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Шаг 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Проверить" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Требуемое кол-во" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Минимальное количество" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "Нет ответа" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "Редактировать вложения" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "Дата загрузки" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "Редактировать вложения" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Сканировать штрихкод" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "Отсоединить" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "Удалить складскую позицию" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "Сканировать складские позиции в место хранения" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "Сканировать штрих-код складской позиции и проверить в этом месте хранения" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "Отметить" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "Складская позиция уже в этом месте хранения" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "Добавленная складская позиция" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "Штрих-код не совпадает с допустимыми складскими позициями" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "Данные строк" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Расходник" @@ -12231,7 +11271,7 @@ msgstr "Просмотр BOM" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Необходимая деталь" @@ -12239,120 +11279,120 @@ msgstr "Необходимая деталь" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "Редактировать заказ на производство" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "Складские позиции были зарезервированы для этого заказа на производство" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "У этого заказа на производство осталась незавершенная продукция" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "Этот заказ на производство не может быть завершен, так как имеет незавершенный выход деталей" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "BOM содержит отслеживаемые детали" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "Продукция должна создаваться индивидуально" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "Ведите серийные номера для создания нескольких единиц продукции" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "Создать Выход Продукции" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "Зарезервировать складские позиции для этой продукции" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "Отменить резерв этой продукции" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "Завершить продукцию" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "Списать продукцию" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "Удалить продукцию" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "Вы уверены, что хотите отменить резерв выбранных складских позиций из этого производства?" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "Отменить резерв складских позиций" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "Выбрать Продукцию" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "Как минимум одна единица продукции должна быть выбрана" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "Выбранная продукция будет отмечена как завершенная" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "Продукция" @@ -12376,263 +11416,231 @@ msgstr "Зарезервированная складская позиция б msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "Списать Продукцию" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "Выбранная продукция будет удалена" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "Продукция будет полностью удалена" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "Зарезервированные складские позиции были возвращены на склад" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "Удалить Продукцию" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 +#: templates/js/translated/build.js:960 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" +msgstr "Зарезервированное количество" + +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "Завершенная продукция" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "Списанная продукция" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "Удаленная продукция" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "продукция" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "продукция" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "Действия с продукцией" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "Активная продукция не найдена" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "Зарезервированные Строки" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "Требуемые тесты" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "Выбрать детали" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "Выберите место хранения - источник (оставьте пустым, чтобы взять из всех мест)" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "Зарезервировать складские позиции для этого заказа на производства" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "Нет совпадающих складских позиций" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Складские позиции будут автоматически зарезервированы на этот заказ на производстве, в соответствии с указанными рекомендациями" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "Зарезервировать Складские Позиции" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Выбрать" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "Прогресс" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "Редактировать Резерв" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "строка производства" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "позиция производства" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Отслеживаемая деталь" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "Количество единиц" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Расходник" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Отслеживаемый элемент" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Запасы производства" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "Заказать запасы" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Зарезервировать Остатки" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "Заказать детали" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "Деталь-шаблон" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "Производимая Деталь" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "Удалить параметр" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "Удалить параметр" @@ -12877,119 +11885,119 @@ msgstr "Изменить разрыв цен" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" -msgstr "да" +msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "Выбрать фильтр" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "Печать этикеток" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "Распечатать отчеты" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "Добавить новый фильтр" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "Создать фильтр" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Форма содержит ошибки" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "Результаты не найдены" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "Поиск" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "Очистить ввод" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "Столбец Файла" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "Имя Поля" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "Выбрать столбцы" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "ДА" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "НЕТ" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" -msgstr "Да" +msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "Выбрать элементы" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "Метки не найдены" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "выбрано" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "Параметры печати" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "Печать Этикетки" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "Печать этикеток" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "Печать" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "Выбрать плагин" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "Отменить" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Подтвердить" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "Заголовок Формы" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "Принять" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "Загрузка данных" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "Новости не найдены" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "Код" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "Экспорт заказа" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "Дублировать Строку" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "Редактировать Строку" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "Удалить Строку" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "Дублировать Строку" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "Редактировать строку" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "Удалить строку" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "Атрибуты детали" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" -msgstr "Настройки создания детали" +msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "Добавить категорию детали" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "Создать Деталь" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "Редактировать Деталь" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "Деталь изменена" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "Активная Деталь" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "Любые складские позиции для этой запчасти будут удалены" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "Удалить Деталь" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "Низкий запас" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "Требуется" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "Ед. Изм." -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "Виртуальная Деталь" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "Деталь с подпиской" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "Продаваемая деталь" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "Детали не найдены" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "Указать категорию" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "деталь" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "детали" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "Нет категории" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Отобразить списком" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "Отобразить сеткой" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Отобразить древом" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "Категория с подпиской" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "результаты" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" +msgstr "Редактировать результаты тестирования" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Приблизительный" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Максимальное количество" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "Статус Запасов" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "Добавить штрихкод" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "Удалить штрихкод" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "Выберите место хранения" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "Добавить код партии" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "Серийные номера" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "Код Заказа" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "Сканировать штрихкод входящего элемента (не должен совпадать с любой существующей складской позицией)" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "Заказ просрочен" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "Элементы" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "Редактировать Позицию" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "Удалить позицию" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "Редактировать Позицию" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "Удалить позицию" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "элементы выбраны" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "Отчёты не найдены" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "Некорректный клиент" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "Пропустить" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "Редактировать отправление" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "Удалить отправление" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "Редактировать отправление" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "Удалить Отправление" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "Не отправленно" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "Отслеживание" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "Счет" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "Создать Отправление" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "Зарезервировать складские позиции для заказа на продажу" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "Закупить запасы" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "Рассчитать стоимость" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "Удалить результат" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "Сериализировать складскую позицию" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "Действия со складской позиции в этом месте хранения" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "Введите начальное количество для этой складской позиции" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "Складская позиция дублирована" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "Дублировать складскую позицию" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "Вы уверены, что хотите удалить эту складскую позицию?" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "Удалить складскую позицию" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "Редактировать складскую позицию" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" -msgstr "Создать еще один элемент после этого" +msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "Некоторые данные будут потеряны при слиянии складских позиций" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "Подтвердить слияние складских позиций" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "Объединить складские позиции" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "Переместить запасы" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "Переместить" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "Установить запасы" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "Количество" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "Взять" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "Добавить Запасы" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Добавить" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "Выбрать складские позиции" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "Выбрать как минимум одну складскую позицию" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" -msgstr "Подтвердите изменение запасов" +msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "ПРОШЕЛ" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "ПРОВАЛЕН" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "НЕТ РЕЗУЛЬТАТА" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "Тест пройден" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "Добавить Результат Тестирования" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "Редактировать результаты тестирования" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "Данные Тестирования" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "В производстве" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "Установленные складские позиции" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" -msgstr "Место хранения не установлено" +msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "Изменить статус запасов" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "Объединить Запасы" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "складские позиции" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "Действия с Запасами" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "Складская позиция в производстве" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "Складская позиция была назначена покупателю" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "Сериализированная складская позиция была зарезервирована " -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "Складские позиции были полностью зарезервированы" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "Складские позиции были частично зарезервированы" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "Складская позиция была установлена в другую деталь" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "Складская позиция была поглощена заказом на продажу" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "Складская позиция была просрочена" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "Складская позиция будет просрочена в скором времени" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "Складская позиция была отклонена" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "Складская позиция была утеряна" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "Складская позиция была уничтожена" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Истощен" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "Кол-во Запаса" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "Нет складских позиций соответствующих запросу" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "места хранения" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "Подробности" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "Нет изменений" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "Складская позиция не существует" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "Добавлено" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "Удалено" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "Снять складскую позицию" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "Выберите складскую позицию для съема" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "Установить другую складскую позицию в эту деталь" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Складские позиции могут быть установлены, только если отвечают следующим критериям" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "Складская позиция ссылается на деталь, чья спецификация является этой складской позицией" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "Складская позиция сейчас доступна на складе" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "Складская позиция не установлена в другую деталь" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "Складская позиция отслеживается либо по коду партии, либо серийному номеру" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "Выберите одну или более складских позиций" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "Выбранные складские позиции" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "Изменить статус запасов" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "Статус заказа" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" -msgstr "" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "Невыполненный" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" +msgstr "Назначено мне" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "Отслеживаемая деталь" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "Производимая Деталь" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" -msgstr "Включая подкатегории" +msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "Подписан" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "Сериализовано" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "Серийный номер" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "Код партии" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "Активная Деталь" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "Зарезервировано" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "Показать просроченные складские позиции" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "Включить складские позиции для разновидностей деталей" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "Показать складские позиции, установленные в другие детали" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "Статус Запасов" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "Имеет код партии" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "Складская позиция отслеживается либо по коду партии, либо серийному номеру" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "Показать складские позиции, у которых установлена закупочная цена" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "Показать просроченные складские позиции" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "Тест Пройден" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "Статус Производства" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" -msgstr "Включить детали в подкатегориях" +msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "Доступный запас" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "Имеет Ед. Изм." -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "Имеет IPN" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "В наличии" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "Можно купить" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "Имеет Варианты" @@ -14894,7 +13903,7 @@ msgstr "строк на страницу" #: templates/js/translated/tables.js:537 msgid "Showing all rows" -msgstr "Отображение всех строк" +msgstr "" #: templates/js/translated/tables.js:539 msgid "Showing" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "Переключить" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Столбцы" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "Все" @@ -14960,22 +13973,6 @@ msgstr "Сохранить" msgid "Show all notifications and history" msgstr "Показать все уведомления и историю" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR-данные не представлены" @@ -15125,14 +14122,6 @@ msgstr "Настройки электронной почты" msgid "Email settings not configured" msgstr "Электронная почта не настроена" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Да" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "Отозван" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Права доступа" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Группа" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Вид" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Разрешение на просмотр элементов" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Разрешение на добавление элементов" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Изменить" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Разрешение на редактирование элементов" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Разрешение на удаление элементов" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 96e4a319cd6b..025a1c52be99 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 98343eefb060..4b6453542d2f 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,26 +2,26 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" "X-Crowdin-Language: sl\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -48,38 +48,34 @@ msgstr "Vnesena napačna količina" msgid "Invalid quantity supplied ({exc})" msgstr "Vnesena napačna količina ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "Podrobnosti napake so vidne v pogledu administratorja" +msgstr "Napaka, podrobnosti vidne v pogledu administratorja" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Vnesi datum" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Zapiski" @@ -92,582 +88,601 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Vnesite geslo" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Vnesite novo geslo" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Potrdite geslo" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Potrdite novo geslo" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Staro geslo" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Ponovnite e-pošto" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Potrdite e-pošto" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "E-pošti se morata ujemati" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Podana epošta ni veljavna." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Domena epošte ni podprta." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registracija je onemogočena." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Podana napačna količina" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Neveljavni doseg skupine: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nepravilno zaporedje skupine: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Število unikatnih serijskih številk ({len(serials)}) se mora ujemati s količino ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bolgarščina" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Češko" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danščina" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Nemščina" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grščina" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Angleščina" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Španščina" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Španščina (Mehiško)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Perzijsko" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finščina" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francoščina" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebrejščina" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Hindujščina" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Madžarščina" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italijanščina" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japonščina" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Korejščina" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Latvijščina" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Nizozemščina" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norveščina" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Poljščina" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugalščina" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugalščina (Brazilsko)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Ruščina" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovaščina" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovenščina" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Srbščina" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Švedščina" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tajščina" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turščina" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamščina" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kitajščina (poenostavljena)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Prijavite se v aplikacijo" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-pošta" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "Napaka pri izvajanju preverjanja vtičnika" +msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Metapodatki morajo biti objekt tipa python dict" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "Metapodatki vtičnika" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "Polje metapodatkov JSON za uporabo pri zunanjih vtičnikih" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Nepravilno nastavljen vzorec" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Nastavljen neprepoznan ključ formata" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Manjka obvezen ključ formata" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referenčno polje ne sme biti prazno" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referenca se mora ujemati s vzorcem" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Manjka datoteka" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Manjka zunanja povezava" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Priloga" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Izberite prilogo" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Povezava" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Zunanja povezava" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Komentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Komentar datoteke" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Uporabnik" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "naloži datum" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Ime ne sme biti prazno" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Neveljavna mapa prilog" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Ime datoteke vsebuje neveljavni znak '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Datoteki manjka končnica" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Priloga s tem imenom že obstaja" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Napaka pri preimenovanju datoteke" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" -msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom" +msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "nadrejen" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" -msgstr "Markdown opombe (neobvezno)" +msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "Valuta" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "Izberite valuto med razpoložljivimi možnostmi" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" msgstr "" -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" +#: InvenTree/serializers.py:102 +msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:442 -msgid "Superuser" +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" +#: InvenTree/serializers.py:472 +msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:445 -msgid "Is this user account active" +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "Nimate dovoljenja za spreminjanje vloge tega uporabnika." - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "Samo superuporabniki lahko ustvarijo nove uporabnike" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "Vaš račun je bil ustvarjen." - -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" -msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" - -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "Dobrodošli v InvenTree" +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Ime datoteke" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Podatki datoteke" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Izberite datoteke za naložiti" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nepodprta vrsta datotek" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Datoteka je prevelika" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "V datoteki ni bilo najdenih stolpcev" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "V datoteki ni bilo njadenih vrstic" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Niso bile podane vrste s podatki" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Niso bili podani stolpci s podatki" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Manjka obvezni stolpec: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dvojni stolpec: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" -msgstr "Oddaljena slika" +msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Nadzor dela v ozadju neuspel" @@ -679,27 +694,223 @@ msgstr "Zaledje e-pošte ni nastavljeno" msgid "InvenTree system health checks failed" msgstr "Preverjanje zdravja sistema InvenTree neuspelo" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "V teku" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Postavljeno" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Končano" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Preklicano" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Izgubljeno" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Vrnjeno" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Poslano" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Potrebna pozornost" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Poškodovano" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Uničeno" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Zavrnjeno" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Dano v karanteno" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Vnos zaloge postavke" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Postavka zaloge ustvarjena" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Urejena postavka zaloge" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Dodeljena serijska številka" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Zaloga prešteta" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Zaloga ročno dodana" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Zaloga ročno odstranjena" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Lokacija spremenjena" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Vstavljeno v sestavo" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Odstranjeno iz sestave" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Vstavljena postavka komponente" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Odstranjena postavka komponente" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Razdeljena od nadrejene postavke" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Razdeljena podrejena postavka" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Združena zaloga postavk" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Spremenjeno v varianto" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Nalog za izgradnjo ustvarjen" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Nalog za izgradnjo končan" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Porabljeno v nalogu za izgradnjo" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Posalno stranki" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Vrnjeno od stranke" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Proizvodnja" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Prestara vrednost ne sme biti negativna" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Prestarost ne sme presegati 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Neveljavna vrednost za prestarost" @@ -727,105 +938,62 @@ msgstr "Sistemske informacije" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Nadrejena izgradnja" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Nalog izgradnje" msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Neveljavna izbira za nadrejeno izgradnjo" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referenca" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Nadrejena izgradnja" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Dobavnica na katero se navezuje ta izgradnja" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "dokončal" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Izdal" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Zunanja povezava" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Količina" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "V teku" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Proizvodnja" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Preklicano" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Končano" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Uporabnik" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Povezava" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Priloga" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Manjka datoteka" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Manjka zunanja povezava" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Izberite prilogo" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Komentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Ime datoteke" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Postavljeno" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Poslano" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Izgubljeno" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Vrnjeno" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "V teku" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 +msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Potrebna pozornost" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Poškodovano" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Uničeno" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Zavrnjeno" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Dano v karanteno" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Vnos zaloge postavke" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Postavka zaloge ustvarjena" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Urejena postavka zaloge" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Dodeljena serijska številka" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Zaloga prešteta" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Zaloga ročno dodana" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Zaloga ročno odstranjena" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Lokacija spremenjena" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Zaloga posodobljena" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Vstavljeno v sestavo" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Odstranjeno iz sestave" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Vstavljena postavka komponente" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Odstranjena postavka komponente" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Razdeljena od nadrejene postavke" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Razdeljena podrejena postavka" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Združena zaloga postavk" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Spremenjeno v varianto" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Nalog za izgradnjo ustvarjen" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Nalog za izgradnjo končan" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Nalog za izgradnjo zavrnjen" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Porabljeno v nalogu za izgradnjo" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Poslano preko prodajnega naročila" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Prejeto preko nabavnega naročila" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Vrnjeno preko naročila za vračilo" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Posalno stranki" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Vrnjeno od stranke" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Izdelava" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12699,7 +11707,7 @@ msgstr "" #: templates/js/translated/company.js:678 #: templates/js/translated/company.js:742 msgid "Role" -msgstr "Vloga" +msgstr "" #: templates/js/translated/company.js:686 msgid "Delete Contacts" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index fedb1960bead..a7b07cb81c73 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -48,38 +48,34 @@ msgstr "Isporučena nevažeća količina" msgid "Invalid quantity supplied ({exc})" msgstr "Isporučena nevažeća količina ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Detalji o grešci se mogu naći u admin sekciji" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Unesite datum" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Napomene" @@ -92,270 +88,250 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca" msgid "Provided value does not match required pattern: " msgstr "Navedena vrednost ne odgovara traženom obrascu: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Unesite lozinku" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Unesite novu lozinku" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Potvrdite lozinku" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Potvrdite novu lozinku" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Stara lozinka" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-pošta (ponovo)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Potvrda adrese e-pošte" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Svaki put morate upisati istu e-poštu." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Navedena primarna adresa e-pošte nije važeća." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Navedeni domen adrese e-pošte nije prihvaćen." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registracija je onemogućena." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Serijski broj nije popunjen" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Dupliciraj serijski broj" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Nevažeći raspon grupe: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Nevažeća sekvenca grupe: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Nisu pronađeni serijski brojevi" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Broj jedinstvenih serijskih brojeva ({len(serials)}) mora odgovarati količini ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Uklonite HTML oznake iz ove vrednosti" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 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:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bugarski" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Češki" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danski" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Nemački" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grčki" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Engleski" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Španski" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Španski (Meksiko)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persijski" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finski" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Francuski" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Jevrejski" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Hindu" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Mađarski" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italijanski" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japanski" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Korejski" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Holandski" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norveški" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Poljski" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazil)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Ruski" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovenski" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Srpski" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Švedski" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tajlandski" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turski" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vijetnamski" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kineski (Uprošćeni)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" @@ -364,310 +340,349 @@ msgstr "Kineski (Tradicionalni)" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-Pošta" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metapodaci moraju biti \"python dict\" objekat" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Metapodaci dodatka" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Polje metapodataka JSON, za korištenje eksternih dodataka" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Neispravno formatiran obrazac" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Naveden je ključ nepoznatog formata" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Nedostaje potreban ključ formata" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Polje za reference ne može biti prazno" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referenca mora odgovarati traženom obrascu" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Broj reference je predugačak" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Nedostaje datoteka" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Nedostaje eksterni link" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Prilog" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Izaberite datoteku za prilog" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Link za eksterni URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Komentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Datoteka komentara" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Korisnik" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "dadajte datoteku" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Ime datoteke ne sme biti prazno" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Direktorijum nevažećih datoteka" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Ime datoteke sadrži neprihvatljivi karakter '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Imenu datoteke nedostaje ekstenzija" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Prilog s ovim nazivom datoteke već postoji" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Greška pri preimenovanju datoteke" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "nadređeni" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Putanja" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Zabeleške (Opciono)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Podaci sa barkoda" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Podaci sa barkoda trećih lica" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Heš barkoda" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Jedinstveni hash barkoda" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Nemate dozvolu za promenu ove korisničke uloge." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Samo superkorisnici mogu kreirati nove korisnike" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Ime datoteke" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datoteka" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Odaberite datoteku za učitavanje" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Nije podržan tip datoteke" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Prevelika datoteka" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Nisu pronađene kolone podataka u datoteci" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Nisu pronađeni redovi podataka u datoteci" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Nisu navedeni redovi podataka" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Nisu obezbeđene kolone podataka" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Nedostaje potrebna kolona: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicirana kolona: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Provera pozadinskog radnika nije uspjela" @@ -679,27 +694,223 @@ msgstr "Pozadina e-pošte nije konfigurirana" msgid "InvenTree system health checks failed" msgstr "Provere integriteta sistema InvenTree nije uspela" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Na čekanju" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Postavljen" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Gotovo" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Otkazano" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Izgubljeno" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Vraćeno" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "U progresu" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Poslato" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "Uredu" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Potrebna pažnja" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Oštećeno" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Uništeno" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Odbijeno" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "U karantinu" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Nasleđeni unos za praćenje zaliha" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Stavka na zalihi stvorena" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Izmenjena stavka u zalihama" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Dodeljen serijski broj" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Zalihe prebrojane" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Zalihe dodane ručno" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Zaliha ručno uklonjena" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Lokacija promenjena" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Zaliha obnovljena" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Instalisan u sklopu" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Skinuto sa sklopa" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Instalirana stavka komponente" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Uklonjena stavka komponente" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Odvoj od nadređene stavke" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Podeli podređenu stavku" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Spojene stavke zaliha" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Pretvoreno u varijaciju" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Nalog za izradu" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Nalog za izradu" msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Nevažeći izbor za nadređenu verziju" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referenca" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Link za eksterni URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Na čekanju" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Otkazano" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Gotovo" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,103 +2015,52 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 -#: company/templates/company/manufacturer_part_sidebar.html:9 -#: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" +#: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:39 +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" msgstr "" -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" +#: build/templates/build/detail.html:276 +msgid "Build Notes" msgstr "" -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" +#: build/templates/build/detail.html:434 +msgid "Allocation Complete" msgstr "" -#: common/currency.py:132 -msgid "Invalid currency code" +#: build/templates/build/detail.html:435 +msgid "All lines have been fully allocated" msgstr "" -#: common/currency.py:134 -msgid "Duplicate currency code" +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" msgstr "" -#: common/currency.py:139 -msgid "No valid currency codes provided" +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" msgstr "" -#: common/currency.py:156 -msgid "No plugin" +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" msgstr "" #: common/files.py:63 @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Korisnik" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Prilog" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Nedostaje datoteka" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Nedostaje eksterni link" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Izaberite datoteku za prilog" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Komentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Ime datoteke" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Postavljen" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Poslato" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Izgubljeno" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Vraćeno" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "U progresu" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,199 +7845,183 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 -msgid "Received purchase order line item" -msgstr "" - -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" +#: plugin/base/barcodes/mixins.py:479 +msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "Uredu" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Potrebna pažnja" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Oštećeno" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Uništeno" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Odbijeno" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "U karantinu" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Nasleđeni unos za praćenje zaliha" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Stavka na zalihi stvorena" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Izmenjena stavka u zalihama" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Dodeljen serijski broj" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Zalihe prebrojane" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Zalihe dodane ručno" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Zaliha ručno uklonjena" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Lokacija promenjena" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Zaliha obnovljena" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Instalisan u sklopu" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Skinuto sa sklopa" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Instalirana stavka komponente" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Uklonjena stavka komponente" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Odvoj od nadređene stavke" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Podeli podređenu stavku" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Spojene stavke zaliha" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" +msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Pretvoreno u varijaciju" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" +msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 468fcbfef939..38d3a3518b0c 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -17,18 +17,18 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "Ogiltig enhet angiven ({unit})" +msgstr "" #: InvenTree/conversion.py:177 msgid "No value provided" @@ -48,38 +48,34 @@ msgstr "Ogiltigt antal angivet" msgid "Invalid quantity supplied ({exc})" msgstr "Ogiltigt antal angivet ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Information om felet finns under Error i adminpanelen" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Anteckningar" @@ -92,614 +88,829 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Ange lösenord" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Ange nytt lösenord" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Bekräfta lösenord" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Bekräfta nytt lösenord" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Tidigare lösenord" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-post (igen)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Bekräfta e-postadress" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Du måste ange samma e-post varje gång." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "MFA Registrering är inaktiverad." - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Den angivna primära e-postadressen är inte giltig." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Den angivna e-postdomänen är inte godkänd." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Registrering är stängd." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Serienummret finns redan" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" -msgstr "Ogiltigt gruppintervall: {group}" +msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "Gruppintervall {group} överstiger tillåtet antal ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" -msgstr "Ogiltig gruppsekvens: {group}" +msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "Antal unika serienummer ({len(serials)}) måste matcha antal ({expected_quantity})" +msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "Arabiska" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgariska" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tjeckiska" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danska" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Tyska" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Grekiska" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Engelska" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Spanska" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Spanska (Mexikanska)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "Estniska" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsi / Persiska" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Finska" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Franska" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Hindi" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Ungerska" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Italienska" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japanska" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Koreanska" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "Lettiska" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norska" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polska" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portugisiska" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portugisiska (brasiliansk)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "Rumänska" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Ryska" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovakiska" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovenska" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Serbiska" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Svenska" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Thailändska" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Ukrainska" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Kinesiska (Förenklad)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Logga in på appen" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-postadress" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "Fel vid validering av plugin" +msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Metadata måste vara ett python dict objekt" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "Metadata för plugin" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "JSON metadata fält, för användning av externa plugins" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Felaktigt formaterat mönster" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Okänd formatnyckel angiven" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Obligatorisk formatnyckel saknas" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Textfältet kan inte lämnas tomt" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referensen måste matcha obligatoriskt mönster" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Saknad fil" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Extern länk saknas" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Bilaga" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Välj fil att bifoga" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Länk" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Länk till extern URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Kommentar" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Fil kommentar" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Användare" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "uppladdningsdatum" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Filnamnet får inte vara tomt" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Ogiltig katalog för bilaga" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Filnamnet innehåller ogiltiga tecken '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Filnamn saknar ändelse" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Det finns redan en bilaga med detta filnamn" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Fel vid namnbyte av fil" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "överordnad" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" -msgstr "Markdown anteckningar (valfritt)" +msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Streckkodsdata" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" -msgstr "Tredje parts streckkodsdata" +msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" -msgstr "Streckkodsdata" +msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" -msgstr "Unik hash med streckkodsdata" +msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Användarnamn" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Förnamn" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "Förnamn på användaren" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Efternamn" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "Efternamn på användaren" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Avsändarens E-postadress" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Personal" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "Har den här användaren behörighet för personal" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "Superanvändare" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "Är den här användaren en superanvändare" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktiv" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "Är detta användarkonto aktivt" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." -msgstr "Du har inte behörighet att ändra denna användarrollen." +msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" -msgstr "Endast superanvändare kan skapa nya användare" +msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" -msgstr "Använd funktionen för lösenordsåterställning för att logga in" +msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Filnamn" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Välj fil för uppladdning" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Filtypen stöds inte" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Filen är för stor" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Inga kolumner hittades i filen" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Inga rader hittades i filen" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Inga rader angivna" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Inga datakolumner har angetts" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Saknar obligatorisk kolumn: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicerad kolumn: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" -msgstr "Fjärransluten bild" +msgstr "" + +#: InvenTree/serializers.py:860 +msgid "URL of remote image file" +msgstr "URL för fjärrbildsfil" + +#: InvenTree/serializers.py:878 +msgid "Downloading images from remote URL is not enabled" +msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" + +#: InvenTree/status.py:66 part/serializers.py:1161 +msgid "Background worker check failed" +msgstr "Kontroll av bakgrundsarbetare misslyckades" + +#: InvenTree/status.py:70 +msgid "Email backend not configured" +msgstr "Backend för e-post är inte konfigurerad" + +#: InvenTree/status.py:73 +msgid "InvenTree system health checks failed" +msgstr "InvenTree systemhälsokontroll misslyckades" + +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Väntar" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Placerad" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Slutför" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Avbruten" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Förlorad" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Återlämnad" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Pågående" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Skickad" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "OK" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "OBS!" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Skadad" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Förstörd" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Avvisad" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "I karantän" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Spårningspost för äldre lager" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagerpost skapad" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Redigerade lagerpost" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Tilldelade serienummer" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Lagersaldo beräknat" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Lagerpost manuellt tillagd" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Lagerpost manuellt borttagen" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Platsen har ändrats" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Installerad i montering" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Borttagen från montering" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Installerat komponentobjekt" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Tog bort komponentobjekt" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Dela från överordnat objekt" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Dela underordnat objekt" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Sammanfogade lagerposter" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Konverterad till variant" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Bygg orderutgång skapad" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Bygg orderutgång slutförd" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Konsumeras av byggorder" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Skickat till kund" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Returnerad från kund" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Produktion" -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "URL för fjärrbildsfil" +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Reparera" -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" -msgstr "Kontroll av bakgrundsarbetare misslyckades" +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Ersätt" -#: InvenTree/status.py:70 -msgid "Email backend not configured" -msgstr "Backend för e-post är inte konfigurerad" +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Återbetala" -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" -msgstr "InvenTree systemhälsokontroll misslyckades" +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Avvisa" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Okänd databas" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" -msgstr "Ogiltig fysisk enhet" +msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Överskott värde får inte vara negativt" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Överskott får inte överstiga 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Ogiltigt värde för överskott" @@ -727,105 +938,62 @@ msgstr "Systeminformation" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Överordnat Bygge" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Utfärdad av" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "Byggnationen måste avbrytas innan den kan tas bort" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" -msgstr "Valfri" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" msgstr "" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" -msgstr "Spårad" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "Testbar" +msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" -msgstr "Allokerad" +msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" -msgstr "Tillgänglig" +msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Byggorder" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Byggorder" msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Ogiltigt val för överordnad bygge" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Byggorderreferens" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referens" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Överordnat Bygge" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "Byggorder till vilken detta bygge är tilldelad" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Välj del att bygga" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Försäljningsorder till vilken detta bygge allokeras" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Bygg kvantitet" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Byggstatus" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Bygg statuskod" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Byggandet kommer att förfallas efter detta datum." -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "slutfört av" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Användare som utfärdade denna byggorder" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Extern länk" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Länk till extern URL" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggorder {build} har slutförts" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "En byggorder har slutförts" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Antal" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Installera till" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" -msgstr "Ange serienummer för att tillverkade produkter" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Plats" - -#: build/serializers.py:316 -msgid "Stock location for build output" msgstr "" -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "En lista över tillverkade produkter måste anges" +msgstr "" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Plats" -#: build/serializers.py:457 +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" -msgstr "Lagerplats för skrotade produkter" +msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "Ignorera alla lagerallokeringar för skrotade produkter" +msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "Plats för färdiga produkter" +msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Status" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Slutför utfall om lager inte har tilldelats fullt ut" +msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" -msgstr "Ta bort ofullständiga produkter" +msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "Ta bort eventuella produkter som inte har slutförts" +msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:777 -msgid "Build order must be in production state" +#: build/serializers.py:695 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" -msgstr "Tillverknings ordern är ofullständig" +msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Serienummer" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Väntar" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Produktion" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Avbruten" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Slutför" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Visa QR-kod" @@ -1787,9 +1744,9 @@ msgstr "Visa QR-kod" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Redigera bygge" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" +msgid "Cancel Build" +msgstr "Avbryt bygge" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Avbryt bygge" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Ta bort bygge" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Färdigställ bygget" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Byggbeskrivning" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "Inget utfall har skapats för denna tillverknings order" +msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "Tillverknings order kan inte slutföras eftersom produktion återstår" +msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Måldatum" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Försenad" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "Slutförd produktion" +msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Försäljningsorder" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Utfärdad av" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Mål" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Skapad" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Slutförd" @@ -2015,12 +1958,12 @@ msgstr "Slutförd" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2062,7 +2005,7 @@ msgstr "" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" -msgstr "Ofullständig produktion" +msgstr "" #: build/templates/build/detail.html:219 msgid "Create new build output" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" -msgstr "Slutförd produktion" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" msgstr "" -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bilagor" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Bygganteckningar" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Ny byggorder" @@ -2120,55 +2059,8 @@ msgstr "Ny byggorder" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" -msgstr "Ofullständig produktion" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "Ogiltig valutakod" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" msgstr "" #: common/files.py:63 @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Unik projektkod" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Ingen grupp" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "Omstart krävs" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Företagsnamn" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Bas-URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "dagar" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Kräv bekräftelse" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Kräv uttrycklig användarbekräftelse för vissa åtgärder." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mall" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Visa import i vyer" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Visa importguiden i vissa delvyer" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Interna priser" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Debugläge" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Sidstorlek" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Aktivera testrapporter" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 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" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" -msgstr "Aktivera registrering" +msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Aktivera projektkoder" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" -msgstr "Visa nyheter" +msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Sök efter artiklar" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Sök efter leverantörsartikel" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Sök efter tillverkarartikel" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 -msgid "Date Format" -msgstr "Datumformat" +#: common/models.py:2401 +msgid "Date Format" +msgstr "Datumformat" + +#: common/models.py:2402 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2415 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2416 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2421 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2423 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2429 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2431 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" -#: common/models.py:2495 -msgid "Preferred format for displaying dates" +#: common/models.py:2438 +msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 -msgid "Part Scheduling" +#: common/models.py:2443 +msgid "Default stock item template" msgstr "" -#: common/models.py:2509 -msgid "Display part scheduling information" +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 -msgid "Part Stocktake" +#: common/models.py:2451 +msgid "Default stock location label template" msgstr "" -#: common/models.py:2516 -msgid "Display part stocktake information (if stocktake functionality is enabled)" +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2522 -msgid "Table String Length" +#: common/models.py:2459 +msgid "Default build line label template" msgstr "" -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2530 +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Användare" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Länk" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bild" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Bilaga" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Saknad fil" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Extern länk saknas" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Välj fil att bifoga" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Kommentar" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "Filstorlek" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Filnamn" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Ogiltigt domännamn: {domain}" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Företag" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Företag" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Företagsbeskrivning" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Webbplats" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "är kund" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adress" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Adresser" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Företag" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Välj företag" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" -msgstr "Primär adress" +msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" -msgstr "Adressrad 1" +msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" -msgstr "Adressrad 2" +msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Land" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" -msgstr "Tillverkare" +msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverantör" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "Företagsnamn" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "I lager" @@ -4571,8 +4257,8 @@ msgstr "I lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "Radera företag" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "Radera bild" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Kund" @@ -4648,12 +4334,19 @@ msgstr "Kund" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adress" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Tillverkare" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Leverantörer" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametrar" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "Kontakter" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Adresser" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "Kunder" msgid "New Customer" msgstr "Ny kund" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Företag" + #: company/views.py:52 msgid "New Company" -msgstr "Nytt företag" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Placerad" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "Kolumner" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "Kolumn" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Etikettnamn" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "Rader" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Etikett" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-kod" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-kod" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" -msgstr "Orderstatus" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" +msgstr "Orderstatus" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Skickad" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Leverantörsnamn" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Förlorad" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Återlämnad" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Pågående" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Reparera" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Ersätt" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Återbetala" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Avvisa" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "Steg %(step)s av %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Nyckelord" @@ -6423,16 +5917,15 @@ msgstr "Nyckelord" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Kategorinamn" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Artiklar" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Kategori" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Ikon (valfritt)" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standardleverantör" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" -msgstr "Datum" +msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Välj kategori" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" -msgstr "Kopiera bild" +msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Generera rapport" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Redigera kategori" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Redigera kategori" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Radera kategori" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Radera kategori" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Ny kategori" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Välj filformat" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Redigera" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Senast uppdaterad" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,199 +7845,183 @@ msgstr "Ingen åtgärd specificerad" msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "A4" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "A3" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-kod" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-kod" - #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Serienummer" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Statuskod" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Leverantörsnamn" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "OBS!" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Skadad" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Förstörd" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Avvisad" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "I karantän" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Spårningspost för äldre lager" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Lagerpost skapad" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Redigerade lagerpost" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Tilldelade serienummer" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Lagersaldo beräknat" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Lagerpost manuellt tillagd" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Lagerpost manuellt borttagen" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Platsen har ändrats" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Installerad i montering" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Borttagen från montering" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Installerat komponentobjekt" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Tog bort komponentobjekt" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Dela från överordnat objekt" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Dela underordnat objekt" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Sammanfogade lagerposter" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Konverterad till variant" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Bygg orderutgång skapad" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Bygg orderutgång slutförd" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Konsumeras av byggorder" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Skickat till kund" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Returnerad från kund" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Bygg" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "nästa sida" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "Redigera lagerstatus" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Varning" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10825,7 +9857,7 @@ msgstr "" #: templates/InvenTree/settings/global.html:8 msgid "Server Settings" -msgstr "Serverinställningar" +msgstr "" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,39 +9954,39 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" -msgstr "Meddelande" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Aldrig" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Radera" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "Inga projektkoder hittades" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "Redigera mall" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "Radera mall" @@ -11162,41 +10194,41 @@ msgstr "Radera mall" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11235,7 +10267,7 @@ msgstr "" #: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 msgid "Server" -msgstr "Server" +msgstr "" #: templates/InvenTree/settings/sidebar.html:41 msgid "Labels" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "Kontoinställningar" msgid "Change Password" msgstr "Ändra lösenord" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Användarnamn" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Förnamn" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Efternamn" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Aktiva sessioner" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Logga ut aktiva sessioner" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "IP-adress" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Enhet" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Senaste aktivitet" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s sedan" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "Bekräfta e-postadress" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Bekräfta" @@ -11563,26 +10607,26 @@ msgstr "Bekräfta" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Logga in" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrera dig" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Glömt lösenord?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "eller logga in med" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Är du säker på att du vill logga ut?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "Steg 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Steg 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "Radera bilagor" msgid "Delete attachments" msgstr "Radera bilagor" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "Inga bilagor hittades" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "Redigera bilaga" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "Redigera bilaga" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "Radera bilaga" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,130 +11279,130 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" -msgstr "Det finns ofullständiga produktion kvar för den här tillverknings ordern" +msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "Denna tillverknings order kan inte slutföras eftersom det finns ofullständigt utfall" +msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" -msgstr "Produktionerna måste genereras individuellt" +msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "Ange serienummer för att generera flera enskild produktion" +msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" -msgstr "Vald produktion" +msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" -msgstr "Valda produktion markeras som färdiga" +msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" #: templates/js/translated/build.js:630 msgid "Complete Build Outputs" -msgstr "Slutförd produktion" +msgstr "" #: templates/js/translated/build.js:727 msgid "Selected build outputs will be marked as scrapped" -msgstr "Valda produktion markeras som skrotade" +msgstr "" #: templates/js/translated/build.js:729 msgid "Scrapped output are marked as rejected" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" -msgstr "Skrota tillverkad produktion" +msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" -msgstr "Vald produktion kommer att raderas" +msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" -msgstr "Radera produktion" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" msgstr "" -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" -msgstr "Slutförd produktion" +msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" -msgstr "Skrot utfall" +msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" -msgstr "Radera utfall" +msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" -msgstr "produktion" +msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" -msgstr "Inga aktiva produktioner hittades" +msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "Tilldela spårade artiklar mot individuella produkter" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "Skriv ut etiketter" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "Lägg till nytt filter" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "Rensa alla filter" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "Skapa filter" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "Inga resultat hittades" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "Söker" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "JA" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "NEJ" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "Inga etiketter hittades" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "Skriv ut etikett" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "Skriv ut etiketter" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "Skriv ut" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "Avbryt" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Skicka" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "Ingen kategori" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Visa som lista" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "Inga underkategorier hittades" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "Ladda underkategorier" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "resultat" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "Lagerstatus" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "Lägg till streckkod" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "Inga rapporter hittades" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "Ogiltig kund" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "Faktura" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" -msgstr "Ange serienummer" +msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "Flytta" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Lägg till" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "Inga ändringar" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "Har projektkod" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "Serienummer" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "Lagerstatus" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "Kolumner" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "Alla" @@ -14960,22 +13973,6 @@ msgstr "Spara" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Ja" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 9af682f34ccb..8105dcce9b46 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:20\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "ป้อนวันที่" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "หมายเหตุ" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "ป้อนรหัสผ่าน" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "ป้อนรหัสผ่านใหม่" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "ยืนยันรหัสผ่าน" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "ยืนยันรหัสผ่านใหม่" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "รหัสผ่านเดิม" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "อีเมล (อีกครั้ง)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "การยืนยันอีเมล" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "ภาษาโปรตุเกส" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "ภาษารัสเซีย" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "ภาษาสวีเดน" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "ภาษาไทย" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "ภาษาเวียดนาม" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "อีเมล" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "ข้อมูลเมตาของปลั๊กอิน" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "ไม่พบไฟล์" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "ไฟล์แนบ" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "เลือกไฟล์ที่ต้องการแนบ" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "ลิงก์" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "ความคิดเห็น" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "ความเห็นของไฟล์" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "ผู้ใช้งาน" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "วันที่อัปโหลด" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "จำเป็นต้องใส่ชื่อไฟล์" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "ชื่อไฟล์ห้ามมีตัวอักษรต้องห้าม '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "ไม่พบนามสกุลของไฟล์" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "ชื่อไฟล์" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "ไฟล์ข้อมูล" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "เลือกไฟล์ข้อมูลที่จะอัปโหลด" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "ไฟล์มีขนาดใหญ่เกินไป" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "อยู่ระหว่างดำเนินการ" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "สำเร็จแล้ว" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "ยกเลิกแล้ว" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "สูญหาย" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "ส่งคืนแล้ว" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "จัดส่งแล้ว" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "ตกลง" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "ได้รับความเสียหาย" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "ทำลายแล้ว" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "ถูกปฏิเสธ" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "กำหนดหมายเลขซีเรียลแล้ว" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "นับสต็อกแล้ว" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "เพิ่มสต็อกแล้ว" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "ลบสต็อกแล้ว" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "เปลี่ยนสถานที่แล้ว" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "อัพเดทสต็อกแล้ว" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "จัดส่งให้ลูกค้าแล้ว" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "ข้อมูลระบบ" msgid "About InvenTree" msgstr "เกี่ยวกับ Inventree" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "สถานที่" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "สถานที่" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "สถานะ" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "อยู่ระหว่างดำเนินการ" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "ยกเลิกแล้ว" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "สำเร็จแล้ว" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "สำเร็จแล้ว" @@ -2015,12 +1958,12 @@ msgstr "สำเร็จแล้ว" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,103 +2015,52 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 #: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" msgstr "" -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" +#: build/templates/build/detail.html:276 +msgid "Build Notes" msgstr "" -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" +#: build/templates/build/detail.html:434 +msgid "Allocation Complete" msgstr "" -#: common/currency.py:132 -msgid "Invalid currency code" +#: build/templates/build/detail.html:435 +msgid "All lines have been fully allocated" msgstr "" -#: common/currency.py:134 -msgid "Duplicate currency code" +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" msgstr "" -#: common/currency.py:139 -msgid "No valid currency codes provided" +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" msgstr "" -#: common/currency.py:156 -msgid "No plugin" +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" msgstr "" #: common/files.py:63 @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "ผู้ใช้งาน" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "ลิงก์" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "ไฟล์แนบ" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "ไม่พบไฟล์" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "เลือกไฟล์ที่ต้องการแนบ" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "ความคิดเห็น" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "ชื่อไฟล์" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5299,87 +4898,69 @@ msgstr "" msgid "Machine Config" msgstr "" -#: machine/models.py:156 -msgid "Config type" -msgstr "" - -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" -msgstr "" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" +#: machine/models.py:156 +msgid "Config type" msgstr "" -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" +#: order/admin.py:30 order/models.py:89 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 +msgid "Total Price" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "จัดส่งแล้ว" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "สูญหาย" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "ส่งคืนแล้ว" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8495,111 +7842,103 @@ msgid "No action specified" msgstr "" #: plugin/base/action/api.py:41 -msgid "No matching action found" -msgstr "" - -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" +msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 +msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "ตกลง" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "ได้รับความเสียหาย" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "ทำลายแล้ว" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "ถูกปฏิเสธ" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "กำหนดหมายเลขซีเรียลแล้ว" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "นับสต็อกแล้ว" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "เพิ่มสต็อกแล้ว" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "ลบสต็อกแล้ว" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "เปลี่ยนสถานที่แล้ว" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "อัพเดทสต็อกแล้ว" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "จัดส่งให้ลูกค้าแล้ว" - -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index c7807a62b995..256e4a1fe98c 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -48,38 +48,34 @@ msgstr "Geçersiz miktar sağlandı" msgid "Invalid quantity supplied ({exc})" msgstr "Geçersiz miktar sağlandı({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Hata detaylarını admin panelinde bulabilirsiniz" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Notlar" @@ -92,270 +88,250 @@ msgstr "'{name}' değeri desen formatında yer almıyor" msgid "Provided value does not match required pattern: " msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Şifrenizi girin" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Lütfen Yeni Parolayı Girin" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Parolayı doğrulayın" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Yeni parolayı doğrulayın" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Eski parola" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "E-posta (tekrar)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "E-posta adresi onayı" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Her seferind eaynı e-posta adresini yazmalısınız." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Sağlanan e-posta adresi geçerli değil." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Sağlanan e-posta alanı onaylanmadı." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Kayıt devre dışı." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Yinelenen seri" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Geçersiz grup aralığı: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Geçersiz grup aralığı: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Benzersiz seri numaralarının sayısı ({len(serials)}) ile miktarın ({expected_quantity}) eşleşmesi gerekmektedir" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Bu değerden HTML etiketlerini kaldır" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Resim boyutu çok büyük" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "Resim indirme boyutu izin verilenden büyük" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir resim dosyası değil" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Bulgarca" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Çekçe" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Danca" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Almanca" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Yunanca" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "İngilizce" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "İspanyolca(Meksika)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Farsça" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Fince" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Fransızca" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Hintçe" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Macarca" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Japonca" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Korece" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Portekizce" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Portekizce (Brezilya)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Rusça" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Slovakça" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Slovakça" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Sırpça" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tay dili" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Vietnamca" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Çince (Basitleştirilmiş)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" @@ -364,310 +340,349 @@ msgstr "Çince (Geleneksel)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Uygulamaya giriş yap" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "E-posta" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Eklenti doğrulama sırasında hata oluştu" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Metadata, bir python dict nesnesi olmalıdır" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Plugin Metaverileri" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Harici eklentiler tarafından kullanım için JSON metadata alanı" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Yanlış biçimlendirilmiş desen" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Belirtilen bilinmeyen format anahtarı" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Gerekli format anahtarı eksik" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Referans alanı boş olamaz" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Referans sayısı çok fazla" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Eksik dosya" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Bozuk dış bağlantı" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Ek" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Eklenecek dosyayı seç" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Bağlantı" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Harici URL'ye bağlantı" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Yorum" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Dosya yorumu" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Kullanıcı" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "yükleme tarihi" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Dosya adı boş olamaz" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Ek dosya yolu geçersiz" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Dosya adı geçersiz karakterler içeriyor'{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Dosya uzantısı yok" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Aynı isimli başka bir dosya zaten var" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Dosya adı değiştirilirken hata" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "üst" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Yol" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Markdown notları (isteğe bağlı)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Barkod Verisi" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Üçüncü parti barkod verisi" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Barkod Hash" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "Barkod verisinin benzersiz hash'i" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Var olan seçeneklerden bir döviz birimi seçin" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Aktif" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Bu kullanıcı rolünü değiştirmek için izniniz yok." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Sadece süper kullanıcılar yeni kullanıcı oluşturabilir" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Dosya adı" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Veri Dosyası" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Yüklemek istediğiniz dosyayı seçin" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Desteklenmeyen dsoya tipi" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Dosya boyutu çok büyük" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Dosyada kolon bulunamadı" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Dosyada uygun kolon bulunamadı" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Gerekli kolon ismi eksik:'{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Tekrarlanan kolon ismi:'{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Uzaktan Görüntüler" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "Uzaktan görüntü dosya URL'si" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Arka plan çalışanı kontrolü başarısız oldu" @@ -679,27 +694,223 @@ msgstr "E-posta arka ucu yapılandırılmadı" msgid "InvenTree system health checks failed" msgstr "InvenTree sistem sağlık kontrolü başarısız" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Bekliyor" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Sipariş verildi" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Tamamlandı" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "İptal edildi" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Kayıp" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "İade" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Devam Ediyor" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Sevk edildi" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "TAMAM" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Dikkat gerekli" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Hasarlı" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Kullanılamaz durumda" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Reddedildi" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Karantinaya alındı" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Eski stok izleme girişi" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Stok kalemi oluşturuldu" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Düzenlenen stok kalemi" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Atanan seri numarası" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Stok sayıldı" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Stok manuel olarak eklendi" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Stok manuel olarak çıkarıldı" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Konum değişti" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Stok Güncellendi" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Montajda kullanıldı" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Montajdan çıkarıldı" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Bileşen ögesinde kullanıldı" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Bileşen ögesinden çıkarıldı" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Üst ögeden ayır" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Alt ögeyi ayır" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Stok parçalarını birleştir" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Yapım emri çıktısı oluşturuldu" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Yapım emri çıktısı tamamlandı" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Müşteriye gönderildi" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Müşteriden geri döndü" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Üretim" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Geri Dön" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Fazlalık değeri negatif olmamalıdır" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Fazlalık %100'ü geçmemelidir" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "Sistem Bilgisi" msgid "About InvenTree" msgstr "InvenTree Hakkında" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Üst Yapım İşi" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Veren" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Montaj" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Mevcut" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Yapım İşi Emri" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "Yapım İşi Emri" msgid "Build Orders" msgstr "Yapım İşi Emirleri" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Referans" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Üst Yapım İşi" + +#: build/models.py:200 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:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Parça" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Yapım işi için parça seçin" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Yapım İşi Miktarı" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Yapım işi stok kalemlerinin sayısı" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "Yapım İşi Durumu" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Veren" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Harici URL'ye bağlantı" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" -msgstr "Proje Kodu" - -#: build/models.py:392 -msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" +#: build/models.py:330 +msgid "Project code for this build order" msgstr "" -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "Yapım işi çıktısı için seri numaraları girin" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Konum" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Konum" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Durum" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Gerekli yapım işi miktarı tamamlanmadı" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Üretici Parça Numarası" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Paketleme" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Seri Numara" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Takip Edilebilir" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Çeşide İzin Ver" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Bekliyor" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Üretim" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "İptal edildi" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Tamamlandı" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Barkod işlemleri" @@ -1776,7 +1733,7 @@ msgstr "Barkod işlemleri" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Yapım İşini Düzenle" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" +msgid "Cancel Build" +msgstr "Yapım İşini İptal Et" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Yapım İşini İptal Et" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Tamamlanmış Yapım İşi" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Yapım işi tamamlandı olarak işaretlenmeye hazır" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bekleyen çıktılar kaldığı için yapım işi emri tamamlanamıyor" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Gerekli yapım işi miktarı henüz tamamlanmadı" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Hedeflenen tarih" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Vadesi geçmiş" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Sipariş Emri" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Veren" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "Stok Kaynağı" msgid "Stock can be taken from any available location." msgstr "Stok herhangi bir konumdan alınabilir." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Hedef" @@ -1981,23 +1924,23 @@ msgstr "Hedef konumu belirtilmedi" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Toplu" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Oluşturuldu" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Hedef tarih ayarlanmadı" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Tamamlandı" @@ -2015,13 +1958,13 @@ msgstr "Tamamlandı" msgid "Build not complete" msgstr "Yapım İşi tamamlanmadı" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Alt Yapım İşi Emrileri" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Yapım İşi için Stok Tahsis Et" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Stok Tahsis Et" @@ -2072,19 +2015,15 @@ msgstr "Yeni yapım işi çıktısı oluştur" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Tamamlanmış Yapım İşi Çıktıları" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Ekler" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Yapım İşi Notları" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Yeni Yapım İşi Emri" @@ -2120,57 +2059,10 @@ msgstr "Yeni Yapım İşi Emri" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Tamamlanmamış Çıktılar" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "{name.title()} Dosya" msgid "Select {name} file to upload" msgstr "{name} dosyasını yüklemek için seçin" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1132 -msgid "No group" +#: common/models.py:1114 +msgid "No group" +msgstr "" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" msgstr "" -#: common/models.py:1231 +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Şirket adı" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "Ana URL" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "günler" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "URL'den indir" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "DPN Regex" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Şablon" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Montaj" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Bileşen" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Satılabilir" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Takip Edilebilir" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Sanal" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Formlarda Miktarı Göster" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Kullanıcı" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Fiyat" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Aktif" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Bağlantı" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Resim" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Ek" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Eksik dosya" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Bozuk dış bağlantı" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Eklenecek dosyayı seç" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Yorum" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "Dosya adı" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Şirketler" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "Şirket web sitesi" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Telefon numarası" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "İletişim telefon numarası" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "İletişim e-posta adresi" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "İletişim" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "müşteri mi" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "Bu şirkete ürün satıyor musunuz?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "tedarikçi mi" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Bu şirketten ürün satın alıyor musunuz?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "üretici mi" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Bu şirket üretim yapıyor mu?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Adres" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Temel Parça" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Parça seçin" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Üretici" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "ÜPN" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Üretici Parça Numarası" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Parametre adı" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Değer" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Parametre değeri" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Tedarikçi Parçası" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Tedarikçi" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Not" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Paketleme" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "çoklu" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Pasif" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Müşteri" @@ -4648,12 +4334,19 @@ msgstr "Müşteri" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Adres" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "Yeni tedarikçi parçası oluştur" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Yeni Tedarikçi Parçası" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "Tedarikçi Stoku" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Yeni Satın Alma Emri" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Üreticiler" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Parça siparişi" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Tedarikçi Parçası" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Tedarikçi Parça Stoku" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "Fiyat Bilgisi" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Stok Kalemleri" @@ -5018,236 +4715,134 @@ msgstr "Müşteriler" msgid "New Customer" msgstr "Yeni Müşteri" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Şirketler" + #: company/views.py:52 msgid "New Company" msgstr "Yeni Şirket" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Sipariş verildi" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Etiket adı" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Etiket tanımı" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Etiket" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Etiket şablon listesi" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Etkin" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Etiket sablonu etkinleştirildi" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Genişlik [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Etiket genişliği mm olarak belirtilmeli" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Yükseklik [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Etiket yüksekliği mm olarak belirtilmeli" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Dosya Adı Deseni" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Etiket dosya adları oluşturma için desen" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Filtreler" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "Oluşturan" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Sevk edildi" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Kayıp" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "İade" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Devam Ediyor" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Geri Dön" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Siparişi iptal et" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Siparişi tamamlandı olarak işaretle" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Toplam Maliyet" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "İşlemler" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "DPN" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Revizyon" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Anahtar kelimeler" @@ -6423,16 +5917,15 @@ msgstr "Anahtar kelimeler" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Çeşidi" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -6452,187 +5945,165 @@ msgstr "Minimum Stok" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Parçalar" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Parça adı" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın çeşidi mi?" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "Parça revizyon veya versiyon numarası" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" +#: part/models.py:912 +msgid "Part revision or version number" +msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Etkin" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Gerekli" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Çeşide İzin Ver" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Parçalar (Alt kategoriler dahil)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "Parça Test Şablonları" msgid "Add Test Template" msgstr "Test Şablonu Ekle" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Parça Çeşitleri" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Yeni çeşit oluştur" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Yeni Çeşit" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Parça Tedarikçileri" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "Etiket Yazdır" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Stok işlemleri" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Parça işlemleri" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Son Seri Numarası" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Stok" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Stok Yok" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "İşlem belirtilmedi" msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1193 +8395,908 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Şablon için geçerli bir nesne sağlanmadı" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Şablon adı" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Dosya Adı Deseni" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Filtreler" +#: report/models.py:183 +msgid "Report template file" +msgstr "Rapor şablon dosyası" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Rapor şablon tanımı" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Revizyon numarası raporla (otomatik artış)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Genişlik [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Etiket genişliği mm olarak belirtilmeli" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Rapor şablonu etkin" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Yükseklik [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Stok kalemi sorgu filtreleri (anahter=değer [key=value] olarak virgülle ayrılmış liste)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Etiket yüksekliği mm olarak belirtilmeli" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "İçin Gerekli Olan" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Seri Numara" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seri No" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemi için tedarikçi parçası seçin" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "TAMAM" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Dikkat gerekli" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Hasarlı" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Kullanılamaz durumda" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Reddedildi" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Karantinaya alındı" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Eski stok izleme girişi" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Stok kalemi oluşturuldu" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Düzenlenen stok kalemi" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Atanan seri numarası" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Stok sayıldı" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Stok manuel olarak eklendi" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Stok manuel olarak çıkarıldı" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Konum değişti" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Stok Güncellendi" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Montajda kullanıldı" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Montajdan çıkarıldı" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Bileşen ögesinde kullanıldı" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Bileşen ögesinden çıkarıldı" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Üst ögeden ayır" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Alt ögeyi ayır" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Stok parçalarını birleştir" +msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Yapım emri çıktısı oluşturuldu" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" +msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Yapım emri çıktısı tamamlandı" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Müşteriye gönderildi" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Müşteriden geri döndü" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Konuma Tara" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Yazdırma işlemleri" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "Stok ayarlama işlemleri" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Stoku seri numarala" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Yapım İşi" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Konum ayarlanmadı" @@ -10487,6 +9514,11 @@ msgstr "Stok kalemi tüm gerekli testleri geçmedi" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erdi" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erecek" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Uyarı" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Bu işlem kolayca geri alınamaz" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "Bu stok kalemi için seri numaralandırılmış ögeler oluştur." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Seri numaralandırılacak miktarı ve benzersiz seri numaralarını seçin." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Konum işlemleri" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Konumu düzenle" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Konumu sil" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Bu konumun sahipleri listesinde değilsiniz. Bu stok konumu düzenlenemez." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Yeni stok konumu oluştur" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Yeni Konum" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "Hata Raporu Gönder" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "panoya kopyala" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Onay" @@ -11563,26 +10607,26 @@ msgstr "Onay" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "Tüm bildirimleri ve içeriğini göster" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR sağlanamadı" @@ -15125,14 +14122,6 @@ msgstr "E-posta Ayarları" msgid "Email settings not configured" msgstr "E-posta ayarları yapılandırılmadı" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Evet" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "İzinleri ayarla" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Grup" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Görünüm" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Parçayı görüntüleme izni" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Parça ekleme izni" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Değiştir" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Parçaları düzenleme izni" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Parçaları silme izni" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index a81078dc8c08..000000000000 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,15239 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: inventree\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" -"Last-Translator: \n" -"Language-Team: Ukrainian\n" -"Language: uk_UA\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: uk\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" - -#: InvenTree/api.py:269 -msgid "API endpoint not found" -msgstr "Кінцева точка API не знайдена" - -#: InvenTree/api.py:502 -msgid "User does not have permission to view this model" -msgstr "У користувача немає дозволу на перегляд цієї моделі" - -#: InvenTree/conversion.py:160 -#, python-brace-format -msgid "Invalid unit provided ({unit})" -msgstr "" - -#: InvenTree/conversion.py:177 -msgid "No value provided" -msgstr "Значення не вказане" - -#: InvenTree/conversion.py:204 -#, python-brace-format -msgid "Could not convert {original} to {unit}" -msgstr "Не вдалося перетворити {original} на {unit}" - -#: InvenTree/conversion.py:206 -msgid "Invalid quantity supplied" -msgstr "Невірна кількість поставляється" - -#: InvenTree/conversion.py:220 -#, python-brace-format -msgid "Invalid quantity supplied ({exc})" -msgstr "Невірна кількість поставляється ({exc})" - -#: InvenTree/exceptions.py:108 -msgid "Error details can be found in the admin panel" -msgstr "Деталі помилки можна знайти на панелі адміністратора" - -#: InvenTree/fields.py:136 -msgid "Enter date" -msgstr "Введіть дату" - -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 -#: order/templates/order/return_order_sidebar.html:9 -#: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 -msgid "Notes" -msgstr "Нотатки" - -#: InvenTree/format.py:164 -#, python-brace-format -msgid "Value '{name}' does not appear in pattern format" -msgstr "" - -#: InvenTree/format.py:175 -msgid "Provided value does not match required pattern: " -msgstr "" - -#: InvenTree/forms.py:129 -msgid "Enter password" -msgstr "Введіть пароль" - -#: InvenTree/forms.py:130 -msgid "Enter new password" -msgstr "Введіть новий пароль" - -#: InvenTree/forms.py:139 -msgid "Confirm password" -msgstr "Підтвердити пароль" - -#: InvenTree/forms.py:140 -msgid "Confirm new password" -msgstr "Підтвердити новий пароль" - -#: InvenTree/forms.py:144 -msgid "Old password" -msgstr "Старий пароль" - -#: InvenTree/forms.py:183 -msgid "Email (again)" -msgstr "Email (ще раз)" - -#: InvenTree/forms.py:187 -msgid "Email address confirmation" -msgstr "Підтвердження адреси електронної пошти" - -#: InvenTree/forms.py:210 -msgid "You must type the same email each time." -msgstr "Ви повинні використовувати щоразу однаковий email." - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 -msgid "The provided primary email address is not valid." -msgstr "Вказана основна адреса електронної пошти недійсна." - -#: InvenTree/forms.py:274 -msgid "The provided email domain is not approved." -msgstr "Наданий домен електронної пошти не затверджено." - -#: InvenTree/forms.py:403 -msgid "Registration is disabled." -msgstr "Реєстрацію вимкнено." - -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 -msgid "Invalid quantity provided" -msgstr "Невірна кількість" - -#: InvenTree/helpers.py:499 -msgid "Empty serial number string" -msgstr "Пустий серійний номер" - -#: InvenTree/helpers.py:528 -msgid "Duplicate serial" -msgstr "" - -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 -#, python-brace-format -msgid "Invalid group range: {group}" -msgstr "" - -#: InvenTree/helpers.py:591 -#, python-brace-format -msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 -#, python-brace-format -msgid "Invalid group sequence: {group}" -msgstr "" - -#: InvenTree/helpers.py:657 -msgid "No serial numbers found" -msgstr "" - -#: InvenTree/helpers.py:662 -msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "" - -#: InvenTree/helpers.py:780 -msgid "Remove HTML tags from this value" -msgstr "" - -#: InvenTree/helpers_model.py:133 -msgid "Connection error" -msgstr "" - -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 -msgid "Server responded with invalid status code" -msgstr "" - -#: InvenTree/helpers_model.py:141 -msgid "Exception occurred" -msgstr "" - -#: InvenTree/helpers_model.py:151 -msgid "Server responded with invalid Content-Length value" -msgstr "" - -#: InvenTree/helpers_model.py:154 -msgid "Image size is too large" -msgstr "" - -#: InvenTree/helpers_model.py:166 -msgid "Image download exceeded maximum size" -msgstr "" - -#: InvenTree/helpers_model.py:171 -msgid "Remote server returned empty response" -msgstr "" - -#: InvenTree/helpers_model.py:179 -msgid "Supplied URL is not a valid image file" -msgstr "" - -#: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 -msgid "Bulgarian" -msgstr "" - -#: InvenTree/locales.py:20 -msgid "Czech" -msgstr "" - -#: InvenTree/locales.py:21 -msgid "Danish" -msgstr "" - -#: InvenTree/locales.py:22 -msgid "German" -msgstr "" - -#: InvenTree/locales.py:23 -msgid "Greek" -msgstr "" - -#: InvenTree/locales.py:24 -msgid "English" -msgstr "" - -#: InvenTree/locales.py:25 -msgid "Spanish" -msgstr "" - -#: InvenTree/locales.py:26 -msgid "Spanish (Mexican)" -msgstr "" - -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 -msgid "Farsi / Persian" -msgstr "" - -#: InvenTree/locales.py:29 -msgid "Finnish" -msgstr "" - -#: InvenTree/locales.py:30 -msgid "French" -msgstr "" - -#: InvenTree/locales.py:31 -msgid "Hebrew" -msgstr "" - -#: InvenTree/locales.py:32 -msgid "Hindi" -msgstr "" - -#: InvenTree/locales.py:33 -msgid "Hungarian" -msgstr "" - -#: InvenTree/locales.py:34 -msgid "Italian" -msgstr "" - -#: InvenTree/locales.py:35 -msgid "Japanese" -msgstr "" - -#: InvenTree/locales.py:36 -msgid "Korean" -msgstr "" - -#: InvenTree/locales.py:37 -msgid "Latvian" -msgstr "" - -#: InvenTree/locales.py:38 -msgid "Dutch" -msgstr "" - -#: InvenTree/locales.py:39 -msgid "Norwegian" -msgstr "" - -#: InvenTree/locales.py:40 -msgid "Polish" -msgstr "" - -#: InvenTree/locales.py:41 -msgid "Portuguese" -msgstr "" - -#: InvenTree/locales.py:42 -msgid "Portuguese (Brazilian)" -msgstr "" - -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 -msgid "Russian" -msgstr "" - -#: InvenTree/locales.py:45 -msgid "Slovak" -msgstr "" - -#: InvenTree/locales.py:46 -msgid "Slovenian" -msgstr "" - -#: InvenTree/locales.py:47 -msgid "Serbian" -msgstr "" - -#: InvenTree/locales.py:48 -msgid "Swedish" -msgstr "" - -#: InvenTree/locales.py:49 -msgid "Thai" -msgstr "Тайська" - -#: InvenTree/locales.py:50 -msgid "Turkish" -msgstr "Турецька" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "Українська" - -#: InvenTree/locales.py:52 -msgid "Vietnamese" -msgstr "В’єтнамська" - -#: InvenTree/locales.py:53 -msgid "Chinese (Simplified)" -msgstr "Китайська (спрощена)" - -#: InvenTree/locales.py:54 -msgid "Chinese (Traditional)" -msgstr "Китайська (Традиційна)" - -#: InvenTree/magic_login.py:28 -#, python-brace-format -msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] Увійти в додаток" - -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 -#: templates/InvenTree/settings/user.html:49 -#: templates/js/translated/company.js:677 -msgid "Email" -msgstr "" - -#: InvenTree/models.py:103 -msgid "Error running plugin validation" -msgstr "" - -#: InvenTree/models.py:172 -msgid "Metadata must be a python dict object" -msgstr "" - -#: InvenTree/models.py:178 -msgid "Plugin Metadata" -msgstr "" - -#: InvenTree/models.py:179 -msgid "JSON metadata field, for use by external plugins" -msgstr "" - -#: InvenTree/models.py:409 -msgid "Improperly formatted pattern" -msgstr "" - -#: InvenTree/models.py:416 -msgid "Unknown format key specified" -msgstr "" - -#: InvenTree/models.py:422 -msgid "Missing required format key" -msgstr "" - -#: InvenTree/models.py:433 -msgid "Reference field cannot be empty" -msgstr "" - -#: InvenTree/models.py:441 -msgid "Reference must match required pattern" -msgstr "" - -#: InvenTree/models.py:472 -msgid "Reference number is too large" -msgstr "" - -#: InvenTree/models.py:723 -msgid "Duplicate names cannot exist under the same parent" -msgstr "" - -#: InvenTree/models.py:740 -msgid "Invalid choice" -msgstr "" - -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 -#: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 -#: templates/InvenTree/settings/plugin_settings.html:22 -#: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 -#: templates/js/translated/company.js:676 -#: templates/js/translated/company.js:724 -#: templates/js/translated/company.js:913 -#: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 -msgid "Name" -msgstr "" - -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 -#: company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 -#: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 -#: templates/InvenTree/settings/notifications.html:19 -#: templates/InvenTree/settings/plugin_settings.html:27 -#: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 -#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 -#: templates/js/translated/company.js:1330 -#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 -#: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 -msgid "Description" -msgstr "" - -#: InvenTree/models.py:777 stock/models.py:84 -msgid "Description (optional)" -msgstr "" - -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 -msgid "Path" -msgstr "Шлях" - -#: InvenTree/models.py:929 -msgid "Markdown notes (optional)" -msgstr "" - -#: InvenTree/models.py:960 -msgid "Barcode Data" -msgstr "" - -#: InvenTree/models.py:961 -msgid "Third party barcode data" -msgstr "" - -#: InvenTree/models.py:967 -msgid "Barcode Hash" -msgstr "" - -#: InvenTree/models.py:968 -msgid "Unique hash of barcode data" -msgstr "" - -#: InvenTree/models.py:1035 -msgid "Existing barcode found" -msgstr "" - -#: InvenTree/models.py:1078 -msgid "Server Error" -msgstr "" - -#: InvenTree/models.py:1079 -msgid "An error has been logged by the server." -msgstr "" - -#: InvenTree/serializers.py:63 part/models.py:4387 -msgid "Must be a valid number" -msgstr "" - -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 -#: templates/InvenTree/settings/settings_staff_js.html:44 -#: templates/currency_data.html:5 -msgid "Currency" -msgstr "" - -#: InvenTree/serializers.py:103 -msgid "Select currency from available options" -msgstr "" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Ім`я" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Прізвище" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "Адреса електронної пошти користувача" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "Персонал" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 -msgid "You do not have permission to change this user role." -msgstr "" - -#: InvenTree/serializers.py:475 -msgid "Only superusers can create new users" -msgstr "" - -#: InvenTree/serializers.py:494 -msgid "Your account has been created." -msgstr "" - -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" -msgstr "" - -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" -msgstr "" - -#: InvenTree/serializers.py:561 -msgid "Invalid value" -msgstr "" - -#: InvenTree/serializers.py:581 importer/models.py:63 -msgid "Data File" -msgstr "" - -#: InvenTree/serializers.py:582 -msgid "Select data file for upload" -msgstr "" - -#: InvenTree/serializers.py:599 -msgid "Unsupported file type" -msgstr "" - -#: InvenTree/serializers.py:605 -msgid "File is too large" -msgstr "" - -#: InvenTree/serializers.py:626 -msgid "No columns found in file" -msgstr "" - -#: InvenTree/serializers.py:629 -msgid "No data rows found in file" -msgstr "" - -#: InvenTree/serializers.py:742 -msgid "No data rows provided" -msgstr "" - -#: InvenTree/serializers.py:745 -msgid "No data columns supplied" -msgstr "" - -#: InvenTree/serializers.py:812 -#, python-brace-format -msgid "Missing required column: '{name}'" -msgstr "" - -#: InvenTree/serializers.py:821 -#, python-brace-format -msgid "Duplicate column: '{col}'" -msgstr "" - -#: InvenTree/serializers.py:861 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:862 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:880 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/status.py:66 part/serializers.py:1246 -msgid "Background worker check failed" -msgstr "" - -#: InvenTree/status.py:70 -msgid "Email backend not configured" -msgstr "" - -#: InvenTree/status.py:73 -msgid "InvenTree system health checks failed" -msgstr "" - -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" -msgstr "" - -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" -msgstr "" - -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" -msgstr "" - -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" -msgstr "" - -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" -msgstr "" - -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" -msgstr "" - -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" -msgstr "" - -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" -msgstr "" - -#: InvenTree/views.py:434 -msgid "Password fields must match" -msgstr "" - -#: InvenTree/views.py:442 -msgid "Wrong password provided" -msgstr "" - -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" -msgstr "" - -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" -msgstr "" - -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "" - -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "" - -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "" - -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" -msgstr "" - -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" -msgstr "" - -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" -msgstr "" - -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" -msgstr "" - -#: build/models.py:180 -msgid "Build order part cannot be changed" -msgstr "" - -#: build/models.py:241 -msgid "Build Order Reference" -msgstr "" - -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 -#: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 -#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 -msgid "Reference" -msgstr "" - -#: build/models.py:253 -msgid "Brief description of the build (optional)" -msgstr "" - -#: build/models.py:262 -msgid "BuildOrder to which this build is allocated" -msgstr "" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 -#: part/templates/part/part_app_base.html:8 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/upload_bom.html:52 -#: report/templates/report/inventree_bill_of_materials_report.html:110 -#: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 -#: templates/email/build_order_completed.html:17 -#: templates/email/build_order_required_stock.html:17 -#: templates/email/low_stock_notification.html:15 -#: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 -#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 -#: templates/js/translated/company.js:1116 -#: templates/js/translated/company.js:1271 -#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 -#: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 -#: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 -msgid "Part" -msgstr "Деталь" - -#: build/models.py:275 -msgid "Select part to build" -msgstr "Обрати деталь для створення" - -#: build/models.py:280 -msgid "Sales Order Reference" -msgstr "" - -#: build/models.py:284 -msgid "SalesOrder to which this build is allocated" -msgstr "" - -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 -msgid "Source Location" -msgstr "" - -#: build/models.py:293 -msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" - -#: build/models.py:298 -msgid "Destination Location" -msgstr "" - -#: build/models.py:302 -msgid "Select location where the completed items will be stored" -msgstr "" - -#: build/models.py:306 -msgid "Build Quantity" -msgstr "" - -#: build/models.py:309 -msgid "Number of stock items to build" -msgstr "" - -#: build/models.py:313 -msgid "Completed items" -msgstr "" - -#: build/models.py:315 -msgid "Number of stock items which have been completed" -msgstr "" - -#: build/models.py:319 -msgid "Build Status" -msgstr "" - -#: build/models.py:323 -msgid "Build status code" -msgstr "" - -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 -msgid "Batch Code" -msgstr "" - -#: build/models.py:336 build/serializers.py:303 -msgid "Batch code for this build output" -msgstr "" - -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 -msgid "Creation Date" -msgstr "" - -#: build/models.py:343 -msgid "Target completion date" -msgstr "" - -#: build/models.py:344 -msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" - -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 -msgid "Completion Date" -msgstr "" - -#: build/models.py:353 -msgid "completed by" -msgstr "" - -#: build/models.py:361 templates/js/translated/build.js:2379 -msgid "Issued by" -msgstr "" - -#: build/models.py:362 -msgid "User who issued this build order" -msgstr "" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 -#: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 -msgid "Responsible" -msgstr "" - -#: build/models.py:371 -msgid "User or group responsible for this build order" -msgstr "" - -#: build/models.py:376 build/templates/build/detail.html:108 -#: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 -#: stock/templates/stock/item_base.html:200 -#: templates/js/translated/company.js:1019 -msgid "External Link" -msgstr "" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 -msgid "Build Priority" -msgstr "" - -#: build/models.py:384 -msgid "Priority of this build order" -msgstr "" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 -#: templates/project_code_data.html:6 -msgid "Project Code" -msgstr "" - -#: build/models.py:392 -msgid "Project code for this build order" -msgstr "" - -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 -#, python-brace-format -msgid "Build order {build} has been completed" -msgstr "" - -#: build/models.py:679 -msgid "A build order has been completed" -msgstr "" - -#: build/models.py:967 build/models.py:1055 -msgid "No build output specified" -msgstr "" - -#: build/models.py:970 -msgid "Build output is already completed" -msgstr "" - -#: build/models.py:973 -msgid "Build output does not match Build Order" -msgstr "" - -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 -msgid "Quantity must be greater than zero" -msgstr "" - -#: build/models.py:1064 build/serializers.py:240 -msgid "Quantity cannot be greater than the output quantity" -msgstr "" - -#: build/models.py:1124 build/serializers.py:563 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 -msgid "Build object" -msgstr "" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 -#: part/templates/part/part_pricing.html:16 -#: part/templates/part/upload_bom.html:53 -#: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 -#: stock/templates/stock/item_base.html:287 -#: stock/templates/stock/item_base.html:295 -#: stock/templates/stock/item_base.html:342 -#: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 -#: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 -#: templates/js/translated/pricing.js:381 -#: templates/js/translated/pricing.js:474 -#: templates/js/translated/pricing.js:522 -#: templates/js/translated/pricing.js:616 -#: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 -#: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 -msgid "Quantity" -msgstr "" - -#: build/models.py:1505 -msgid "Required quantity for build order" -msgstr "" - -#: build/models.py:1585 -msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" - -#: build/models.py:1594 -#, python-brace-format -msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" - -#: build/models.py:1604 order/models.py:1992 -msgid "Stock item is over-allocated" -msgstr "" - -#: build/models.py:1610 order/models.py:1995 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1616 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1675 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 -#: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 -#: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 -msgid "Stock Item" -msgstr "" - -#: build/models.py:1748 -msgid "Source stock item" -msgstr "" - -#: build/models.py:1761 -msgid "Stock quantity to allocate to build" -msgstr "" - -#: build/models.py:1769 -msgid "Install into" -msgstr "" - -#: build/models.py:1770 -msgid "Destination stock item" -msgstr "" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 -msgid "Build Output" -msgstr "" - -#: build/serializers.py:184 -msgid "Build output does not match the parent build" -msgstr "" - -#: build/serializers.py:188 -msgid "Output part does not match BuildOrder part" -msgstr "" - -#: build/serializers.py:192 -msgid "This build output has already been completed" -msgstr "" - -#: build/serializers.py:203 -msgid "This build output is not fully allocated" -msgstr "" - -#: build/serializers.py:223 build/serializers.py:270 -msgid "Enter quantity for build output" -msgstr "" - -#: build/serializers.py:291 -msgid "Integer quantity required for trackable parts" -msgstr "" - -#: build/serializers.py:294 -msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" - -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 -msgid "Serial Numbers" -msgstr "" - -#: build/serializers.py:310 -msgid "Enter serial numbers for build outputs" -msgstr "" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:331 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:457 -msgid "Stock location for scrapped outputs" -msgstr "" - -#: build/serializers.py:463 -msgid "Discard Allocations" -msgstr "" - -#: build/serializers.py:464 -msgid "Discard any stock allocations for scrapped outputs" -msgstr "" - -#: build/serializers.py:469 -msgid "Reason for scrapping build output(s)" -msgstr "" - -#: build/serializers.py:529 -msgid "Location for completed build outputs" -msgstr "" - -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 -msgid "Status" -msgstr "" - -#: build/serializers.py:541 -msgid "Accept Incomplete Allocation" -msgstr "" - -#: build/serializers.py:542 -msgid "Complete outputs if stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "" - -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" - -#: build/serializers.py:661 -msgid "Remove Incomplete Outputs" -msgstr "" - -#: build/serializers.py:662 -msgid "Delete any build outputs which have not been completed" -msgstr "" - -#: build/serializers.py:689 -msgid "Not permitted" -msgstr "" - -#: build/serializers.py:690 -msgid "Accept as consumed by this build order" -msgstr "" - -#: build/serializers.py:691 -msgid "Deallocate before completing this build order" -msgstr "" - -#: build/serializers.py:721 -msgid "Overallocated Stock" -msgstr "" - -#: build/serializers.py:723 -msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" - -#: build/serializers.py:733 -msgid "Some stock items have been overallocated" -msgstr "" - -#: build/serializers.py:738 -msgid "Accept Unallocated" -msgstr "" - -#: build/serializers.py:739 -msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" - -#: build/serializers.py:749 templates/js/translated/build.js:316 -msgid "Required stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 -msgid "Accept Incomplete" -msgstr "" - -#: build/serializers.py:755 -msgid "Accept that the required number of build outputs have not been completed" -msgstr "" - -#: build/serializers.py:765 templates/js/translated/build.js:320 -msgid "Required build quantity has not been completed" -msgstr "" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 -msgid "Build order has incomplete outputs" -msgstr "" - -#: build/serializers.py:818 -msgid "Build Line" -msgstr "" - -#: build/serializers.py:828 -msgid "Build output" -msgstr "" - -#: build/serializers.py:836 -msgid "Build output must point to the same build" -msgstr "" - -#: build/serializers.py:872 -msgid "Build Line Item" -msgstr "" - -#: build/serializers.py:886 -msgid "bom_item.part must point to the same part as the build order" -msgstr "" - -#: build/serializers.py:901 stock/serializers.py:1294 -msgid "Item must be in stock" -msgstr "" - -#: build/serializers.py:949 order/serializers.py:1351 -#, python-brace-format -msgid "Available quantity ({q}) exceeded" -msgstr "" - -#: build/serializers.py:955 -msgid "Build output must be specified for allocation of tracked parts" -msgstr "" - -#: build/serializers.py:962 -msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" - -#: build/serializers.py:986 order/serializers.py:1610 -msgid "Allocation items must be provided" -msgstr "" - -#: build/serializers.py:1049 -msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" - -#: build/serializers.py:1057 -msgid "Exclude Location" -msgstr "" - -#: build/serializers.py:1058 -msgid "Exclude stock items from this selected location" -msgstr "" - -#: build/serializers.py:1063 -msgid "Interchangeable Stock" -msgstr "" - -#: build/serializers.py:1064 -msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" - -#: build/serializers.py:1069 -msgid "Substitute Stock" -msgstr "" - -#: build/serializers.py:1070 -msgid "Allow allocation of substitute parts" -msgstr "" - -#: build/serializers.py:1075 -msgid "Optional Items" -msgstr "" - -#: build/serializers.py:1076 -msgid "Allocate optional BOM items to build order" -msgstr "" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 -msgid "Stock required for build order" -msgstr "" - -#: build/tasks.py:201 -msgid "Overdue Build Order" -msgstr "" - -#: build/tasks.py:206 -#, python-brace-format -msgid "Build order {bo} is now overdue" -msgstr "" - -#: build/templates/build/build_base.html:18 -msgid "Part thumbnail" -msgstr "" - -#: build/templates/build/build_base.html:38 -#: company/templates/company/supplier_part.html:35 -#: order/templates/order/order_base.html:29 -#: order/templates/order/return_order_base.html:38 -#: order/templates/order/sales_order_base.html:38 -#: part/templates/part/part_base.html:41 -#: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 -msgid "Barcode actions" -msgstr "" - -#: build/templates/build/build_base.html:42 -#: company/templates/company/supplier_part.html:39 -#: order/templates/order/order_base.html:33 -#: order/templates/order/return_order_base.html:42 -#: order/templates/order/sales_order_base.html:42 -#: part/templates/part/part_base.html:44 -#: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: build/templates/build/build_base.html:45 -#: company/templates/company/supplier_part.html:41 -#: order/templates/order/order_base.html:36 -#: order/templates/order/return_order_base.html:45 -#: order/templates/order/sales_order_base.html:45 -#: part/templates/part/part_base.html:47 -#: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 -msgid "Unlink Barcode" -msgstr "" - -#: build/templates/build/build_base.html:47 -#: company/templates/company/supplier_part.html:43 -#: order/templates/order/order_base.html:38 -#: order/templates/order/return_order_base.html:47 -#: order/templates/order/sales_order_base.html:47 -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 -msgid "Link Barcode" -msgstr "" - -#: build/templates/build/build_base.html:56 -#: order/templates/order/order_base.html:46 -#: order/templates/order/return_order_base.html:55 -#: order/templates/order/sales_order_base.html:55 -msgid "Print actions" -msgstr "" - -#: build/templates/build/build_base.html:60 -msgid "Print build order report" -msgstr "" - -#: build/templates/build/build_base.html:67 -msgid "Build actions" -msgstr "" - -#: build/templates/build/build_base.html:71 -msgid "Edit Build" -msgstr "" - -#: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "" - -#: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" - -#: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 -msgid "Delete Build" -msgstr "" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 -msgid "Complete Build" -msgstr "" - -#: build/templates/build/build_base.html:115 -msgid "Build Description" -msgstr "" - -#: build/templates/build/build_base.html:125 -msgid "No build outputs have been created for this build order" -msgstr "" - -#: build/templates/build/build_base.html:132 -msgid "Build Order is ready to mark as completed" -msgstr "" - -#: build/templates/build/build_base.html:137 -msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" - -#: build/templates/build/build_base.html:142 -msgid "Required build quantity has not yet been completed" -msgstr "" - -#: build/templates/build/build_base.html:147 -msgid "Stock has not been fully allocated to this Build Order" -msgstr "" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 -msgid "Target Date" -msgstr "" - -#: build/templates/build/build_base.html:173 -#, python-format -msgid "This build was due on %(target)s" -msgstr "" - -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 -msgid "Overdue" -msgstr "" - -#: build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 -msgid "Completed Outputs" -msgstr "" - -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 -#: order/templates/order/sales_order_base.html:9 -#: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 -#: stock/templates/stock/item_base.html:369 -#: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 -msgid "Sales Order" -msgstr "" - -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 -msgid "Delete Build Order" -msgstr "" - -#: build/templates/build/build_base.html:312 -msgid "Build Order QR Code" -msgstr "" - -#: build/templates/build/build_base.html:324 -msgid "Link Barcode to Build Order" -msgstr "" - -#: build/templates/build/detail.html:15 -msgid "Build Details" -msgstr "" - -#: build/templates/build/detail.html:38 -msgid "Stock Source" -msgstr "" - -#: build/templates/build/detail.html:43 -msgid "Stock can be taken from any available location." -msgstr "" - -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 -msgid "Destination" -msgstr "" - -#: build/templates/build/detail.html:56 -msgid "Destination location not specified" -msgstr "" - -#: build/templates/build/detail.html:73 -msgid "Allocated Parts" -msgstr "" - -#: build/templates/build/detail.html:80 stock/admin.py:162 -#: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 -msgid "Batch" -msgstr "" - -#: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 -msgid "Created" -msgstr "" - -#: build/templates/build/detail.html:144 -msgid "No target date set" -msgstr "" - -#: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 -msgid "Completed" -msgstr "" - -#: build/templates/build/detail.html:153 -msgid "Build not complete" -msgstr "" - -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 -msgid "Child Build Orders" -msgstr "" - -#: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" - -#: build/templates/build/detail.html:181 -msgid "Deallocate stock" -msgstr "" - -#: build/templates/build/detail.html:182 -msgid "Deallocate Stock" -msgstr "" - -#: build/templates/build/detail.html:184 -msgid "Automatically allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:185 -msgid "Auto Allocate" -msgstr "" - -#: build/templates/build/detail.html:187 -msgid "Manually allocate stock to build" -msgstr "" - -#: build/templates/build/detail.html:188 -msgid "Allocate Stock" -msgstr "" - -#: build/templates/build/detail.html:191 -msgid "Order required parts" -msgstr "" - -#: build/templates/build/detail.html:192 -#: templates/js/translated/purchase_order.js:795 -msgid "Order Parts" -msgstr "" - -#: build/templates/build/detail.html:205 -msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" - -#: build/templates/build/detail.html:215 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:219 -msgid "Create new build output" -msgstr "" - -#: build/templates/build/detail.html:220 -msgid "New Build Output" -msgstr "" - -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 -msgid "Consumed Stock" -msgstr "" - -#: build/templates/build/detail.html:261 -msgid "Completed Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 -#: company/templates/company/detail.html:229 -#: company/templates/company/manufacturer_part.html:141 -#: company/templates/company/manufacturer_part_sidebar.html:9 -#: company/templates/company/sidebar.html:39 -#: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:84 -#: order/templates/order/return_order_detail.html:70 -#: order/templates/order/return_order_sidebar.html:7 -#: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 -#: stock/templates/stock/stock_sidebar.html:23 -msgid "Attachments" -msgstr "" - -#: build/templates/build/detail.html:303 -msgid "Build Notes" -msgstr "" - -#: build/templates/build/detail.html:458 -msgid "Allocation Complete" -msgstr "" - -#: build/templates/build/detail.html:459 -msgid "All lines have been fully allocated" -msgstr "" - -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 -msgid "New Build Order" -msgstr "" - -#: build/templates/build/sidebar.html:5 -msgid "Build Order Details" -msgstr "" - -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - -#: build/templates/build/sidebar.html:10 -msgid "Incomplete Outputs" -msgstr "" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - -#: common/files.py:63 -#, python-brace-format -msgid "Unsupported file format: {fmt}" -msgstr "" - -#: common/files.py:65 -msgid "Error reading file (invalid encoding)" -msgstr "" - -#: common/files.py:70 -msgid "Error reading file (invalid format)" -msgstr "" - -#: common/files.py:72 -msgid "Error reading file (incorrect dimension)" -msgstr "" - -#: common/files.py:74 -msgid "Error reading file (data could be corrupted)" -msgstr "" - -#: common/forms.py:12 -msgid "File" -msgstr "" - -#: common/forms.py:12 -msgid "Select file to upload" -msgstr "" - -#: common/forms.py:25 -msgid "{name.title()} File" -msgstr "" - -#: common/forms.py:26 -#, python-brace-format -msgid "Select {name} file to upload" -msgstr "" - -#: common/models.py:86 -msgid "Updated" -msgstr "" - -#: common/models.py:87 -msgid "Timestamp of last update" -msgstr "" - -#: common/models.py:120 -msgid "Site URL is locked by configuration" -msgstr "" - -#: common/models.py:150 -msgid "Unique project code" -msgstr "" - -#: common/models.py:157 -msgid "Project description" -msgstr "" - -#: common/models.py:166 -msgid "User or group responsible for this project" -msgstr "" - -#: common/models.py:783 -msgid "Settings key (must be unique - case insensitive)" -msgstr "" - -#: common/models.py:787 -msgid "Settings value" -msgstr "" - -#: common/models.py:839 -msgid "Chosen value is not a valid option" -msgstr "" - -#: common/models.py:855 -msgid "Value must be a boolean value" -msgstr "" - -#: common/models.py:863 -msgid "Value must be an integer value" -msgstr "" - -#: common/models.py:900 -msgid "Key string must be unique" -msgstr "" - -#: common/models.py:1132 -msgid "No group" -msgstr "" - -#: common/models.py:1231 -msgid "Restart required" -msgstr "" - -#: common/models.py:1233 -msgid "A setting has been changed which requires a server restart" -msgstr "" - -#: common/models.py:1240 -msgid "Pending migrations" -msgstr "" - -#: common/models.py:1241 -msgid "Number of pending database migrations" -msgstr "" - -#: common/models.py:1246 -msgid "Server Instance Name" -msgstr "" - -#: common/models.py:1248 -msgid "String descriptor for the server instance" -msgstr "" - -#: common/models.py:1252 -msgid "Use instance name" -msgstr "" - -#: common/models.py:1253 -msgid "Use the instance name in the title-bar" -msgstr "" - -#: common/models.py:1258 -msgid "Restrict showing `about`" -msgstr "" - -#: common/models.py:1259 -msgid "Show the `about` modal only to superusers" -msgstr "" - -#: common/models.py:1264 company/models.py:111 company/models.py:112 -msgid "Company name" -msgstr "" - -#: common/models.py:1265 -msgid "Internal company name" -msgstr "" - -#: common/models.py:1269 -msgid "Base URL" -msgstr "" - -#: common/models.py:1270 -msgid "Base URL for server instance" -msgstr "" - -#: common/models.py:1276 -msgid "Default Currency" -msgstr "" - -#: common/models.py:1277 -msgid "Select base currency for pricing calculations" -msgstr "" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 -msgid "Currency Update Interval" -msgstr "" - -#: common/models.py:1292 -msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" - -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 -msgid "days" -msgstr "" - -#: common/models.py:1299 -msgid "Currency Update Plugin" -msgstr "" - -#: common/models.py:1300 -msgid "Currency update plugin to use" -msgstr "" - -#: common/models.py:1305 -msgid "Download from URL" -msgstr "" - -#: common/models.py:1307 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/models.py:1313 -msgid "Download Size Limit" -msgstr "" - -#: common/models.py:1314 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/models.py:1320 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:1322 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" - -#: common/models.py:1327 -msgid "Strict URL Validation" -msgstr "" - -#: common/models.py:1328 -msgid "Require schema specification when validating URLs" -msgstr "" - -#: common/models.py:1333 -msgid "Require confirm" -msgstr "" - -#: common/models.py:1334 -msgid "Require explicit user confirmation for certain action." -msgstr "" - -#: common/models.py:1339 -msgid "Tree Depth" -msgstr "" - -#: common/models.py:1341 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" - -#: common/models.py:1347 -msgid "Update Check Interval" -msgstr "" - -#: common/models.py:1348 -msgid "How often to check for updates (set to zero to disable)" -msgstr "" - -#: common/models.py:1354 -msgid "Automatic Backup" -msgstr "" - -#: common/models.py:1355 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:1360 -msgid "Auto Backup Interval" -msgstr "" - -#: common/models.py:1361 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:1367 -msgid "Task Deletion Interval" -msgstr "" - -#: common/models.py:1369 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1376 -msgid "Error Log Deletion Interval" -msgstr "" - -#: common/models.py:1378 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1385 -msgid "Notification Deletion Interval" -msgstr "" - -#: common/models.py:1387 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1395 -msgid "Enable barcode scanner support in the web interface" -msgstr "" - -#: common/models.py:1400 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1401 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1407 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1408 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 -msgid "Part Revisions" -msgstr "" - -#: common/models.py:1426 -msgid "Enable revision field for Part" -msgstr "" - -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1444 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1447 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1448 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1453 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1454 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1459 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1460 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1465 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1466 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1471 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1472 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1477 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1478 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 -msgid "Template" -msgstr "" - -#: common/models.py:1484 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1490 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 -msgid "Component" -msgstr "" - -#: common/models.py:1496 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1502 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 -msgid "Salable" -msgstr "" - -#: common/models.py:1508 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1514 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 -#: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 -msgid "Virtual" -msgstr "" - -#: common/models.py:1520 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1525 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1526 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1531 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1532 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1537 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1538 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1543 templates/js/translated/part.js:108 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1545 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1551 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1552 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1558 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1559 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1564 -msgid "Enforce Parameter Units" -msgstr "" - -#: common/models.py:1566 -msgid "If units are provided, parameter values must match the specified units" -msgstr "" - -#: common/models.py:1572 -msgid "Minimum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1574 -msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1585 -msgid "Maximum Pricing Decimal Places" -msgstr "" - -#: common/models.py:1587 -msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1598 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1600 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1606 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1608 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1614 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1616 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1622 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1624 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1631 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1632 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1637 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1639 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1645 -msgid "Pricing Rebuild Interval" -msgstr "" - -#: common/models.py:1647 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1654 -msgid "Internal Prices" -msgstr "" - -#: common/models.py:1655 -msgid "Enable internal prices for parts" -msgstr "" - -#: common/models.py:1660 -msgid "Internal Price Override" -msgstr "" - -#: common/models.py:1662 -msgid "If available, internal prices override price range calculations" -msgstr "" - -#: common/models.py:1668 -msgid "Enable label printing" -msgstr "" - -#: common/models.py:1669 -msgid "Enable label printing from the web interface" -msgstr "" - -#: common/models.py:1674 -msgid "Label Image DPI" -msgstr "" - -#: common/models.py:1676 -msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" - -#: common/models.py:1682 -msgid "Enable Reports" -msgstr "" - -#: common/models.py:1683 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1688 templates/stats.html:25 -msgid "Debug Mode" -msgstr "" - -#: common/models.py:1689 -msgid "Generate reports in debug mode (HTML output)" -msgstr "" - -#: common/models.py:1694 -msgid "Log Report Errors" -msgstr "" - -#: common/models.py:1695 -msgid "Log errors which occur when generating reports" -msgstr "" - -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 -msgid "Page Size" -msgstr "" - -#: common/models.py:1701 -msgid "Default page size for PDF reports" -msgstr "" - -#: common/models.py:1706 -msgid "Enable Test Reports" -msgstr "" - -#: common/models.py:1707 -msgid "Enable generation of test reports" -msgstr "" - -#: common/models.py:1712 -msgid "Attach Test Reports" -msgstr "" - -#: common/models.py:1714 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "" - -#: common/models.py:1720 -msgid "Globally Unique Serials" -msgstr "" - -#: common/models.py:1721 -msgid "Serial numbers for stock items must be globally unique" -msgstr "" - -#: common/models.py:1726 -msgid "Autofill Serial Numbers" -msgstr "" - -#: common/models.py:1727 -msgid "Autofill serial numbers in forms" -msgstr "" - -#: common/models.py:1732 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1734 -msgid "Determines default behavior when a stock item is depleted" -msgstr "" - -#: common/models.py:1740 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1742 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1747 -msgid "Stock Expiry" -msgstr "" - -#: common/models.py:1748 -msgid "Enable stock expiry functionality" -msgstr "" - -#: common/models.py:1753 -msgid "Sell Expired Stock" -msgstr "" - -#: common/models.py:1754 -msgid "Allow sale of expired stock" -msgstr "" - -#: common/models.py:1759 -msgid "Stock Stale Time" -msgstr "" - -#: common/models.py:1761 -msgid "Number of days stock items are considered stale before expiring" -msgstr "" - -#: common/models.py:1768 -msgid "Build Expired Stock" -msgstr "" - -#: common/models.py:1769 -msgid "Allow building with expired stock" -msgstr "" - -#: common/models.py:1774 -msgid "Stock Ownership Control" -msgstr "" - -#: common/models.py:1775 -msgid "Enable ownership control over stock locations and items" -msgstr "" - -#: common/models.py:1780 -msgid "Stock Location Default Icon" -msgstr "" - -#: common/models.py:1781 -msgid "Stock location default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1786 -msgid "Show Installed Stock Items" -msgstr "" - -#: common/models.py:1787 -msgid "Display installed stock items in stock tables" -msgstr "" - -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 -msgid "Build Order Reference Pattern" -msgstr "" - -#: common/models.py:1810 -msgid "Required pattern for generating Build Order reference field" -msgstr "" - -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/models.py:1852 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" - -#: common/models.py:1858 -msgid "Enable Return Orders" -msgstr "" - -#: common/models.py:1859 -msgid "Enable return order functionality in the user interface" -msgstr "" - -#: common/models.py:1864 -msgid "Return Order Reference Pattern" -msgstr "" - -#: common/models.py:1866 -msgid "Required pattern for generating Return Order reference field" -msgstr "" - -#: common/models.py:1878 -msgid "Edit Completed Return Orders" -msgstr "" - -#: common/models.py:1880 -msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/models.py:1886 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1888 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1900 -msgid "Sales Order Default Shipment" -msgstr "" - -#: common/models.py:1901 -msgid "Enable creation of default shipment with sales orders" -msgstr "" - -#: common/models.py:1906 -msgid "Edit Completed Sales Orders" -msgstr "" - -#: common/models.py:1908 -msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 -msgid "Purchase Order Reference Pattern" -msgstr "" - -#: common/models.py:1924 -msgid "Required pattern for generating Purchase Order reference field" -msgstr "" - -#: common/models.py:1936 -msgid "Edit Completed Purchase Orders" -msgstr "" - -#: common/models.py:1938 -msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" - -#: common/models.py:1944 -msgid "Auto Complete Purchase Orders" -msgstr "" - -#: common/models.py:1946 -msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" - -#: common/models.py:1953 -msgid "Enable password forgot" -msgstr "" - -#: common/models.py:1954 -msgid "Enable password forgot function on the login pages" -msgstr "" - -#: common/models.py:1959 -msgid "Enable registration" -msgstr "" - -#: common/models.py:1960 -msgid "Enable self-registration for users on the login pages" -msgstr "" - -#: common/models.py:1965 -msgid "Enable SSO" -msgstr "" - -#: common/models.py:1966 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1971 -msgid "Enable SSO registration" -msgstr "" - -#: common/models.py:1973 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" - -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 -msgid "Email required" -msgstr "" - -#: common/models.py:2012 -msgid "Require user to supply mail on signup" -msgstr "" - -#: common/models.py:2017 -msgid "Auto-fill SSO users" -msgstr "" - -#: common/models.py:2019 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" - -#: common/models.py:2025 -msgid "Mail twice" -msgstr "" - -#: common/models.py:2026 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:2031 -msgid "Password twice" -msgstr "" - -#: common/models.py:2032 -msgid "On signup ask users twice for their password" -msgstr "" - -#: common/models.py:2037 -msgid "Allowed domains" -msgstr "" - -#: common/models.py:2039 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" - -#: common/models.py:2045 -msgid "Group on signup" -msgstr "" - -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" - -#: common/models.py:2053 -msgid "Enforce MFA" -msgstr "" - -#: common/models.py:2054 -msgid "Users must use multifactor security." -msgstr "" - -#: common/models.py:2059 -msgid "Check plugins on startup" -msgstr "" - -#: common/models.py:2061 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:2069 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:2070 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:2076 -msgid "Enable URL integration" -msgstr "" - -#: common/models.py:2077 -msgid "Enable plugins to add URL routes" -msgstr "" - -#: common/models.py:2083 -msgid "Enable navigation integration" -msgstr "" - -#: common/models.py:2084 -msgid "Enable plugins to integrate into navigation" -msgstr "" - -#: common/models.py:2090 -msgid "Enable app integration" -msgstr "" - -#: common/models.py:2091 -msgid "Enable plugins to add apps" -msgstr "" - -#: common/models.py:2097 -msgid "Enable schedule integration" -msgstr "" - -#: common/models.py:2098 -msgid "Enable plugins to run scheduled tasks" -msgstr "" - -#: common/models.py:2104 -msgid "Enable event integration" -msgstr "" - -#: common/models.py:2105 -msgid "Enable plugins to respond to internal events" -msgstr "" - -#: common/models.py:2111 -msgid "Enable project codes" -msgstr "" - -#: common/models.py:2112 -msgid "Enable project codes for tracking projects" -msgstr "" - -#: common/models.py:2117 -msgid "Stocktake Functionality" -msgstr "" - -#: common/models.py:2119 -msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "" - -#: common/models.py:2125 -msgid "Exclude External Locations" -msgstr "" - -#: common/models.py:2127 -msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" - -#: common/models.py:2133 -msgid "Automatic Stocktake Period" -msgstr "" - -#: common/models.py:2135 -msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "" - -#: common/models.py:2141 -msgid "Report Deletion Interval" -msgstr "" - -#: common/models.py:2143 -msgid "Stocktake reports will be deleted after specified number of days" -msgstr "" - -#: common/models.py:2150 -msgid "Display Users full names" -msgstr "" - -#: common/models.py:2151 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/models.py:2156 -msgid "Enable Test Station Data" -msgstr "" - -#: common/models.py:2157 -msgid "Enable test station data collection for test results" -msgstr "" - -#: common/models.py:2169 common/models.py:2549 -msgid "Settings key (must be unique - case insensitive" -msgstr "" - -#: common/models.py:2212 -msgid "Hide inactive parts" -msgstr "" - -#: common/models.py:2214 -msgid "Hide inactive parts in results displayed on the homepage" -msgstr "" - -#: common/models.py:2220 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:2221 -msgid "Show subscribed parts on the homepage" -msgstr "" - -#: common/models.py:2226 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:2227 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:2232 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:2233 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:2238 -msgid "Show invalid BOMs" -msgstr "" - -#: common/models.py:2239 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:2244 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:2245 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:2250 -msgid "Show low stock" -msgstr "" - -#: common/models.py:2251 -msgid "Show low stock items on the homepage" -msgstr "" - -#: common/models.py:2256 -msgid "Show depleted stock" -msgstr "" - -#: common/models.py:2257 -msgid "Show depleted stock items on the homepage" -msgstr "" - -#: common/models.py:2262 -msgid "Show needed stock" -msgstr "" - -#: common/models.py:2263 -msgid "Show stock items needed for builds on the homepage" -msgstr "" - -#: common/models.py:2268 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:2269 -msgid "Show expired stock items on the homepage" -msgstr "" - -#: common/models.py:2274 -msgid "Show stale stock" -msgstr "" - -#: common/models.py:2275 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:2280 -msgid "Show pending builds" -msgstr "" - -#: common/models.py:2281 -msgid "Show pending builds on the homepage" -msgstr "" - -#: common/models.py:2286 -msgid "Show overdue builds" -msgstr "" - -#: common/models.py:2287 -msgid "Show overdue builds on the homepage" -msgstr "" - -#: common/models.py:2292 -msgid "Show outstanding POs" -msgstr "" - -#: common/models.py:2293 -msgid "Show outstanding POs on the homepage" -msgstr "" - -#: common/models.py:2298 -msgid "Show overdue POs" -msgstr "" - -#: common/models.py:2299 -msgid "Show overdue POs on the homepage" -msgstr "" - -#: common/models.py:2304 -msgid "Show outstanding SOs" -msgstr "" - -#: common/models.py:2305 -msgid "Show outstanding SOs on the homepage" -msgstr "" - -#: common/models.py:2310 -msgid "Show overdue SOs" -msgstr "" - -#: common/models.py:2311 -msgid "Show overdue SOs on the homepage" -msgstr "" - -#: common/models.py:2316 -msgid "Show pending SO shipments" -msgstr "" - -#: common/models.py:2317 -msgid "Show pending SO shipments on the homepage" -msgstr "" - -#: common/models.py:2322 -msgid "Show News" -msgstr "" - -#: common/models.py:2323 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:2328 -msgid "Inline label display" -msgstr "" - -#: common/models.py:2330 -msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2336 -msgid "Default label printer" -msgstr "" - -#: common/models.py:2338 -msgid "Configure which label printer should be selected by default" -msgstr "" - -#: common/models.py:2344 -msgid "Inline report display" -msgstr "" - -#: common/models.py:2346 -msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" - -#: common/models.py:2352 -msgid "Search Parts" -msgstr "" - -#: common/models.py:2353 -msgid "Display parts in search preview window" -msgstr "" - -#: common/models.py:2358 -msgid "Search Supplier Parts" -msgstr "" - -#: common/models.py:2359 -msgid "Display supplier parts in search preview window" -msgstr "" - -#: common/models.py:2364 -msgid "Search Manufacturer Parts" -msgstr "" - -#: common/models.py:2365 -msgid "Display manufacturer parts in search preview window" -msgstr "" - -#: common/models.py:2370 -msgid "Hide Inactive Parts" -msgstr "" - -#: common/models.py:2371 -msgid "Excluded inactive parts from search preview window" -msgstr "" - -#: common/models.py:2376 -msgid "Search Categories" -msgstr "" - -#: common/models.py:2377 -msgid "Display part categories in search preview window" -msgstr "" - -#: common/models.py:2382 -msgid "Search Stock" -msgstr "" - -#: common/models.py:2383 -msgid "Display stock items in search preview window" -msgstr "" - -#: common/models.py:2388 -msgid "Hide Unavailable Stock Items" -msgstr "" - -#: common/models.py:2390 -msgid "Exclude stock items which are not available from the search preview window" -msgstr "" - -#: common/models.py:2396 -msgid "Search Locations" -msgstr "" - -#: common/models.py:2397 -msgid "Display stock locations in search preview window" -msgstr "" - -#: common/models.py:2402 -msgid "Search Companies" -msgstr "" - -#: common/models.py:2403 -msgid "Display companies in search preview window" -msgstr "" - -#: common/models.py:2408 -msgid "Search Build Orders" -msgstr "" - -#: common/models.py:2409 -msgid "Display build orders in search preview window" -msgstr "" - -#: common/models.py:2414 -msgid "Search Purchase Orders" -msgstr "" - -#: common/models.py:2415 -msgid "Display purchase orders in search preview window" -msgstr "" - -#: common/models.py:2420 -msgid "Exclude Inactive Purchase Orders" -msgstr "" - -#: common/models.py:2422 -msgid "Exclude inactive purchase orders from search preview window" -msgstr "" - -#: common/models.py:2428 -msgid "Search Sales Orders" -msgstr "" - -#: common/models.py:2429 -msgid "Display sales orders in search preview window" -msgstr "" - -#: common/models.py:2434 -msgid "Exclude Inactive Sales Orders" -msgstr "" - -#: common/models.py:2436 -msgid "Exclude inactive sales orders from search preview window" -msgstr "" - -#: common/models.py:2442 -msgid "Search Return Orders" -msgstr "" - -#: common/models.py:2443 -msgid "Display return orders in search preview window" -msgstr "" - -#: common/models.py:2448 -msgid "Exclude Inactive Return Orders" -msgstr "" - -#: common/models.py:2450 -msgid "Exclude inactive return orders from search preview window" -msgstr "" - -#: common/models.py:2456 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:2458 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:2464 -msgid "Regex Search" -msgstr "" - -#: common/models.py:2465 -msgid "Enable regular expressions in search queries" -msgstr "" - -#: common/models.py:2470 -msgid "Whole Word Search" -msgstr "" - -#: common/models.py:2471 -msgid "Search queries return results for whole word matches" -msgstr "" - -#: common/models.py:2476 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:2477 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:2482 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:2483 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:2488 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:2489 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:2494 -msgid "Date Format" -msgstr "" - -#: common/models.py:2495 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:2508 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:2509 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:2514 part/templates/part/detail.html:62 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:2516 -msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "" - -#: common/models.py:2522 -msgid "Table String Length" -msgstr "" - -#: common/models.py:2524 -msgid "Maximum length limit for strings displayed in table views" -msgstr "" - -#: common/models.py:2530 -msgid "Receive error reports" -msgstr "" - -#: common/models.py:2531 -msgid "Receive notifications for system errors" -msgstr "" - -#: common/models.py:2536 -msgid "Last used printing machines" -msgstr "" - -#: common/models.py:2537 -msgid "Save the last used printing machines for a user" -msgstr "" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 -msgid "Price break quantity" -msgstr "" - -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 -#: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 -msgid "Price" -msgstr "" - -#: common/models.py:2588 -msgid "Unit price at specified quantity" -msgstr "" - -#: common/models.py:2692 common/models.py:2877 -msgid "Endpoint" -msgstr "" - -#: common/models.py:2693 -msgid "Endpoint at which this webhook is received" -msgstr "" - -#: common/models.py:2703 -msgid "Name for this webhook" -msgstr "" - -#: common/models.py:2707 -msgid "Is this webhook active" -msgstr "" - -#: common/models.py:2723 users/models.py:159 -msgid "Token" -msgstr "" - -#: common/models.py:2724 -msgid "Token for access" -msgstr "" - -#: common/models.py:2732 -msgid "Secret" -msgstr "" - -#: common/models.py:2733 -msgid "Shared secret for HMAC" -msgstr "" - -#: common/models.py:2841 -msgid "Message ID" -msgstr "" - -#: common/models.py:2842 -msgid "Unique identifier for this message" -msgstr "" - -#: common/models.py:2850 -msgid "Host" -msgstr "" - -#: common/models.py:2851 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:2859 -msgid "Header" -msgstr "" - -#: common/models.py:2860 -msgid "Header of this message" -msgstr "" - -#: common/models.py:2867 -msgid "Body" -msgstr "" - -#: common/models.py:2868 -msgid "Body of this message" -msgstr "" - -#: common/models.py:2878 -msgid "Endpoint on which this message was received" -msgstr "" - -#: common/models.py:2883 -msgid "Worked on" -msgstr "" - -#: common/models.py:2884 -msgid "Was the work on this message finished?" -msgstr "" - -#: common/models.py:3010 -msgid "Id" -msgstr "" - -#: common/models.py:3012 templates/js/translated/company.js:965 -#: templates/js/translated/news.js:44 -msgid "Title" -msgstr "" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 -msgid "Published" -msgstr "" - -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 -#: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 -msgid "Author" -msgstr "" - -#: common/models.py:3020 templates/js/translated/news.js:52 -msgid "Summary" -msgstr "" - -#: common/models.py:3023 -msgid "Read" -msgstr "" - -#: common/models.py:3023 -msgid "Was this news item read?" -msgstr "" - -#: common/models.py:3040 company/models.py:159 part/models.py:1067 -#: report/templates/report/inventree_bill_of_materials_report.html:126 -#: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report.html:35 -#: stock/templates/stock/item_base.html:133 templates/503.html:31 -#: templates/hover_image.html:7 templates/hover_image.html:9 -#: templates/modals.html:6 -msgid "Image" -msgstr "" - -#: common/models.py:3040 -msgid "Image file" -msgstr "" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 -msgid "Unit name must be a valid identifier" -msgstr "" - -#: common/models.py:3133 -msgid "Unit name" -msgstr "" - -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 -msgid "Symbol" -msgstr "" - -#: common/models.py:3141 -msgid "Optional unit symbol" -msgstr "" - -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 -msgid "Definition" -msgstr "" - -#: common/models.py:3148 -msgid "Unit definition" -msgstr "" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - -#: common/notifications.py:314 -#, python-brace-format -msgid "New {verbose_name}" -msgstr "" - -#: common/notifications.py:316 -msgid "A new order has been created and assigned to you" -msgstr "" - -#: common/notifications.py:322 -#, python-brace-format -msgid "{verbose_name} canceled" -msgstr "" - -#: common/notifications.py:324 -msgid "A order that is assigned to you was canceled" -msgstr "" - -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 -msgid "Items Received" -msgstr "" - -#: common/notifications.py:332 -msgid "Items have been received against a purchase order" -msgstr "" - -#: common/notifications.py:339 -msgid "Items have been received against a return order" -msgstr "" - -#: common/notifications.py:457 -msgid "Error raised by plugin" -msgstr "" - -#: common/serializers.py:375 -msgid "Is Running" -msgstr "" - -#: common/serializers.py:381 -msgid "Pending Tasks" -msgstr "" - -#: common/serializers.py:387 -msgid "Scheduled Tasks" -msgstr "" - -#: common/serializers.py:393 -msgid "Failed Tasks" -msgstr "" - -#: common/serializers.py:408 -msgid "Task ID" -msgstr "" - -#: common/serializers.py:408 -msgid "Unique task ID" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock" -msgstr "" - -#: common/serializers.py:410 -msgid "Lock time" -msgstr "" - -#: common/serializers.py:412 -msgid "Task name" -msgstr "" - -#: common/serializers.py:414 -msgid "Function" -msgstr "" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:118 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 -#: templates/patterns/wizard/upload.html:37 -msgid "Upload File" -msgstr "" - -#: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:119 -#: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 -#: templates/patterns/wizard/match_fields.html:51 -msgid "Match Fields" -msgstr "" - -#: common/views.py:84 -msgid "Match Items" -msgstr "" - -#: common/views.py:401 -msgid "Fields matching failed" -msgstr "" - -#: common/views.py:464 -msgid "Parts imported" -msgstr "" - -#: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 -#: order/templates/order/order_wizard/match_parts.html:19 -#: order/templates/order/order_wizard/po_upload.html:49 -#: part/templates/part/import_wizard/match_fields.html:27 -#: part/templates/part/import_wizard/match_references.html:19 -#: part/templates/part/import_wizard/part_upload.html:56 -#: templates/patterns/wizard/match_fields.html:26 -#: templates/patterns/wizard/upload.html:35 -msgid "Previous Step" -msgstr "" - -#: company/api.py:141 -msgid "Part is Active" -msgstr "" - -#: company/api.py:145 -msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:278 -msgid "Supplier Part is Active" -msgstr "" - -#: company/api.py:282 -msgid "Internal Part is Active" -msgstr "" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 -msgid "Company description" -msgstr "" - -#: company/models.py:118 -msgid "Description of the company" -msgstr "" - -#: company/models.py:123 company/templates/company/company_base.html:106 -#: templates/InvenTree/settings/plugin_settings.html:54 -#: templates/js/translated/company.js:532 -msgid "Website" -msgstr "" - -#: company/models.py:123 -msgid "Company website URL" -msgstr "" - -#: company/models.py:128 -msgid "Phone number" -msgstr "" - -#: company/models.py:130 -msgid "Contact phone number" -msgstr "" - -#: company/models.py:137 -msgid "Contact email address" -msgstr "" - -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 -msgid "Contact" -msgstr "" - -#: company/models.py:144 -msgid "Point of contact" -msgstr "" - -#: company/models.py:150 -msgid "Link to external company information" -msgstr "" - -#: company/models.py:163 -msgid "Is this company active?" -msgstr "" - -#: company/models.py:168 -msgid "Is customer" -msgstr "" - -#: company/models.py:169 -msgid "Do you sell items to this company?" -msgstr "" - -#: company/models.py:174 -msgid "Is supplier" -msgstr "" - -#: company/models.py:175 -msgid "Do you purchase items from this company?" -msgstr "" - -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" - -#: company/models.py:181 -msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:189 -msgid "Default currency used for this company" -msgstr "" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "" - -#: company/models.py:372 -msgid "Select company" -msgstr "" - -#: company/models.py:377 -msgid "Address title" -msgstr "" - -#: company/models.py:378 -msgid "Title describing the address entry" -msgstr "" - -#: company/models.py:384 -msgid "Primary address" -msgstr "" - -#: company/models.py:385 -msgid "Set as primary address" -msgstr "" - -#: company/models.py:390 templates/js/translated/company.js:914 -#: templates/js/translated/company.js:971 -msgid "Line 1" -msgstr "" - -#: company/models.py:391 -msgid "Address line 1" -msgstr "" - -#: company/models.py:397 templates/js/translated/company.js:915 -#: templates/js/translated/company.js:977 -msgid "Line 2" -msgstr "" - -#: company/models.py:398 -msgid "Address line 2" -msgstr "" - -#: company/models.py:404 company/models.py:405 -#: templates/js/translated/company.js:983 -msgid "Postal code" -msgstr "" - -#: company/models.py:411 -msgid "City/Region" -msgstr "" - -#: company/models.py:412 -msgid "Postal code city/region" -msgstr "" - -#: company/models.py:418 -msgid "State/Province" -msgstr "" - -#: company/models.py:419 -msgid "State or province" -msgstr "" - -#: company/models.py:425 templates/js/translated/company.js:1001 -msgid "Country" -msgstr "" - -#: company/models.py:426 -msgid "Address country" -msgstr "" - -#: company/models.py:432 -msgid "Courier shipping notes" -msgstr "" - -#: company/models.py:433 -msgid "Notes for shipping courier" -msgstr "" - -#: company/models.py:439 -msgid "Internal shipping notes" -msgstr "" - -#: company/models.py:440 -msgid "Shipping notes for internal use" -msgstr "" - -#: company/models.py:447 -msgid "Link to address information (external)" -msgstr "" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 -#: templates/js/translated/bom.js:622 -msgid "Base Part" -msgstr "" - -#: company/models.py:489 company/models.py:781 -msgid "Select part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 -#: stock/templates/stock/item_base.html:207 -#: templates/js/translated/company.js:507 -#: templates/js/translated/company.js:1118 -#: templates/js/translated/company.js:1296 -#: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:499 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 -#: templates/js/translated/company.js:1117 -#: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 -msgid "MPN" -msgstr "" - -#: company/models.py:513 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:522 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" - -#: company/models.py:594 -msgid "Parameter name" -msgstr "" - -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 -msgid "Value" -msgstr "" - -#: company/models.py:601 -msgid "Parameter value" -msgstr "" - -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 -msgid "Units" -msgstr "" - -#: company/models.py:609 -msgid "Parameter units" -msgstr "" - -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 -msgid "Pack units must be compatible with the base part units" -msgstr "" - -#: company/models.py:726 -msgid "Pack units must be greater than zero" -msgstr "" - -#: company/models.py:740 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 -#: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 -#: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:350 -#: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 -#: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 -msgid "Supplier" -msgstr "" - -#: company/models.py:790 -msgid "Select supplier" -msgstr "" - -#: company/models.py:796 part/serializers.py:549 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:802 -msgid "Is this supplier part active?" -msgstr "" - -#: company/models.py:812 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:819 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:828 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 -msgid "Note" -msgstr "" - -#: company/models.py:844 part/models.py:2117 -msgid "base cost" -msgstr "" - -#: company/models.py:845 part/models.py:2118 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:853 -msgid "Part packaging" -msgstr "" - -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:311 -#: templates/js/translated/purchase_order.js:841 -#: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:860 -msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" - -#: company/models.py:879 part/models.py:2124 -msgid "multiple" -msgstr "" - -#: company/models.py:880 -msgid "Order multiple" -msgstr "" - -#: company/models.py:892 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:898 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:899 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 -#: part/templates/part/part_base.html:197 -#: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 -msgid "In Stock" -msgstr "" - -#: company/templates/company/company_base.html:16 -#: part/templates/part/part_base.html:146 -#: templates/js/translated/company.js:1287 -#: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 -msgid "Inactive" -msgstr "" - -#: company/templates/company/company_base.html:27 -#: templates/js/translated/purchase_order.js:242 -msgid "Create Purchase Order" -msgstr "" - -#: company/templates/company/company_base.html:33 -msgid "Company actions" -msgstr "" - -#: company/templates/company/company_base.html:38 -msgid "Edit company information" -msgstr "" - -#: company/templates/company/company_base.html:39 -#: templates/js/translated/company.js:445 -msgid "Edit Company" -msgstr "" - -#: company/templates/company/company_base.html:43 -msgid "Delete company" -msgstr "" - -#: company/templates/company/company_base.html:44 -#: company/templates/company/company_base.html:168 -msgid "Delete Company" -msgstr "" - -#: company/templates/company/company_base.html:53 -#: company/templates/company/manufacturer_part.html:51 -#: company/templates/company/supplier_part.html:83 -#: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 -msgid "Part image" -msgstr "" - -#: company/templates/company/company_base.html:61 -#: part/templates/part/part_thumb.html:12 -msgid "Upload new image" -msgstr "" - -#: company/templates/company/company_base.html:64 -#: part/templates/part/part_thumb.html:14 -msgid "Download image from URL" -msgstr "" - -#: company/templates/company/company_base.html:66 -#: part/templates/part/part_thumb.html:16 -msgid "Delete image" -msgstr "" - -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 -#: stock/templates/stock/item_base.html:405 -#: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 -msgid "Customer" -msgstr "" - -#: company/templates/company/company_base.html:117 -msgid "Uses default currency" -msgstr "" - -#: company/templates/company/company_base.html:131 -msgid "Phone" -msgstr "" - -#: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 -msgid "Remove Image" -msgstr "" - -#: company/templates/company/company_base.html:212 -msgid "Remove associated image from this company" -msgstr "" - -#: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 -#: templates/InvenTree/settings/user.html:88 -#: templates/InvenTree/settings/user_sso.html:43 -msgid "Remove" -msgstr "" - -#: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 -msgid "Upload Image" -msgstr "" - -#: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 -msgid "Download Image" -msgstr "" - -#: company/templates/company/detail.html:15 -#: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 -msgid "Supplier Parts" -msgstr "" - -#: company/templates/company/detail.html:19 -msgid "Create new supplier part" -msgstr "" - -#: company/templates/company/detail.html:20 -#: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 -msgid "New Supplier Part" -msgstr "" - -#: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:151 -msgid "Manufacturer Parts" -msgstr "" - -#: company/templates/company/detail.html:45 -msgid "Create new manufacturer part" -msgstr "" - -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 -msgid "New Manufacturer Part" -msgstr "" - -#: company/templates/company/detail.html:65 -msgid "Supplier Stock" -msgstr "" - -#: company/templates/company/detail.html:75 -#: company/templates/company/sidebar.html:12 -#: company/templates/company/supplier_part_sidebar.html:7 -#: order/templates/order/order_base.html:13 -#: order/templates/order/purchase_orders.html:8 -#: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 -#: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 -#: templates/InvenTree/settings/sidebar.html:57 -#: templates/js/translated/search.js:205 templates/navbar.html:50 -#: users/models.py:208 -msgid "Purchase Orders" -msgstr "" - -#: company/templates/company/detail.html:79 -#: order/templates/order/purchase_orders.html:17 -msgid "Create new purchase order" -msgstr "" - -#: company/templates/company/detail.html:80 -#: order/templates/order/purchase_orders.html:18 -msgid "New Purchase Order" -msgstr "" - -#: company/templates/company/detail.html:101 -#: company/templates/company/sidebar.html:21 -#: order/templates/order/sales_order_base.html:13 -#: order/templates/order/sales_orders.html:8 -#: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 -#: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 -#: templates/InvenTree/settings/sidebar.html:59 -#: templates/js/translated/search.js:219 templates/navbar.html:62 -#: users/models.py:209 -msgid "Sales Orders" -msgstr "" - -#: company/templates/company/detail.html:105 -#: order/templates/order/sales_orders.html:20 -msgid "Create new sales order" -msgstr "" - -#: company/templates/company/detail.html:106 -#: order/templates/order/sales_orders.html:21 -msgid "New Sales Order" -msgstr "" - -#: company/templates/company/detail.html:126 -msgid "Assigned Stock" -msgstr "" - -#: company/templates/company/detail.html:142 -#: company/templates/company/sidebar.html:29 -#: order/templates/order/return_order_base.html:13 -#: order/templates/order/return_orders.html:8 -#: order/templates/order/return_orders.html:15 -#: templates/InvenTree/settings/sidebar.html:61 -#: templates/js/translated/search.js:232 templates/navbar.html:65 -#: users/models.py:210 -msgid "Return Orders" -msgstr "" - -#: company/templates/company/detail.html:146 -#: order/templates/order/return_orders.html:20 -msgid "Create new return order" -msgstr "" - -#: company/templates/company/detail.html:147 -#: order/templates/order/return_orders.html:21 -msgid "New Return Order" -msgstr "" - -#: company/templates/company/detail.html:168 -msgid "Company Notes" -msgstr "" - -#: company/templates/company/detail.html:183 -msgid "Company Contacts" -msgstr "" - -#: company/templates/company/detail.html:187 -#: company/templates/company/detail.html:188 -msgid "Add Contact" -msgstr "" - -#: company/templates/company/detail.html:206 -msgid "Company addresses" -msgstr "" - -#: company/templates/company/detail.html:210 -#: company/templates/company/detail.html:211 -msgid "Add Address" -msgstr "" - -#: company/templates/company/manufacturer_part.html:15 company/views.py:37 -#: templates/InvenTree/search.html:180 templates/navbar.html:49 -msgid "Manufacturers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 -msgid "Order part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:1343 -msgid "Edit manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:1344 -msgid "Delete manufacturer part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 -msgid "Internal Part" -msgstr "" - -#: company/templates/company/manufacturer_part.html:95 -msgid "No manufacturer information available" -msgstr "" - -#: company/templates/company/manufacturer_part.html:119 -#: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 -#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 -#: templates/navbar.html:48 -msgid "Suppliers" -msgstr "" - -#: company/templates/company/manufacturer_part.html:156 -#: company/templates/company/manufacturer_part_sidebar.html:5 -#: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 -msgid "Parameters" -msgstr "" - -#: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 -#: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part_parameters.html:24 -msgid "New Parameter" -msgstr "" - -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 -msgid "Add Parameter" -msgstr "" - -#: company/templates/company/sidebar.html:6 -msgid "Manufactured Parts" -msgstr "" - -#: company/templates/company/sidebar.html:10 -msgid "Supplied Parts" -msgstr "" - -#: company/templates/company/sidebar.html:16 -msgid "Supplied Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:25 -msgid "Assigned Stock Items" -msgstr "" - -#: company/templates/company/sidebar.html:33 -msgid "Contacts" -msgstr "" - -#: company/templates/company/supplier_part.html:50 -#: templates/js/translated/company.js:1526 -msgid "Supplier part actions" -msgstr "" - -#: company/templates/company/supplier_part.html:55 -#: company/templates/company/supplier_part.html:56 -#: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 -msgid "Order Part" -msgstr "" - -#: company/templates/company/supplier_part.html:60 -#: company/templates/company/supplier_part.html:61 -msgid "Update Availability" -msgstr "" - -#: company/templates/company/supplier_part.html:63 -#: company/templates/company/supplier_part.html:64 -#: templates/js/translated/company.js:294 -msgid "Edit Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:68 -#: company/templates/company/supplier_part.html:69 -#: templates/js/translated/company.js:269 -msgid "Duplicate Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:73 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:74 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:133 -msgid "No supplier information available" -msgstr "" - -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 -#: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 -msgid "SKU" -msgstr "" - -#: company/templates/company/supplier_part.html:206 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 -msgid "Create new stock item" -msgstr "" - -#: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 -msgid "New Stock Item" -msgstr "" - -#: company/templates/company/supplier_part.html:223 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/supplier_part.html:246 -msgid "Pricing Information" -msgstr "" - -#: company/templates/company/supplier_part.html:251 -#: templates/js/translated/company.js:398 -#: templates/js/translated/pricing.js:684 -msgid "Add Price Break" -msgstr "" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 -msgid "Supplier Part QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:316 -msgid "Link Barcode to Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:388 -msgid "Update Part Availability" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 -#: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 -#: users/models.py:206 -msgid "Stock Items" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/views.py:32 -msgid "New Supplier" -msgstr "" - -#: company/views.py:38 -msgid "New Manufacturer" -msgstr "" - -#: company/views.py:43 templates/InvenTree/search.html:210 -#: templates/navbar.html:60 -msgid "Customers" -msgstr "" - -#: company/views.py:44 -msgid "New Customer" -msgstr "" - -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" - -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" - -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" - -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" - -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" - -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" - -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" - -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" - -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" - -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" - -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" - -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" - -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" - -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" - -#: machine/machine_types/label_printer.py:215 -msgid "Copies" -msgstr "" - -#: machine/machine_types/label_printer.py:216 -msgid "Number of copies to print for each label" -msgstr "" - -#: machine/machine_types/label_printer.py:231 -msgid "Connected" -msgstr "" - -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 -msgid "Unknown" -msgstr "" - -#: machine/machine_types/label_printer.py:233 -msgid "Printing" -msgstr "" - -#: machine/machine_types/label_printer.py:234 -msgid "No media" -msgstr "" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 -msgid "Disconnected" -msgstr "" - -#: machine/machine_types/label_printer.py:243 -msgid "Label Printer" -msgstr "" - -#: machine/machine_types/label_printer.py:244 -msgid "Directly print labels for various items." -msgstr "" - -#: machine/machine_types/label_printer.py:250 -msgid "Printer Location" -msgstr "" - -#: machine/machine_types/label_printer.py:251 -msgid "Scope the printer to a specific location" -msgstr "" - -#: machine/models.py:25 -msgid "Name of machine" -msgstr "" - -#: machine/models.py:29 -msgid "Machine Type" -msgstr "" - -#: machine/models.py:29 -msgid "Type of machine" -msgstr "" - -#: machine/models.py:34 machine/models.py:146 -msgid "Driver" -msgstr "" - -#: machine/models.py:35 -msgid "Driver used for the machine" -msgstr "" - -#: machine/models.py:39 -msgid "Machines can be disabled" -msgstr "" - -#: machine/models.py:95 -msgid "Driver available" -msgstr "" - -#: machine/models.py:100 -msgid "No errors" -msgstr "" - -#: machine/models.py:105 -msgid "Initialized" -msgstr "" - -#: machine/models.py:117 -msgid "Machine status" -msgstr "" - -#: machine/models.py:145 -msgid "Machine" -msgstr "" - -#: machine/models.py:151 -msgid "Machine Config" -msgstr "" - -#: machine/models.py:156 -msgid "Config type" -msgstr "" - -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" -msgstr "" - -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" -msgstr "" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 -msgid "Has Pricing" -msgstr "" - -#: order/api.py:230 -msgid "No matching purchase order found" -msgstr "" - -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 -msgid "Order" -msgstr "" - -#: order/api.py:429 order/api.py:784 -msgid "Order Complete" -msgstr "" - -#: order/api.py:452 -msgid "Order Pending" -msgstr "" - -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 -#: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 -#: templates/js/translated/purchase_order.js:168 -#: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 -msgid "Purchase Order" -msgstr "" - -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 -#: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 -msgid "Return Order" -msgstr "" - -#: order/models.py:90 -msgid "Total price for this order" -msgstr "" - -#: order/models.py:95 order/serializers.py:71 -msgid "Order Currency" -msgstr "" - -#: order/models.py:98 order/serializers.py:72 -msgid "Currency for this order (leave blank to use company default)" -msgstr "" - -#: order/models.py:246 -msgid "Contact does not match selected company" -msgstr "" - -#: order/models.py:289 -msgid "Order description (optional)" -msgstr "" - -#: order/models.py:298 -msgid "Select project code for this order" -msgstr "" - -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -msgid "Link to external page" -msgstr "" - -#: order/models.py:310 -msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" - -#: order/models.py:324 -msgid "Created By" -msgstr "" - -#: order/models.py:332 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:343 -msgid "Point of contact for this order" -msgstr "" - -#: order/models.py:353 -msgid "Company address for this order" -msgstr "" - -#: order/models.py:468 order/models.py:979 -msgid "Order reference" -msgstr "" - -#: order/models.py:477 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:492 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:504 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:513 -msgid "received by" -msgstr "" - -#: order/models.py:519 order/models.py:2173 -msgid "Issue Date" -msgstr "" - -#: order/models.py:520 order/models.py:2174 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:527 order/models.py:2181 -msgid "Date order was completed" -msgstr "" - -#: order/models.py:571 -msgid "Part supplier must match PO supplier" -msgstr "" - -#: order/models.py:806 -msgid "Quantity must be a positive number" -msgstr "" - -#: order/models.py:991 -msgid "Company to which the items are being sold" -msgstr "" - -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 -msgid "Customer Reference " -msgstr "" - -#: order/models.py:1015 order/models.py:2167 -msgid "Customer order reference code" -msgstr "" - -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 -msgid "Shipment Date" -msgstr "" - -#: order/models.py:1028 -msgid "shipped by" -msgstr "" - -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" - -#: order/models.py:1084 -msgid "Only an open order can be marked as complete" -msgstr "" - -#: order/models.py:1088 -msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" - -#: order/models.py:1093 -msgid "Order cannot be completed as there are incomplete line items" -msgstr "" - -#: order/models.py:1357 -msgid "Item quantity" -msgstr "" - -#: order/models.py:1374 -msgid "Line item reference" -msgstr "" - -#: order/models.py:1381 -msgid "Line item notes" -msgstr "" - -#: order/models.py:1393 -msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" - -#: order/models.py:1414 -msgid "Line item description (optional)" -msgstr "" - -#: order/models.py:1420 -msgid "Context" -msgstr "" - -#: order/models.py:1421 -msgid "Additional context for this line" -msgstr "" - -#: order/models.py:1431 -msgid "Unit price" -msgstr "" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 -msgid "Supplier part must match supplier" -msgstr "" - -#: order/models.py:1476 -msgid "deleted" -msgstr "" - -#: order/models.py:1504 -msgid "Supplier part" -msgstr "" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 -msgid "Received" -msgstr "" - -#: order/models.py:1512 -msgid "Number of items received" -msgstr "" - -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 -#: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 -msgid "Purchase Price" -msgstr "" - -#: order/models.py:1521 -msgid "Unit purchase price" -msgstr "" - -#: order/models.py:1536 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 -msgid "Virtual part cannot be assigned to a sales order" -msgstr "" - -#: order/models.py:1642 -msgid "Only salable parts can be assigned to a sales order" -msgstr "" - -#: order/models.py:1668 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 -msgid "Sale Price" -msgstr "" - -#: order/models.py:1669 -msgid "Unit sale price" -msgstr "" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 -msgid "Shipped quantity" -msgstr "" - -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 -msgid "Date of shipment" -msgstr "" - -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 -msgid "Delivery Date" -msgstr "" - -#: order/models.py:1779 -msgid "Date of delivery of shipment" -msgstr "" - -#: order/models.py:1787 -msgid "Checked By" -msgstr "" - -#: order/models.py:1788 -msgid "User who checked this shipment" -msgstr "" - -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 -msgid "Shipment" -msgstr "" - -#: order/models.py:1796 -msgid "Shipment number" -msgstr "" - -#: order/models.py:1804 -msgid "Tracking Number" -msgstr "" - -#: order/models.py:1805 -msgid "Shipment tracking information" -msgstr "" - -#: order/models.py:1812 -msgid "Invoice Number" -msgstr "" - -#: order/models.py:1813 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1833 -msgid "Shipment has already been sent" -msgstr "" - -#: order/models.py:1836 -msgid "Shipment has no allocated stock items" -msgstr "" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 -msgid "Stock item has not been assigned" -msgstr "" - -#: order/models.py:1973 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:1976 -msgid "Cannot allocate stock to a line without a part" -msgstr "" - -#: order/models.py:1979 -msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" - -#: order/models.py:1998 order/serializers.py:1345 -msgid "Quantity must be 1 for serialized stock item" -msgstr "" - -#: order/models.py:2001 -msgid "Sales order does not match shipment" -msgstr "" - -#: order/models.py:2002 plugin/base/barcodes/api.py:524 -msgid "Shipment does not match sales order" -msgstr "" - -#: order/models.py:2010 -msgid "Line" -msgstr "" - -#: order/models.py:2019 -msgid "Sales order shipment reference" -msgstr "" - -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 -msgid "Item" -msgstr "" - -#: order/models.py:2033 -msgid "Select stock item to allocate" -msgstr "" - -#: order/models.py:2042 -msgid "Enter stock allocation quantity" -msgstr "" - -#: order/models.py:2136 -msgid "Return Order reference" -msgstr "" - -#: order/models.py:2148 -msgid "Company from which items are being returned" -msgstr "" - -#: order/models.py:2160 -msgid "Return order status" -msgstr "" - -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 -msgid "Only serialized items can be assigned to a Return Order" -msgstr "" - -#: order/models.py:2392 -msgid "Select item to return from customer" -msgstr "" - -#: order/models.py:2398 -msgid "Received Date" -msgstr "" - -#: order/models.py:2399 -msgid "The date this this return item was received" -msgstr "" - -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 -msgid "Outcome" -msgstr "" - -#: order/models.py:2411 -msgid "Outcome for this line item" -msgstr "" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "" - -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 -msgid "Order cannot be cancelled" -msgstr "" - -#: order/serializers.py:346 order/serializers.py:1366 -msgid "Allow order to be closed with incomplete line items" -msgstr "" - -#: order/serializers.py:356 order/serializers.py:1376 -msgid "Order has incomplete line items" -msgstr "" - -#: order/serializers.py:506 -msgid "Order is not open" -msgstr "" - -#: order/serializers.py:527 -msgid "Auto Pricing" -msgstr "" - -#: order/serializers.py:529 -msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" - -#: order/serializers.py:539 -msgid "Purchase price currency" -msgstr "" - -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 -msgid "Supplier part must be specified" -msgstr "" - -#: order/serializers.py:587 -msgid "Purchase order must be specified" -msgstr "" - -#: order/serializers.py:595 -msgid "Supplier must match purchase order" -msgstr "" - -#: order/serializers.py:596 -msgid "Purchase order must match supplier" -msgstr "" - -#: order/serializers.py:639 order/serializers.py:1446 -msgid "Line Item" -msgstr "" - -#: order/serializers.py:645 -msgid "Line item does not match purchase order" -msgstr "" - -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 -msgid "Select destination location for received items" -msgstr "" - -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 -msgid "Enter batch code for incoming stock items" -msgstr "" - -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 -msgid "Enter serial numbers for incoming stock items" -msgstr "" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 -msgid "Barcode" -msgstr "" - -#: order/serializers.py:707 -msgid "Scanned barcode" -msgstr "" - -#: order/serializers.py:723 -msgid "Barcode is already in use" -msgstr "" - -#: order/serializers.py:747 -msgid "An integer quantity must be provided for trackable parts" -msgstr "" - -#: order/serializers.py:795 order/serializers.py:1798 -msgid "Line items must be provided" -msgstr "" - -#: order/serializers.py:811 -msgid "Destination location must be specified" -msgstr "" - -#: order/serializers.py:822 -msgid "Supplied barcode values must be unique" -msgstr "" - -#: order/serializers.py:1187 -msgid "Sale price currency" -msgstr "" - -#: order/serializers.py:1248 -msgid "No shipment details provided" -msgstr "" - -#: order/serializers.py:1309 order/serializers.py:1455 -msgid "Line item is not associated with this order" -msgstr "" - -#: order/serializers.py:1328 -msgid "Quantity must be positive" -msgstr "" - -#: order/serializers.py:1465 -msgid "Enter serial numbers to allocate" -msgstr "" - -#: order/serializers.py:1487 order/serializers.py:1593 -msgid "Shipment has already been shipped" -msgstr "" - -#: order/serializers.py:1490 order/serializers.py:1596 -msgid "Shipment is not associated with this order" -msgstr "" - -#: order/serializers.py:1537 -msgid "No match found for the following serial numbers" -msgstr "" - -#: order/serializers.py:1544 -msgid "The following serial numbers are already allocated" -msgstr "" - -#: order/serializers.py:1752 -msgid "Return order line item" -msgstr "" - -#: order/serializers.py:1758 -msgid "Line item does not match return order" -msgstr "" - -#: order/serializers.py:1761 -msgid "Line item has already been received" -msgstr "" - -#: order/serializers.py:1790 -msgid "Items can only be received against orders which are in progress" -msgstr "" - -#: order/serializers.py:1873 -msgid "Line price currency" -msgstr "" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - -#: order/tasks.py:25 -msgid "Overdue Purchase Order" -msgstr "" - -#: order/tasks.py:30 -#, python-brace-format -msgid "Purchase order {po} is now overdue" -msgstr "" - -#: order/tasks.py:75 -msgid "Overdue Sales Order" -msgstr "" - -#: order/tasks.py:80 -#, python-brace-format -msgid "Sales order {so} is now overdue" -msgstr "" - -#: order/templates/order/order_base.html:51 -msgid "Print purchase order report" -msgstr "" - -#: order/templates/order/order_base.html:53 -#: order/templates/order/return_order_base.html:62 -#: order/templates/order/sales_order_base.html:62 -msgid "Export order to file" -msgstr "" - -#: order/templates/order/order_base.html:59 -#: order/templates/order/return_order_base.html:72 -#: order/templates/order/sales_order_base.html:71 -msgid "Order actions" -msgstr "" - -#: order/templates/order/order_base.html:64 -#: order/templates/order/return_order_base.html:76 -#: order/templates/order/sales_order_base.html:75 -msgid "Edit order" -msgstr "" - -#: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 -#: order/templates/order/return_order_base.html:78 -#: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" -msgstr "" - -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 -msgid "Issue Order" -msgstr "" - -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 -msgid "Mark order as complete" -msgstr "" - -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 -msgid "Complete Order" -msgstr "" - -#: order/templates/order/order_base.html:96 -msgid "Supplier part thumbnail" -msgstr "" - -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 -msgid "Order Description" -msgstr "" - -#: order/templates/order/order_base.html:146 -msgid "No suppplier information available" -msgstr "" - -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 -msgid "Completed Line Items" -msgstr "" - -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 -msgid "Incomplete" -msgstr "" - -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 -msgid "Issued" -msgstr "" - -#: order/templates/order/order_base.html:229 -msgid "Total cost" -msgstr "" - -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 -msgid "Total cost could not be calculated" -msgstr "" - -#: order/templates/order/order_base.html:335 -msgid "Purchase Order QR Code" -msgstr "" - -#: order/templates/order/order_base.html:347 -msgid "Link Barcode to Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:9 -#: part/templates/part/import_wizard/ajax_match_fields.html:9 -#: part/templates/part/import_wizard/match_fields.html:9 -#: templates/patterns/wizard/match_fields.html:8 -msgid "Missing selections for the following required columns" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:20 -#: part/templates/part/import_wizard/ajax_match_fields.html:20 -#: part/templates/part/import_wizard/match_fields.html:20 -#: templates/patterns/wizard/match_fields.html:19 -msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:29 -#: order/templates/order/order_wizard/match_parts.html:21 -#: part/templates/part/import_wizard/match_fields.html:29 -#: part/templates/part/import_wizard/match_references.html:21 -#: templates/patterns/wizard/match_fields.html:28 -msgid "Submit Selections" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:35 -#: part/templates/part/import_wizard/ajax_match_fields.html:28 -#: part/templates/part/import_wizard/match_fields.html:35 -#: templates/patterns/wizard/match_fields.html:34 -msgid "File Fields" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:42 -#: part/templates/part/import_wizard/ajax_match_fields.html:35 -#: part/templates/part/import_wizard/match_fields.html:42 -#: templates/patterns/wizard/match_fields.html:41 -msgid "Remove column" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:60 -#: part/templates/part/import_wizard/ajax_match_fields.html:53 -#: part/templates/part/import_wizard/match_fields.html:60 -#: templates/patterns/wizard/match_fields.html:59 -msgid "Duplicate selection" -msgstr "" - -#: order/templates/order/order_wizard/match_fields.html:71 -#: order/templates/order/order_wizard/match_parts.html:52 -#: part/templates/part/import_wizard/ajax_match_fields.html:64 -#: part/templates/part/import_wizard/ajax_match_references.html:42 -#: part/templates/part/import_wizard/match_fields.html:71 -#: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 -#: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 -#: templates/patterns/wizard/match_fields.html:70 -msgid "Remove row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:12 -#: part/templates/part/import_wizard/ajax_match_references.html:12 -#: part/templates/part/import_wizard/match_references.html:12 -msgid "Errors exist in the submitted data" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:28 -#: part/templates/part/import_wizard/ajax_match_references.html:21 -#: part/templates/part/import_wizard/match_references.html:28 -msgid "Row" -msgstr "" - -#: order/templates/order/order_wizard/match_parts.html:29 -msgid "Select Supplier Part" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:8 -msgid "Return to Orders" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:13 -msgid "Upload File for Purchase Order" -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:14 -msgid "Order is already processed. Files cannot be uploaded." -msgstr "" - -#: order/templates/order/order_wizard/po_upload.html:27 -#: part/templates/part/import_wizard/ajax_part_upload.html:10 -#: part/templates/part/import_wizard/part_upload.html:26 -#: templates/patterns/wizard/upload.html:13 -#, python-format -msgid "Step %(step)s of %(count)s" -msgstr "" - -#: order/templates/order/po_sidebar.html:7 -msgid "Received Stock" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:18 -msgid "Purchase Order Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:27 -#: order/templates/order/return_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 -#: templates/js/translated/sales_order.js:237 -msgid "Add Line Item" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:31 -#: order/templates/order/purchase_order_detail.html:32 -#: order/templates/order/return_order_detail.html:28 -#: order/templates/order/return_order_detail.html:29 -msgid "Receive Line Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/return_order_detail.html:45 -#: order/templates/order/sales_order_detail.html:41 -msgid "Extra Lines" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/return_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:47 -msgid "Add Extra Line" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:74 -msgid "Received Items" -msgstr "" - -#: order/templates/order/purchase_order_detail.html:99 -#: order/templates/order/return_order_detail.html:85 -#: order/templates/order/sales_order_detail.html:139 -msgid "Order Notes" -msgstr "" - -#: order/templates/order/return_order_base.html:18 -#: order/templates/order/sales_order_base.html:18 -msgid "Customer logo thumbnail" -msgstr "" - -#: order/templates/order/return_order_base.html:60 -msgid "Print return order report" -msgstr "" - -#: order/templates/order/return_order_base.html:64 -#: order/templates/order/sales_order_base.html:64 -msgid "Print packing list" -msgstr "" - -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 -msgid "Customer Reference" -msgstr "" - -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 -msgid "Total Cost" -msgstr "" - -#: order/templates/order/return_order_base.html:273 -msgid "Return Order QR Code" -msgstr "" - -#: order/templates/order/return_order_base.html:285 -msgid "Link Barcode to Return Order" -msgstr "" - -#: order/templates/order/return_order_sidebar.html:5 -msgid "Order Details" -msgstr "" - -#: order/templates/order/sales_order_base.html:60 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 -msgid "Ship Items" -msgstr "" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:138 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:176 -#: order/templates/order/sales_order_detail.html:99 -#: order/templates/order/so_sidebar.html:11 -msgid "Completed Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:339 -msgid "Sales Order QR Code" -msgstr "" - -#: order/templates/order/sales_order_base.html:351 -msgid "Link Barcode to Sales Order" -msgstr "" - -#: order/templates/order/sales_order_detail.html:18 -msgid "Sales Order Items" -msgstr "" - -#: order/templates/order/sales_order_detail.html:67 -#: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 -msgid "Pending Shipments" -msgstr "" - -#: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 -msgid "Actions" -msgstr "" - -#: order/templates/order/sales_order_detail.html:80 -msgid "New Shipment" -msgstr "" - -#: order/views.py:120 -msgid "Match Supplier Parts" -msgstr "" - -#: order/views.py:406 -msgid "Sales order not found" -msgstr "" - -#: order/views.py:412 -msgid "Price not found" -msgstr "" - -#: order/views.py:415 -#, python-brace-format -msgid "Updated {part} unit-price to {price}" -msgstr "" - -#: order/views.py:421 -#, python-brace-format -msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "" - -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 -msgid "IPN" -msgstr "" - -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 -msgid "Revision" -msgstr "" - -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 -msgid "Keywords" -msgstr "" - -#: part/admin.py:60 -msgid "Part Image" -msgstr "" - -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 -msgid "Category ID" -msgstr "" - -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 -msgid "Category Name" -msgstr "" - -#: part/admin.py:71 part/admin.py:316 -msgid "Default Location ID" -msgstr "" - -#: part/admin.py:76 -msgid "Default Supplier ID" -msgstr "" - -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 -msgid "Variant Of" -msgstr "" - -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 -msgid "Minimum Stock" -msgstr "" - -#: part/admin.py:138 part/templates/part/part_sidebar.html:27 -msgid "Used In" -msgstr "" - -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 -msgid "Building" -msgstr "" - -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 -msgid "Minimum Cost" -msgstr "" - -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 -msgid "Maximum Cost" -msgstr "" - -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 -msgid "Parent ID" -msgstr "" - -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 -msgid "Parent Name" -msgstr "" - -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 -msgid "Category Path" -msgstr "" - -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 -#: part/templates/part/category_sidebar.html:9 -#: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 -#: templates/navbar.html:24 users/models.py:203 -msgid "Parts" -msgstr "" - -#: part/admin.py:378 -msgid "BOM Level" -msgstr "" - -#: part/admin.py:381 -msgid "BOM Item ID" -msgstr "" - -#: part/admin.py:391 -msgid "Parent IPN" -msgstr "" - -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" - -#: part/admin.py:418 part/serializers.py:1346 -#: templates/js/translated/pricing.js:358 -#: templates/js/translated/pricing.js:1024 -msgid "Minimum Price" -msgstr "" - -#: part/admin.py:423 part/serializers.py:1361 -#: templates/js/translated/pricing.js:353 -#: templates/js/translated/pricing.js:1032 -msgid "Maximum Price" -msgstr "" - -#: part/api.py:104 -msgid "Starred" -msgstr "" - -#: part/api.py:106 -msgid "Filter by starred categories" -msgstr "" - -#: part/api.py:123 stock/api.py:310 -msgid "Depth" -msgstr "" - -#: part/api.py:123 -msgid "Filter by category depth" -msgstr "" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:158 -msgid "Include sub-categories in filtered results" -msgstr "" - -#: part/api.py:179 templates/js/translated/part.js:311 -msgid "Parent" -msgstr "" - -#: part/api.py:181 -msgid "Filter by parent category" -msgstr "" - -#: part/api.py:214 -msgid "Exclude Tree" -msgstr "" - -#: part/api.py:216 -msgid "Exclude sub-categories under the specified category" -msgstr "" - -#: part/api.py:441 -msgid "Has Results" -msgstr "" - -#: part/api.py:608 -msgid "Incoming Purchase Order" -msgstr "" - -#: part/api.py:626 -msgid "Outgoing Sales Order" -msgstr "" - -#: part/api.py:642 -msgid "Stock produced by Build Order" -msgstr "" - -#: part/api.py:726 -msgid "Stock required for Build Order" -msgstr "" - -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 -#: templates/InvenTree/settings/settings_staff_js.html:300 -#: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 -msgid "Category" -msgstr "" - -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 -msgid "Uses" -msgstr "" - -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 -msgid "Default Location" -msgstr "" - -#: part/bom.py:179 part/serializers.py:905 -#: templates/email/low_stock_notification.html:16 -msgid "Total Stock" -msgstr "" - -#: part/forms.py:49 -msgid "Input quantity for price calculation" -msgstr "" - -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 -#: part/templates/part/part_app_base.html:10 -msgid "Part Category" -msgstr "" - -#: part/models.py:89 part/templates/part/category.html:133 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 -#: users/models.py:202 -msgid "Part Categories" -msgstr "" - -#: part/models.py:108 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 -msgid "Structural" -msgstr "" - -#: part/models.py:115 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:124 -msgid "Default keywords" -msgstr "" - -#: part/models.py:125 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 -msgid "Icon" -msgstr "" - -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:178 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 -msgid "Invalid choice for parent part" -msgstr "" - -#: part/models.py:613 part/models.py:620 -#, python-brace-format -msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" - -#: part/models.py:632 -#, python-brace-format -msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" - -#: part/models.py:695 -#, python-brace-format -msgid "IPN must match regex pattern {pattern}" -msgstr "" - -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 -msgid "Stock item with this serial number already exists" -msgstr "" - -#: part/models.py:917 -msgid "Duplicate IPN not allowed in part settings" -msgstr "" - -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 -msgid "Part with this Name, IPN and Revision already exists." -msgstr "" - -#: part/models.py:951 -msgid "Parts cannot be assigned to structural part categories!" -msgstr "" - -#: part/models.py:983 part/models.py:4102 -msgid "Part name" -msgstr "" - -#: part/models.py:988 -msgid "Is Template" -msgstr "" - -#: part/models.py:989 -msgid "Is this part a template part?" -msgstr "" - -#: part/models.py:999 -msgid "Is this part a variant of another part?" -msgstr "" - -#: part/models.py:1007 -msgid "Part description (optional)" -msgstr "" - -#: part/models.py:1015 -msgid "Part keywords to improve visibility in search results" -msgstr "" - -#: part/models.py:1025 -msgid "Part category" -msgstr "" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 -msgid "Where is this item normally stored?" -msgstr "" - -#: part/models.py:1121 part/templates/part/part_base.html:385 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1122 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1129 -msgid "Default Expiry" -msgstr "" - -#: part/models.py:1130 -msgid "Expiry time (in days) for stock items of this part" -msgstr "" - -#: part/models.py:1139 -msgid "Minimum allowed stock level" -msgstr "" - -#: part/models.py:1148 -msgid "Units of measure for this part" -msgstr "" - -#: part/models.py:1155 -msgid "Can this part be built from other parts?" -msgstr "" - -#: part/models.py:1161 -msgid "Can this part be used to build other parts?" -msgstr "" - -#: part/models.py:1167 -msgid "Does this part have tracking for unique items?" -msgstr "" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 -msgid "Can this part be purchased from external suppliers?" -msgstr "" - -#: part/models.py:1185 -msgid "Can this part be sold to customers?" -msgstr "" - -#: part/models.py:1189 -msgid "Is this part active?" -msgstr "" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 -msgid "Is this a virtual part, such as a software product or license?" -msgstr "" - -#: part/models.py:1207 -msgid "BOM checksum" -msgstr "" - -#: part/models.py:1208 -msgid "Stored BOM checksum" -msgstr "" - -#: part/models.py:1216 -msgid "BOM checked by" -msgstr "" - -#: part/models.py:1221 -msgid "BOM checked date" -msgstr "" - -#: part/models.py:1237 -msgid "Creation User" -msgstr "" - -#: part/models.py:1247 -msgid "Owner responsible for this part" -msgstr "" - -#: part/models.py:1252 part/templates/part/part_base.html:348 -#: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 -msgid "Last Stocktake" -msgstr "" - -#: part/models.py:2125 -msgid "Sell multiple" -msgstr "" - -#: part/models.py:3116 -msgid "Currency used to cache pricing calculations" -msgstr "" - -#: part/models.py:3132 -msgid "Minimum BOM Cost" -msgstr "" - -#: part/models.py:3133 -msgid "Minimum cost of component parts" -msgstr "" - -#: part/models.py:3139 -msgid "Maximum BOM Cost" -msgstr "" - -#: part/models.py:3140 -msgid "Maximum cost of component parts" -msgstr "" - -#: part/models.py:3146 -msgid "Minimum Purchase Cost" -msgstr "" - -#: part/models.py:3147 -msgid "Minimum historical purchase cost" -msgstr "" - -#: part/models.py:3153 -msgid "Maximum Purchase Cost" -msgstr "" - -#: part/models.py:3154 -msgid "Maximum historical purchase cost" -msgstr "" - -#: part/models.py:3160 -msgid "Minimum Internal Price" -msgstr "" - -#: part/models.py:3161 -msgid "Minimum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3167 -msgid "Maximum Internal Price" -msgstr "" - -#: part/models.py:3168 -msgid "Maximum cost based on internal price breaks" -msgstr "" - -#: part/models.py:3174 -msgid "Minimum Supplier Price" -msgstr "" - -#: part/models.py:3175 -msgid "Minimum price of part from external suppliers" -msgstr "" - -#: part/models.py:3181 -msgid "Maximum Supplier Price" -msgstr "" - -#: part/models.py:3182 -msgid "Maximum price of part from external suppliers" -msgstr "" - -#: part/models.py:3188 -msgid "Minimum Variant Cost" -msgstr "" - -#: part/models.py:3189 -msgid "Calculated minimum cost of variant parts" -msgstr "" - -#: part/models.py:3195 -msgid "Maximum Variant Cost" -msgstr "" - -#: part/models.py:3196 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:3203 -msgid "Override minimum cost" -msgstr "" - -#: part/models.py:3210 -msgid "Override maximum cost" -msgstr "" - -#: part/models.py:3217 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:3224 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:3230 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:3231 -msgid "Minimum sale price based on price breaks" -msgstr "" - -#: part/models.py:3237 -msgid "Maximum Sale Price" -msgstr "" - -#: part/models.py:3238 -msgid "Maximum sale price based on price breaks" -msgstr "" - -#: part/models.py:3244 -msgid "Minimum Sale Cost" -msgstr "" - -#: part/models.py:3245 -msgid "Minimum historical sale price" -msgstr "" - -#: part/models.py:3251 -msgid "Maximum Sale Cost" -msgstr "" - -#: part/models.py:3252 -msgid "Maximum historical sale price" -msgstr "" - -#: part/models.py:3271 -msgid "Part for stocktake" -msgstr "" - -#: part/models.py:3276 -msgid "Item Count" -msgstr "" - -#: part/models.py:3277 -msgid "Number of individual stock entries at time of stocktake" -msgstr "" - -#: part/models.py:3285 -msgid "Total available stock at time of stocktake" -msgstr "" - -#: part/models.py:3289 part/models.py:3372 -#: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 -#: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 -#: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 -msgid "Date" -msgstr "" - -#: part/models.py:3290 -msgid "Date stocktake was performed" -msgstr "" - -#: part/models.py:3298 -msgid "Additional notes" -msgstr "" - -#: part/models.py:3308 -msgid "User who performed this stocktake" -msgstr "" - -#: part/models.py:3314 -msgid "Minimum Stock Cost" -msgstr "" - -#: part/models.py:3315 -msgid "Estimated minimum cost of stock on hand" -msgstr "" - -#: part/models.py:3321 -msgid "Maximum Stock Cost" -msgstr "" - -#: part/models.py:3322 -msgid "Estimated maximum cost of stock on hand" -msgstr "" - -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 -msgid "Report" -msgstr "" - -#: part/models.py:3379 -msgid "Stocktake report file (generated internally)" -msgstr "" - -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 -msgid "Part Count" -msgstr "" - -#: part/models.py:3385 -msgid "Number of parts covered by stocktake" -msgstr "" - -#: part/models.py:3395 -msgid "User who requested this stocktake report" -msgstr "" - -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 -msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 -msgid "Test templates can only be created for trackable parts" -msgstr "" - -#: part/models.py:3586 -msgid "Test template with the same key already exists for part" -msgstr "" - -#: part/models.py:3603 templates/js/translated/part.js:2898 -msgid "Test Name" -msgstr "" - -#: part/models.py:3604 -msgid "Enter a name for the test" -msgstr "" - -#: part/models.py:3610 -msgid "Test Key" -msgstr "" - -#: part/models.py:3611 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3618 -msgid "Test Description" -msgstr "" - -#: part/models.py:3619 -msgid "Enter description for this test" -msgstr "" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 -msgid "Required" -msgstr "" - -#: part/models.py:3629 -msgid "Is this test required to pass?" -msgstr "" - -#: part/models.py:3634 templates/js/translated/part.js:2935 -msgid "Requires Value" -msgstr "" - -#: part/models.py:3635 -msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3640 templates/js/translated/part.js:2942 -msgid "Requires Attachment" -msgstr "" - -#: part/models.py:3642 -msgid "Does this test require a file attachment when adding a test result?" -msgstr "" - -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 -msgid "Checkbox parameters cannot have units" -msgstr "" - -#: part/models.py:3713 -msgid "Checkbox parameters cannot have choices" -msgstr "" - -#: part/models.py:3750 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3765 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3772 -msgid "Physical units for this parameter" -msgstr "" - -#: part/models.py:3780 -msgid "Parameter description" -msgstr "" - -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 -msgid "Checkbox" -msgstr "" - -#: part/models.py:3787 -msgid "Is this parameter a checkbox?" -msgstr "" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 -msgid "Invalid choice for parameter value" -msgstr "" - -#: part/models.py:3938 -msgid "Parent Part" -msgstr "" - -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 -#: templates/InvenTree/settings/settings_staff_js.html:295 -msgid "Parameter Template" -msgstr "" - -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "" - -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 -msgid "Default Value" -msgstr "" - -#: part/models.py:4062 -msgid "Default Parameter Value" -msgstr "" - -#: part/models.py:4100 -msgid "Part ID or part name" -msgstr "" - -#: part/models.py:4101 -msgid "Unique part ID value" -msgstr "" - -#: part/models.py:4103 -msgid "Part IPN value" -msgstr "" - -#: part/models.py:4104 -msgid "Level" -msgstr "" - -#: part/models.py:4104 -msgid "BOM level" -msgstr "" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 -msgid "Select parent part" -msgstr "" - -#: part/models.py:4242 -msgid "Sub part" -msgstr "" - -#: part/models.py:4243 -msgid "Select part to be used in BOM" -msgstr "" - -#: part/models.py:4254 -msgid "BOM quantity for this BOM item" -msgstr "" - -#: part/models.py:4260 -msgid "This BOM item is optional" -msgstr "" - -#: part/models.py:4266 -msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" - -#: part/models.py:4273 part/templates/part/upload_bom.html:55 -msgid "Overage" -msgstr "" - -#: part/models.py:4274 -msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "" - -#: part/models.py:4281 -msgid "BOM item reference" -msgstr "" - -#: part/models.py:4289 -msgid "BOM item notes" -msgstr "" - -#: part/models.py:4295 -msgid "Checksum" -msgstr "" - -#: part/models.py:4296 -msgid "BOM line checksum" -msgstr "" - -#: part/models.py:4301 templates/js/translated/table_filters.js:181 -msgid "Validated" -msgstr "" - -#: part/models.py:4302 -msgid "This BOM item has been validated" -msgstr "" - -#: part/models.py:4307 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 -msgid "Gets inherited" -msgstr "" - -#: part/models.py:4308 -msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" - -#: part/models.py:4314 -msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" - -#: part/models.py:4399 stock/models.py:685 -msgid "Quantity must be integer value for trackable parts" -msgstr "" - -#: part/models.py:4409 part/models.py:4411 -msgid "Sub part must be specified" -msgstr "" - -#: part/models.py:4551 -msgid "BOM Item Substitute" -msgstr "" - -#: part/models.py:4572 -msgid "Substitute part cannot be the same as the master part" -msgstr "" - -#: part/models.py:4585 -msgid "Parent BOM item" -msgstr "" - -#: part/models.py:4593 -msgid "Substitute part" -msgstr "" - -#: part/models.py:4609 -msgid "Part 1" -msgstr "" - -#: part/models.py:4617 -msgid "Part 2" -msgstr "" - -#: part/models.py:4618 -msgid "Select Related Part" -msgstr "" - -#: part/models.py:4637 -msgid "Part relationship cannot be created between a part and itself" -msgstr "" - -#: part/models.py:4642 -msgid "Duplicate relationship already exists" -msgstr "" - -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 -#: part/templates/part/category_sidebar.html:7 -msgid "Subcategories" -msgstr "" - -#: part/serializers.py:197 -msgid "Results" -msgstr "" - -#: part/serializers.py:198 -msgid "Number of results recorded against this template" -msgstr "" - -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 -msgid "Purchase currency of this stock item" -msgstr "" - -#: part/serializers.py:291 -msgid "Number of parts using this template" -msgstr "" - -#: part/serializers.py:421 -msgid "No parts selected" -msgstr "" - -#: part/serializers.py:431 -msgid "Select category" -msgstr "" - -#: part/serializers.py:466 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:467 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:472 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:473 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:479 part/templates/part/detail.html:293 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:480 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:486 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:487 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:493 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:494 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:512 -msgid "Initial Stock Quantity" -msgstr "" - -#: part/serializers.py:514 -msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" - -#: part/serializers.py:521 -msgid "Initial Stock Location" -msgstr "" - -#: part/serializers.py:522 -msgid "Specify initial stock location for this Part" -msgstr "" - -#: part/serializers.py:539 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:555 -msgid "Select manufacturer (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:565 -msgid "Manufacturer part number" -msgstr "" - -#: part/serializers.py:572 -msgid "Selected company is not a valid supplier" -msgstr "" - -#: part/serializers.py:581 -msgid "Selected company is not a valid manufacturer" -msgstr "" - -#: part/serializers.py:592 -msgid "Manufacturer part matching this MPN already exists" -msgstr "" - -#: part/serializers.py:599 -msgid "Supplier part matching this SKU already exists" -msgstr "" - -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" - -#: part/serializers.py:908 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:911 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 -msgid "Duplicate Part" -msgstr "" - -#: part/serializers.py:942 -msgid "Copy initial data from another Part" -msgstr "" - -#: part/serializers.py:948 templates/js/translated/part.js:103 -msgid "Initial Stock" -msgstr "" - -#: part/serializers.py:949 -msgid "Create Part with initial stock quantity" -msgstr "" - -#: part/serializers.py:955 -msgid "Supplier Information" -msgstr "" - -#: part/serializers.py:956 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:964 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:965 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:970 -msgid "Existing Image" -msgstr "" - -#: part/serializers.py:971 -msgid "Filename of an existing part image" -msgstr "" - -#: part/serializers.py:988 -msgid "Image file does not exist" -msgstr "" - -#: part/serializers.py:1194 -msgid "Limit stocktake report to a particular part, and any variant parts" -msgstr "" - -#: part/serializers.py:1204 -msgid "Limit stocktake report to a particular part category, and any child categories" -msgstr "" - -#: part/serializers.py:1214 -msgid "Limit stocktake report to a particular stock location, and any child locations" -msgstr "" - -#: part/serializers.py:1220 -msgid "Exclude External Stock" -msgstr "" - -#: part/serializers.py:1221 -msgid "Exclude stock items in external locations" -msgstr "" - -#: part/serializers.py:1226 -msgid "Generate Report" -msgstr "" - -#: part/serializers.py:1227 -msgid "Generate report file containing calculated stocktake data" -msgstr "" - -#: part/serializers.py:1232 -msgid "Update Parts" -msgstr "" - -#: part/serializers.py:1233 -msgid "Update specified parts with calculated stocktake data" -msgstr "" - -#: part/serializers.py:1241 -msgid "Stocktake functionality is not enabled" -msgstr "" - -#: part/serializers.py:1347 -msgid "Override calculated value for minimum price" -msgstr "" - -#: part/serializers.py:1354 -msgid "Minimum price currency" -msgstr "" - -#: part/serializers.py:1362 -msgid "Override calculated value for maximum price" -msgstr "" - -#: part/serializers.py:1369 -msgid "Maximum price currency" -msgstr "" - -#: part/serializers.py:1398 -msgid "Update" -msgstr "" - -#: part/serializers.py:1399 -msgid "Update pricing for this part" -msgstr "" - -#: part/serializers.py:1422 -#, python-brace-format -msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" - -#: part/serializers.py:1429 -msgid "Minimum price must not be greater than maximum price" -msgstr "" - -#: part/serializers.py:1432 -msgid "Maximum price must not be less than minimum price" -msgstr "" - -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 -msgid "Select part to copy BOM from" -msgstr "" - -#: part/serializers.py:1845 -msgid "Remove Existing Data" -msgstr "" - -#: part/serializers.py:1846 -msgid "Remove existing BOM items before copying" -msgstr "" - -#: part/serializers.py:1851 -msgid "Include Inherited" -msgstr "" - -#: part/serializers.py:1852 -msgid "Include BOM items which are inherited from templated parts" -msgstr "" - -#: part/serializers.py:1857 -msgid "Skip Invalid Rows" -msgstr "" - -#: part/serializers.py:1858 -msgid "Enable this option to skip invalid rows" -msgstr "" - -#: part/serializers.py:1863 -msgid "Copy Substitute Parts" -msgstr "" - -#: part/serializers.py:1864 -msgid "Copy substitute parts when duplicate BOM items" -msgstr "" - -#: part/serializers.py:1901 -msgid "Clear Existing BOM" -msgstr "" - -#: part/serializers.py:1902 -msgid "Delete existing BOM items before uploading" -msgstr "" - -#: part/serializers.py:1934 -msgid "No part column specified" -msgstr "" - -#: part/serializers.py:1978 -msgid "Multiple matching parts found" -msgstr "" - -#: part/serializers.py:1981 -msgid "No matching part found" -msgstr "" - -#: part/serializers.py:1984 -msgid "Part is not designated as a component" -msgstr "" - -#: part/serializers.py:1993 -msgid "Quantity not provided" -msgstr "" - -#: part/serializers.py:2001 -msgid "Invalid quantity" -msgstr "" - -#: part/serializers.py:2024 -msgid "At least one BOM item is required" -msgstr "" - -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 -msgid "Total Quantity" -msgstr "" - -#: part/stocktake.py:225 -msgid "Total Cost Min" -msgstr "" - -#: part/stocktake.py:226 -msgid "Total Cost Max" -msgstr "" - -#: part/stocktake.py:284 -msgid "Stocktake Report Available" -msgstr "" - -#: part/stocktake.py:285 -msgid "A new stocktake report is available for download" -msgstr "" - -#: part/tasks.py:37 -msgid "Low stock notification" -msgstr "" - -#: part/tasks.py:39 -#, python-brace-format -msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" - -#: part/templates/part/bom.html:6 -msgid "You do not have permission to edit the BOM." -msgstr "" - -#: part/templates/part/bom.html:15 -msgid "The BOM this part has been changed, and must be validated" -msgstr "" - -#: part/templates/part/bom.html:17 -#, python-format -msgid "This BOM was last checked by %(checker)s on %(check_date)s" -msgstr "" - -#: part/templates/part/bom.html:21 -msgid "This BOM has not been validated." -msgstr "" - -#: part/templates/part/category.html:32 -msgid "Perform stocktake for this part category" -msgstr "" - -#: part/templates/part/category.html:38 part/templates/part/category.html:42 -msgid "You are subscribed to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:46 -msgid "Subscribe to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:52 -msgid "Category Actions" -msgstr "" - -#: part/templates/part/category.html:57 -msgid "Edit category" -msgstr "" - -#: part/templates/part/category.html:58 -msgid "Edit Category" -msgstr "" - -#: part/templates/part/category.html:62 -msgid "Delete category" -msgstr "" - -#: part/templates/part/category.html:63 -msgid "Delete Category" -msgstr "" - -#: part/templates/part/category.html:99 -msgid "Top level part category" -msgstr "" - -#: part/templates/part/category.html:124 -msgid "Parts (Including subcategories)" -msgstr "" - -#: part/templates/part/category.html:162 -msgid "Create new part" -msgstr "" - -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 -msgid "New Part" -msgstr "" - -#: part/templates/part/category.html:189 -#: templates/InvenTree/settings/part_parameters.html:7 -#: templates/InvenTree/settings/sidebar.html:49 -msgid "Part Parameters" -msgstr "" - -#: part/templates/part/category.html:208 -msgid "Create new part category" -msgstr "" - -#: part/templates/part/category.html:209 -msgid "New Category" -msgstr "" - -#: part/templates/part/category_sidebar.html:13 -msgid "Import Parts" -msgstr "" - -#: part/templates/part/copy_part.html:10 -#, python-format -msgid "Make a copy of part '%(full_name)s'." -msgstr "" - -#: part/templates/part/copy_part.html:14 -#: part/templates/part/create_part.html:11 -msgid "Possible Matching Parts" -msgstr "" - -#: part/templates/part/copy_part.html:15 -#: part/templates/part/create_part.html:12 -msgid "The new part may be a duplicate of these existing parts" -msgstr "" - -#: part/templates/part/create_part.html:17 -#, python-format -msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "" - -#: part/templates/part/detail.html:20 -msgid "Part Stock" -msgstr "" - -#: part/templates/part/detail.html:44 -msgid "Refresh scheduling data" -msgstr "" - -#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:552 -msgid "Refresh" -msgstr "" - -#: part/templates/part/detail.html:66 -msgid "Add stocktake information" -msgstr "" - -#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 -#: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 -msgid "Stocktake" -msgstr "" - -#: part/templates/part/detail.html:83 -msgid "Part Test Templates" -msgstr "" - -#: part/templates/part/detail.html:88 -msgid "Add Test Template" -msgstr "" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 -msgid "Sales Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:172 -msgid "Part Notes" -msgstr "" - -#: part/templates/part/detail.html:187 -msgid "Part Variants" -msgstr "" - -#: part/templates/part/detail.html:191 -msgid "Create new variant" -msgstr "" - -#: part/templates/part/detail.html:192 -msgid "New Variant" -msgstr "" - -#: part/templates/part/detail.html:215 -msgid "Add new parameter" -msgstr "" - -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 -msgid "Related Parts" -msgstr "" - -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 -msgid "Add Related" -msgstr "" - -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 -#: report/templates/report/inventree_bill_of_materials_report.html:100 -msgid "Bill of Materials" -msgstr "" - -#: part/templates/part/detail.html:276 -msgid "Export actions" -msgstr "" - -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 -msgid "Export BOM" -msgstr "" - -#: part/templates/part/detail.html:282 -msgid "Print BOM Report" -msgstr "" - -#: part/templates/part/detail.html:288 -msgid "BOM actions" -msgstr "" - -#: part/templates/part/detail.html:292 -msgid "Upload BOM" -msgstr "" - -#: part/templates/part/detail.html:294 -msgid "Validate BOM" -msgstr "" - -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 -#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 -msgid "Add BOM Item" -msgstr "" - -#: part/templates/part/detail.html:313 -msgid "Assemblies" -msgstr "" - -#: part/templates/part/detail.html:329 -msgid "Part Builds" -msgstr "" - -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 -msgid "Build Order Allocations" -msgstr "" - -#: part/templates/part/detail.html:368 -msgid "Part Suppliers" -msgstr "" - -#: part/templates/part/detail.html:388 -msgid "Part Manufacturers" -msgstr "" - -#: part/templates/part/detail.html:672 -msgid "Related Part" -msgstr "" - -#: part/templates/part/detail.html:680 -msgid "Add Related Part" -msgstr "" - -#: part/templates/part/detail.html:765 -msgid "Add Test Result Template" -msgstr "" - -#: part/templates/part/import_wizard/ajax_part_upload.html:29 -#: part/templates/part/import_wizard/part_upload.html:14 -msgid "Insufficient privileges." -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:8 -msgid "Return to Parts" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:13 -msgid "Import Parts from File" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:31 -msgid "Requirements for part import" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "The part import file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:33 -msgid "Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:89 -msgid "Download Part Import Template" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:92 -#: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 -msgid "Format" -msgstr "" - -#: part/templates/part/import_wizard/part_upload.html:93 -#: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 -msgid "Select file format" -msgstr "" - -#: part/templates/part/part_app_base.html:12 -msgid "Part List" -msgstr "" - -#: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 -msgid "You are subscribed to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:33 -msgid "Subscribe to notifications for this part" -msgstr "" - -#: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 -msgid "Print Label" -msgstr "" - -#: part/templates/part/part_base.html:58 -msgid "Show pricing information" -msgstr "" - -#: part/templates/part/part_base.html:63 -#: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 -msgid "Stock actions" -msgstr "" - -#: part/templates/part/part_base.html:70 -msgid "Count part stock" -msgstr "" - -#: part/templates/part/part_base.html:76 -msgid "Transfer part stock" -msgstr "" - -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 -msgid "Part actions" -msgstr "" - -#: part/templates/part/part_base.html:94 -msgid "Duplicate part" -msgstr "" - -#: part/templates/part/part_base.html:97 -msgid "Edit part" -msgstr "" - -#: part/templates/part/part_base.html:100 -msgid "Delete part" -msgstr "" - -#: part/templates/part/part_base.html:119 -msgid "Part is a template part (variants can be made from this part)" -msgstr "" - -#: part/templates/part/part_base.html:123 -msgid "Part can be assembled from other parts" -msgstr "" - -#: part/templates/part/part_base.html:127 -msgid "Part can be used in assemblies" -msgstr "" - -#: part/templates/part/part_base.html:131 -msgid "Part stock is tracked by serial number" -msgstr "" - -#: part/templates/part/part_base.html:135 -msgid "Part can be purchased from external suppliers" -msgstr "" - -#: part/templates/part/part_base.html:139 -msgid "Part can be sold to customers" -msgstr "" - -#: part/templates/part/part_base.html:145 -msgid "Part is not active" -msgstr "" - -#: part/templates/part/part_base.html:153 -msgid "Part is virtual (not a physical part)" -msgstr "" - -#: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 -msgid "Show Part Details" -msgstr "" - -#: part/templates/part/part_base.html:218 -#: stock/templates/stock/item_base.html:388 -msgid "Allocated to Build Orders" -msgstr "" - -#: part/templates/part/part_base.html:227 -#: stock/templates/stock/item_base.html:381 -msgid "Allocated to Sales Orders" -msgstr "" - -#: part/templates/part/part_base.html:300 -msgid "Minimum stock level" -msgstr "" - -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 -#: templates/js/translated/pricing.js:391 -#: templates/js/translated/pricing.js:1054 -msgid "Price Range" -msgstr "" - -#: part/templates/part/part_base.html:361 -msgid "Latest Serial Number" -msgstr "" - -#: part/templates/part/part_base.html:365 -#: stock/templates/stock/item_base.html:322 -msgid "Search for serial number" -msgstr "" - -#: part/templates/part/part_base.html:453 -msgid "Part QR Code" -msgstr "" - -#: part/templates/part/part_base.html:470 -msgid "Link Barcode to Part" -msgstr "" - -#: part/templates/part/part_base.html:520 -msgid "Calculate" -msgstr "" - -#: part/templates/part/part_base.html:537 -msgid "Remove associated image from this part" -msgstr "" - -#: part/templates/part/part_base.html:588 -msgid "No matching images found" -msgstr "" - -#: part/templates/part/part_base.html:684 -msgid "Hide Part Details" -msgstr "" - -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 -#: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 -msgid "Supplier Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:26 -#: part/templates/part/part_pricing.html:52 -#: part/templates/part/part_pricing.html:95 -#: part/templates/part/part_pricing.html:110 -msgid "Unit Cost" -msgstr "" - -#: part/templates/part/part_pricing.html:40 -msgid "No supplier pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 -#: part/templates/part/prices.html:250 -msgid "BOM Pricing" -msgstr "" - -#: part/templates/part/part_pricing.html:66 -msgid "Unit Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:72 -msgid "Total Purchase Price" -msgstr "" - -#: part/templates/part/part_pricing.html:83 -msgid "No BOM pricing available" -msgstr "" - -#: part/templates/part/part_pricing.html:92 -msgid "Internal Price" -msgstr "" - -#: part/templates/part/part_pricing.html:123 -msgid "No pricing information is available for this part." -msgstr "" - -#: part/templates/part/part_scheduling.html:14 -msgid "Scheduled Quantity" -msgstr "" - -#: part/templates/part/part_sidebar.html:11 -msgid "Variants" -msgstr "" - -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:39 -msgid "Pricing" -msgstr "" - -#: part/templates/part/part_sidebar.html:44 -msgid "Scheduling" -msgstr "" - -#: part/templates/part/part_sidebar.html:54 -msgid "Test Templates" -msgstr "" - -#: part/templates/part/part_thumb.html:11 -msgid "Select from existing images" -msgstr "" - -#: part/templates/part/prices.html:11 -msgid "Pricing Overview" -msgstr "" - -#: part/templates/part/prices.html:14 -msgid "Refresh Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:17 -msgid "Override Part Pricing" -msgstr "" - -#: part/templates/part/prices.html:18 -#: templates/InvenTree/settings/settings_staff_js.html:80 -#: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 -#: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 -msgid "Edit" -msgstr "" - -#: part/templates/part/prices.html:28 stock/admin.py:251 -#: stock/templates/stock/item_base.html:446 -#: templates/js/translated/company.js:1703 -#: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 -msgid "Last Updated" -msgstr "" - -#: part/templates/part/prices.html:37 part/templates/part/prices.html:127 -msgid "Price Category" -msgstr "" - -#: part/templates/part/prices.html:38 part/templates/part/prices.html:128 -msgid "Minimum" -msgstr "" - -#: part/templates/part/prices.html:39 part/templates/part/prices.html:129 -msgid "Maximum" -msgstr "" - -#: part/templates/part/prices.html:51 part/templates/part/prices.html:174 -msgid "Internal Pricing" -msgstr "" - -#: part/templates/part/prices.html:64 part/templates/part/prices.html:206 -msgid "Purchase History" -msgstr "" - -#: part/templates/part/prices.html:98 part/templates/part/prices.html:274 -msgid "Variant Pricing" -msgstr "" - -#: part/templates/part/prices.html:106 -msgid "Pricing Overrides" -msgstr "" - -#: part/templates/part/prices.html:113 -msgid "Overall Pricing" -msgstr "" - -#: part/templates/part/prices.html:149 part/templates/part/prices.html:326 -msgid "Sale History" -msgstr "" - -#: part/templates/part/prices.html:157 -msgid "Sale price data is not available for this part" -msgstr "" - -#: part/templates/part/prices.html:164 -msgid "Price range data is not available for this part." -msgstr "" - -#: part/templates/part/prices.html:175 part/templates/part/prices.html:207 -#: part/templates/part/prices.html:228 part/templates/part/prices.html:251 -#: part/templates/part/prices.html:275 part/templates/part/prices.html:298 -#: part/templates/part/prices.html:327 -msgid "Jump to overview" -msgstr "" - -#: part/templates/part/prices.html:180 -msgid "Add Internal Price Break" -msgstr "" - -#: part/templates/part/prices.html:297 -msgid "Sale Pricing" -msgstr "" - -#: part/templates/part/prices.html:303 -msgid "Add Sell Price Break" -msgstr "" - -#: part/templates/part/pricing_javascript.html:24 -msgid "Update Pricing" -msgstr "" - -#: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 -msgid "No Stock" -msgstr "" - -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 -msgid "Low Stock" -msgstr "" - -#: part/templates/part/upload_bom.html:8 -msgid "Return to BOM" -msgstr "" - -#: part/templates/part/upload_bom.html:13 -msgid "Upload Bill of Materials" -msgstr "" - -#: part/templates/part/upload_bom.html:19 -msgid "BOM upload requirements" -msgstr "" - -#: part/templates/part/upload_bom.html:23 -#: part/templates/part/upload_bom.html:90 -msgid "Upload BOM File" -msgstr "" - -#: part/templates/part/upload_bom.html:29 -msgid "Submit BOM Data" -msgstr "" - -#: part/templates/part/upload_bom.html:37 -msgid "Requirements for BOM upload" -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "The BOM file must contain the required named columns as provided in the " -msgstr "" - -#: part/templates/part/upload_bom.html:39 -msgid "BOM Upload Template" -msgstr "" - -#: part/templates/part/upload_bom.html:40 -msgid "Each part must already exist in the database" -msgstr "" - -#: part/templates/part/variant_part.html:9 -msgid "Create new part variant" -msgstr "" - -#: part/templates/part/variant_part.html:10 -msgid "Create a new variant part from this template" -msgstr "" - -#: part/views.py:111 -msgid "Match References" -msgstr "" - -#: part/views.py:275 -#, python-brace-format -msgid "Can't import part {new_part.name} because there is no category assigned" -msgstr "" - -#: part/views.py:425 -msgid "Select Part Image" -msgstr "" - -#: part/views.py:448 -msgid "Updated part image" -msgstr "" - -#: part/views.py:451 -msgid "Part image not found" -msgstr "" - -#: part/views.py:545 -msgid "Part Pricing" -msgstr "" - -#: plugin/api.py:172 -msgid "Plugin cannot be deleted as it is currently active" -msgstr "" - -#: plugin/base/action/api.py:32 -msgid "No action specified" -msgstr "" - -#: plugin/base/action/api.py:41 -msgid "No matching action found" -msgstr "" - -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 -msgid "No match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:129 -msgid "Match found for barcode data" -msgstr "" - -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 -msgid "Barcode matches existing item" -msgstr "" - -#: plugin/base/barcodes/api.py:336 -msgid "No matching part data found" -msgstr "" - -#: plugin/base/barcodes/api.py:353 -msgid "No matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:357 -msgid "Multiple matching supplier parts found" -msgstr "" - -#: plugin/base/barcodes/api.py:381 -msgid "Matched supplier part" -msgstr "" - -#: plugin/base/barcodes/api.py:430 -msgid "Item has already been received" -msgstr "" - -#: plugin/base/barcodes/api.py:467 -msgid "No match for supplier barcode" -msgstr "" - -#: plugin/base/barcodes/api.py:510 -msgid "Multiple matching line items found" -msgstr "" - -#: plugin/base/barcodes/api.py:513 -msgid "No matching line item found" -msgstr "" - -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 -msgid "Barcode does not match an existing stock item" -msgstr "" - -#: plugin/base/barcodes/api.py:569 -msgid "Stock item does not match line item" -msgstr "" - -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 -msgid "Insufficient stock available" -msgstr "" - -#: plugin/base/barcodes/api.py:602 -msgid "Stock item allocated to sales order" -msgstr "" - -#: plugin/base/barcodes/api.py:606 -msgid "Not enough information" -msgstr "" - -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 -msgid "Found multiple matching supplier parts for barcode" -msgstr "" - -#: plugin/base/barcodes/mixins.py:222 -#, python-brace-format -msgid "Found multiple purchase orders matching '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:226 -#, python-brace-format -msgid "No matching purchase order for '{order}'" -msgstr "" - -#: plugin/base/barcodes/mixins.py:231 -msgid "Purchase order does not match supplier" -msgstr "" - -#: plugin/base/barcodes/mixins.py:465 -msgid "Failed to find pending line item for supplier part" -msgstr "" - -#: plugin/base/barcodes/mixins.py:496 -msgid "Further information required to receive line item" -msgstr "" - -#: plugin/base/barcodes/mixins.py:504 -msgid "Received purchase order line item" -msgstr "" - -#: plugin/base/barcodes/serializers.py:21 -msgid "Scanned barcode data" -msgstr "" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 -msgid "Purchase Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:111 -msgid "Purchase order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:129 -msgid "PurchaseOrder to receive items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:135 -msgid "Purchase order has not been placed" -msgstr "" - -#: plugin/base/barcodes/serializers.py:143 -msgid "Location to receive items into" -msgstr "" - -#: plugin/base/barcodes/serializers.py:149 -msgid "Cannot select a structural location" -msgstr "" - -#: plugin/base/barcodes/serializers.py:163 -msgid "Sales Order to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:169 -msgid "Sales order is not pending" -msgstr "" - -#: plugin/base/barcodes/serializers.py:177 -msgid "Sales order line item to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:184 -msgid "Sales order shipment to allocate items against" -msgstr "" - -#: plugin/base/barcodes/serializers.py:190 -msgid "Shipment has already been delivered" -msgstr "" - -#: plugin/base/barcodes/serializers.py:195 -msgid "Quantity to allocate" -msgstr "" - -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 -msgid "Label printing failed" -msgstr "" - -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:28 -msgid "Provides native support for barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/integration/core_notifications.py:35 -#: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:34 -msgid "InvenTree Notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:36 -msgid "Integrated outgoing notification methods" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:41 -#: plugin/builtin/integration/core_notifications.py:80 -msgid "Enable email notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:42 -#: plugin/builtin/integration/core_notifications.py:81 -msgid "Allow sending of emails for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:47 -msgid "Enable slack notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:49 -msgid "Allow sending of slack channel messages for event notifications" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:55 -msgid "Slack incoming webhook url" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:56 -msgid "URL that is used to send messages to a slack channel" -msgstr "" - -#: plugin/builtin/integration/core_notifications.py:164 -msgid "Open link" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:22 -msgid "InvenTree Currency Exchange" -msgstr "" - -#: plugin/builtin/integration/currency_exchange.py:23 -msgid "Default currency exchange integration" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:19 -msgid "InvenTree PDF label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:20 -msgid "Provides native support for printing PDF labels" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 -msgid "Debug mode" -msgstr "" - -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 -msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:61 -msgid "InvenTree machine label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:62 -msgid "Provides support for printing using a machine" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:149 -msgid "last used" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:166 -msgid "Options" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:29 -msgid "Page size for the label sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:34 -msgid "Skip Labels" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:35 -msgid "Skip this number of labels when printing label sheets" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:41 -msgid "Border" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:42 -msgid "Print a border around each label" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 -msgid "Landscape" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:48 -msgid "Print the label sheet in landscape mode" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:60 -msgid "InvenTree Label Sheet Printer" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:61 -msgid "Arrays multiple labels onto a single sheet" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:106 -msgid "Label is too large for page size" -msgstr "" - -#: plugin/builtin/labels/label_sheet.py:140 -msgid "No labels were generated" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:16 -msgid "Supplier Integration - DigiKey" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:17 -msgid "Provides support for scanning DigiKey barcodes" -msgstr "" - -#: plugin/builtin/suppliers/digikey.py:26 -msgid "The Supplier which acts as 'DigiKey'" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:18 -msgid "Supplier Integration - LCSC" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:19 -msgid "Provides support for scanning LCSC barcodes" -msgstr "" - -#: plugin/builtin/suppliers/lcsc.py:27 -msgid "The Supplier which acts as 'LCSC'" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:16 -msgid "Supplier Integration - Mouser" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:17 -msgid "Provides support for scanning Mouser barcodes" -msgstr "" - -#: plugin/builtin/suppliers/mouser.py:25 -msgid "The Supplier which acts as 'Mouser'" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:18 -msgid "Supplier Integration - TME" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:19 -msgid "Provides support for scanning TME barcodes" -msgstr "" - -#: plugin/builtin/suppliers/tme.py:27 -msgid "The Supplier which acts as 'TME'" -msgstr "" - -#: plugin/installer.py:194 plugin/installer.py:282 -msgid "Only staff users can administer plugins" -msgstr "" - -#: plugin/installer.py:197 -msgid "Plugin installation is disabled" -msgstr "" - -#: plugin/installer.py:248 -msgid "Installed plugin successfully" -msgstr "" - -#: plugin/installer.py:254 -#, python-brace-format -msgid "Installed plugin into {path}" -msgstr "" - -#: plugin/installer.py:273 -msgid "Plugin was not found in registry" -msgstr "" - -#: plugin/installer.py:276 -msgid "Plugin is not a packaged plugin" -msgstr "" - -#: plugin/installer.py:279 -msgid "Plugin package name not found" -msgstr "" - -#: plugin/installer.py:299 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:303 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" - -#: plugin/installer.py:316 -msgid "Uninstalled plugin successfully" -msgstr "" - -#: plugin/models.py:36 -msgid "Plugin Configuration" -msgstr "" - -#: plugin/models.py:37 -msgid "Plugin Configurations" -msgstr "" - -#: plugin/models.py:43 users/models.py:100 -msgid "Key" -msgstr "" - -#: plugin/models.py:44 -msgid "Key of plugin" -msgstr "" - -#: plugin/models.py:52 -msgid "PluginName of the plugin" -msgstr "" - -#: plugin/models.py:59 plugin/serializers.py:90 -msgid "Package Name" -msgstr "" - -#: plugin/models.py:61 -msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" - -#: plugin/models.py:66 -msgid "Is the plugin active" -msgstr "" - -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 -msgid "Installed" -msgstr "" - -#: plugin/models.py:166 -msgid "Sample plugin" -msgstr "" - -#: plugin/models.py:174 -msgid "Builtin Plugin" -msgstr "" - -#: plugin/models.py:182 -msgid "Package Plugin" -msgstr "" - -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 -#: templates/js/translated/plugin.js:51 -msgid "Plugin" -msgstr "" - -#: plugin/models.py:267 -msgid "Method" -msgstr "" - -#: plugin/plugin.py:270 -msgid "No author found" -msgstr "" - -#: plugin/registry.py:534 -#, python-brace-format -msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" - -#: plugin/registry.py:537 -#, python-brace-format -msgid "Plugin requires at least version {v}" -msgstr "" - -#: plugin/registry.py:539 -#, python-brace-format -msgid "Plugin requires at most version {v}" -msgstr "" - -#: plugin/samples/integration/sample.py:52 -msgid "Enable PO" -msgstr "" - -#: plugin/samples/integration/sample.py:53 -msgid "Enable PO functionality in InvenTree interface" -msgstr "" - -#: plugin/samples/integration/sample.py:58 -msgid "API Key" -msgstr "" - -#: plugin/samples/integration/sample.py:59 -msgid "Key required for accessing external API" -msgstr "" - -#: plugin/samples/integration/sample.py:63 -msgid "Numerical" -msgstr "" - -#: plugin/samples/integration/sample.py:64 -msgid "A numerical setting" -msgstr "" - -#: plugin/samples/integration/sample.py:69 -msgid "Choice Setting" -msgstr "" - -#: plugin/samples/integration/sample.py:70 -msgid "A setting with multiple choices" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:15 -msgid "Sample currency exchange plugin" -msgstr "" - -#: plugin/samples/integration/sample_currency_exchange.py:18 -msgid "InvenTree Contributors" -msgstr "" - -#: plugin/serializers.py:81 -msgid "Source URL" -msgstr "" - -#: plugin/serializers.py:83 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" - -#: plugin/serializers.py:92 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" - -#: plugin/serializers.py:99 -#: templates/InvenTree/settings/plugin_settings.html:42 -#: templates/js/translated/plugin.js:86 -msgid "Version" -msgstr "" - -#: plugin/serializers.py:101 -msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" - -#: plugin/serializers.py:106 -msgid "Confirm plugin installation" -msgstr "" - -#: plugin/serializers.py:108 -msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" - -#: plugin/serializers.py:121 -msgid "Installation not confirmed" -msgstr "" - -#: plugin/serializers.py:123 -msgid "Either packagename of URL must be provided" -msgstr "" - -#: plugin/serializers.py:161 -msgid "Full reload" -msgstr "" - -#: plugin/serializers.py:162 -msgid "Perform a full reload of the plugin registry" -msgstr "" - -#: plugin/serializers.py:168 -msgid "Force reload" -msgstr "" - -#: plugin/serializers.py:170 -msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" - -#: plugin/serializers.py:177 -msgid "Collect plugins" -msgstr "" - -#: plugin/serializers.py:178 -msgid "Collect plugins and add them to the registry" -msgstr "" - -#: plugin/serializers.py:205 -msgid "Activate Plugin" -msgstr "" - -#: plugin/serializers.py:206 -msgid "Activate this plugin" -msgstr "" - -#: plugin/serializers.py:226 -msgid "Delete configuration" -msgstr "" - -#: plugin/serializers.py:227 -msgid "Delete the plugin configuration from the database" -msgstr "" - -#: report/api.py:88 -msgid "No valid objects provided to template" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "" - -#: report/helpers.py:43 -msgid "A4" -msgstr "" - -#: report/helpers.py:44 -msgid "A3" -msgstr "" - -#: report/helpers.py:45 -msgid "Legal" -msgstr "" - -#: report/helpers.py:46 -msgid "Letter" -msgstr "" - -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 -msgid "Template name" -msgstr "" - -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "" - -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" - -#: report/models.py:302 -msgid "Page size for PDF reports" -msgstr "" - -#: report/models.py:308 -msgid "Render report in landscape orientation" -msgstr "" - -#: report/models.py:367 -msgid "Width [mm]" -msgstr "" - -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "" - -#: report/models.py:374 -msgid "Height [mm]" -msgstr "" - -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "" - -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" - -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" - -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" - -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" - -#: report/models.py:456 -msgid "Report Template" -msgstr "" - -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" - -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" - -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" - -#: report/models.py:479 -msgid "Label Template" -msgstr "" - -#: report/models.py:502 -msgid "Snippet" -msgstr "" - -#: report/models.py:503 -msgid "Report snippet file" -msgstr "" - -#: report/models.py:510 -msgid "Snippet file description" -msgstr "" - -#: report/models.py:528 -msgid "Asset" -msgstr "" - -#: report/models.py:529 -msgid "Report asset file" -msgstr "" - -#: report/models.py:536 -msgid "Asset file description" -msgstr "" - -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: report/templates/report/inventree_bill_of_materials_report.html:133 -msgid "Materials needed" -msgstr "" - -#: report/templates/report/inventree_build_order_report.html:146 -msgid "Required For" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:15 -msgid "Supplier was deleted" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 -#: templates/js/translated/pricing.js:596 -#: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 -msgid "Unit Price" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 -msgid "Extra Line Items" -msgstr "" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 -msgid "Total" -msgstr "" - -#: report/templates/report/inventree_stock_location_report.html:97 -msgid "Stock location items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:21 -msgid "Stock Item Test Report" -msgstr "" - -#: report/templates/report/inventree_test_report.html:97 -msgid "Test Results" -msgstr "" - -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 -msgid "Test" -msgstr "" - -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 -msgid "Result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:129 -msgid "Pass" -msgstr "" - -#: report/templates/report/inventree_test_report.html:131 -msgid "Fail" -msgstr "" - -#: report/templates/report/inventree_test_report.html:138 -msgid "No result (required)" -msgstr "" - -#: report/templates/report/inventree_test_report.html:140 -msgid "No result" -msgstr "" - -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 -msgid "Installed Items" -msgstr "" - -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 -msgid "Serial" -msgstr "" - -#: report/templatetags/report.py:98 -msgid "Asset file does not exist" -msgstr "" - -#: report/templatetags/report.py:154 report/templatetags/report.py:233 -msgid "Image file not found" -msgstr "" - -#: report/templatetags/report.py:258 -msgid "part_image tag requires a Part instance" -msgstr "" - -#: report/templatetags/report.py:299 -msgid "company_image tag requires a Company instance" -msgstr "" - -#: stock/admin.py:51 stock/admin.py:171 -msgid "Location ID" -msgstr "" - -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 -msgid "Location Path" -msgstr "" - -#: stock/admin.py:148 -msgid "Stock Item ID" -msgstr "" - -#: stock/admin.py:167 -msgid "Status Code" -msgstr "" - -#: stock/admin.py:179 -msgid "Supplier Part ID" -msgstr "" - -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 -msgid "Supplier ID" -msgstr "" - -#: stock/admin.py:200 -msgid "Customer ID" -msgstr "" - -#: stock/admin.py:205 stock/models.py:825 -#: stock/templates/stock/item_base.html:354 -msgid "Installed In" -msgstr "" - -#: stock/admin.py:210 -msgid "Build ID" -msgstr "" - -#: stock/admin.py:220 -msgid "Sales Order ID" -msgstr "" - -#: stock/admin.py:225 -msgid "Purchase Order ID" -msgstr "" - -#: stock/admin.py:240 -msgid "Review Needed" -msgstr "" - -#: stock/admin.py:245 -msgid "Delete on Deplete" -msgstr "" - -#: stock/admin.py:260 stock/models.py:919 -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 -msgid "Expiry Date" -msgstr "" - -#: stock/api.py:310 -msgid "Filter by location depth" -msgstr "" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 -msgid "Include sub-locations in filtered results" -msgstr "" - -#: stock/api.py:367 stock/serializers.py:1186 -msgid "Parent Location" -msgstr "" - -#: stock/api.py:368 -msgid "Filter by parent location" -msgstr "" - -#: stock/api.py:615 templates/js/translated/table_filters.js:434 -msgid "External Location" -msgstr "" - -#: stock/api.py:803 -msgid "Part Tree" -msgstr "" - -#: stock/api.py:833 -msgid "Expiry date before" -msgstr "" - -#: stock/api.py:837 -msgid "Expiry date after" -msgstr "" - -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 -msgid "Stale" -msgstr "" - -#: stock/api.py:927 -msgid "Quantity is required" -msgstr "" - -#: stock/api.py:933 -msgid "Valid part must be supplied" -msgstr "" - -#: stock/api.py:964 -msgid "The given supplier part does not exist" -msgstr "" - -#: stock/api.py:974 -msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" - -#: stock/api.py:1005 -msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" - -#: stock/models.py:64 -msgid "Stock Location type" -msgstr "" - -#: stock/models.py:65 -msgid "Stock Location types" -msgstr "" - -#: stock/models.py:91 -msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" - -#: stock/models.py:131 stock/models.py:807 -#: stock/templates/stock/location.html:17 -#: stock/templates/stock/stock_app_base.html:8 -msgid "Stock Location" -msgstr "" - -#: stock/models.py:132 stock/templates/stock/location.html:183 -#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 -#: users/models.py:205 -msgid "Stock Locations" -msgstr "" - -#: stock/models.py:180 stock/models.py:968 -#: stock/templates/stock/item_base.html:247 -msgid "Owner" -msgstr "" - -#: stock/models.py:181 stock/models.py:969 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:189 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 -msgid "External" -msgstr "" - -#: stock/models.py:197 -msgid "This is an external stock location" -msgstr "" - -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 -msgid "Location type" -msgstr "" - -#: stock/models.py:207 -msgid "Stock location type of this location" -msgstr "" - -#: stock/models.py:279 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:664 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:691 stock/serializers.py:480 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:708 -#, python-brace-format -msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" - -#: stock/models.py:718 stock/models.py:731 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:721 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:743 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:748 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:761 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:777 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:789 -msgid "Base part" -msgstr "" - -#: stock/models.py:799 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:811 -msgid "Where is this stock item located?" -msgstr "" - -#: stock/models.py:819 stock/serializers.py:1580 -msgid "Packaging this stock item is stored in" -msgstr "" - -#: stock/models.py:830 -msgid "Is this item installed in another item?" -msgstr "" - -#: stock/models.py:849 -msgid "Serial number for this item" -msgstr "" - -#: stock/models.py:863 stock/serializers.py:1563 -msgid "Batch code for this stock item" -msgstr "" - -#: stock/models.py:868 -msgid "Stock Quantity" -msgstr "" - -#: stock/models.py:878 -msgid "Source Build" -msgstr "" - -#: stock/models.py:881 -msgid "Build for this stock item" -msgstr "" - -#: stock/models.py:888 stock/templates/stock/item_base.html:363 -msgid "Consumed By" -msgstr "" - -#: stock/models.py:891 -msgid "Build order which consumed this stock item" -msgstr "" - -#: stock/models.py:900 -msgid "Source Purchase Order" -msgstr "" - -#: stock/models.py:904 -msgid "Purchase order for this stock item" -msgstr "" - -#: stock/models.py:910 -msgid "Destination Sales Order" -msgstr "" - -#: stock/models.py:921 -msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" - -#: stock/models.py:939 -msgid "Delete on deplete" -msgstr "" - -#: stock/models.py:940 -msgid "Delete this Stock Item when stock is depleted" -msgstr "" - -#: stock/models.py:960 -msgid "Single unit purchase price at time of purchase" -msgstr "" - -#: stock/models.py:991 -msgid "Converted to part" -msgstr "" - -#: stock/models.py:1511 -msgid "Part is not set as trackable" -msgstr "" - -#: stock/models.py:1517 -msgid "Quantity must be integer" -msgstr "" - -#: stock/models.py:1525 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" - -#: stock/models.py:1531 -msgid "Serial numbers must be a list of integers" -msgstr "" - -#: stock/models.py:1536 -msgid "Quantity does not match serial numbers" -msgstr "" - -#: stock/models.py:1544 stock/serializers.py:726 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/models.py:1641 -msgid "Test template does not exist" -msgstr "" - -#: stock/models.py:1659 -msgid "Stock item has been assigned to a sales order" -msgstr "" - -#: stock/models.py:1663 -msgid "Stock item is installed in another item" -msgstr "" - -#: stock/models.py:1666 -msgid "Stock item contains other items" -msgstr "" - -#: stock/models.py:1669 -msgid "Stock item has been assigned to a customer" -msgstr "" - -#: stock/models.py:1672 -msgid "Stock item is currently in production" -msgstr "" - -#: stock/models.py:1675 -msgid "Serialized stock cannot be merged" -msgstr "" - -#: stock/models.py:1682 stock/serializers.py:1469 -msgid "Duplicate stock items" -msgstr "" - -#: stock/models.py:1686 -msgid "Stock items must refer to the same part" -msgstr "" - -#: stock/models.py:1694 -msgid "Stock items must refer to the same supplier part" -msgstr "" - -#: stock/models.py:1699 -msgid "Stock status codes must match" -msgstr "" - -#: stock/models.py:1960 -msgid "StockItem cannot be moved as it is not in stock" -msgstr "" - -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 -msgid "Entry notes" -msgstr "" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2454 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 -msgid "Test result" -msgstr "" - -#: stock/models.py:2551 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2559 -msgid "Test result attachment" -msgstr "" - -#: stock/models.py:2563 -msgid "Test notes" -msgstr "" - -#: stock/models.py:2571 templates/js/translated/stock.js:1633 -msgid "Test station" -msgstr "" - -#: stock/models.py:2572 -msgid "The identifier of the test station where the test was performed" -msgstr "" - -#: stock/models.py:2578 -msgid "Started" -msgstr "" - -#: stock/models.py:2579 -msgid "The timestamp of the test start" -msgstr "" - -#: stock/models.py:2585 -msgid "Finished" -msgstr "" - -#: stock/models.py:2586 -msgid "The timestamp of the test finish" -msgstr "" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 -msgid "Serial number is too large" -msgstr "" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 -msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" - -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 -msgid "Purchase price of this stock item, per unit or pack" -msgstr "" - -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 -msgid "Enter number of stock items to serialize" -msgstr "" - -#: stock/serializers.py:674 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" - -#: stock/serializers.py:681 -msgid "Enter serial numbers for new items" -msgstr "" - -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 -msgid "Destination stock location" -msgstr "" - -#: stock/serializers.py:699 -msgid "Optional note field" -msgstr "" - -#: stock/serializers.py:709 -msgid "Serial numbers cannot be assigned to this part" -msgstr "" - -#: stock/serializers.py:764 -msgid "Select stock item to install" -msgstr "" - -#: stock/serializers.py:771 -msgid "Quantity to Install" -msgstr "" - -#: stock/serializers.py:772 -msgid "Enter the quantity of items to install" -msgstr "" - -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 -msgid "Add transaction note (optional)" -msgstr "" - -#: stock/serializers.py:785 -msgid "Quantity to install must be at least 1" -msgstr "" - -#: stock/serializers.py:793 -msgid "Stock item is unavailable" -msgstr "" - -#: stock/serializers.py:804 -msgid "Selected part is not in the Bill of Materials" -msgstr "" - -#: stock/serializers.py:817 -msgid "Quantity to install must not exceed available quantity" -msgstr "" - -#: stock/serializers.py:852 -msgid "Destination location for uninstalled item" -msgstr "" - -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 -msgid "Select part to convert stock item into" -msgstr "" - -#: stock/serializers.py:930 -msgid "Selected part is not a valid option for conversion" -msgstr "" - -#: stock/serializers.py:947 -msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" - -#: stock/serializers.py:978 -msgid "Destination location for returned item" -msgstr "" - -#: stock/serializers.py:1015 -msgid "Select stock items to change status" -msgstr "" - -#: stock/serializers.py:1021 -msgid "No stock items selected" -msgstr "" - -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 -#: stock/templates/stock/location_sidebar.html:5 -msgid "Sublocations" -msgstr "" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 -msgid "Part must be salable" -msgstr "" - -#: stock/serializers.py:1302 -msgid "Item is allocated to a sales order" -msgstr "" - -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "" - -#: stock/templates/stock/item.html:17 -msgid "Stock Tracking Information" -msgstr "" - -#: stock/templates/stock/item.html:63 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:72 -msgid "This stock item does not have any child items" -msgstr "" - -#: stock/templates/stock/item.html:81 -#: stock/templates/stock/stock_sidebar.html:12 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 -msgid "Test Report" -msgstr "" - -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 -msgid "Delete Test Data" -msgstr "" - -#: stock/templates/stock/item.html:93 -msgid "Add Test Data" -msgstr "" - -#: stock/templates/stock/item.html:125 -msgid "Stock Item Notes" -msgstr "" - -#: stock/templates/stock/item.html:140 -msgid "Installed Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 -msgid "Install Stock Item" -msgstr "" - -#: stock/templates/stock/item.html:264 -msgid "Delete all test results for this stock item" -msgstr "" - -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 -msgid "Add Test Result" -msgstr "" - -#: stock/templates/stock/item_base.html:33 -msgid "Locate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:51 -msgid "Scan to Location" -msgstr "" - -#: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 -msgid "Printing actions" -msgstr "" - -#: stock/templates/stock/item_base.html:75 -msgid "Stock adjustment actions" -msgstr "" - -#: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 -msgid "Count stock" -msgstr "" - -#: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 -msgid "Add stock" -msgstr "" - -#: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 -msgid "Remove stock" -msgstr "" - -#: stock/templates/stock/item_base.html:85 -msgid "Serialize stock" -msgstr "" - -#: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 -msgid "Transfer stock" -msgstr "" - -#: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 -msgid "Assign to customer" -msgstr "" - -#: stock/templates/stock/item_base.html:94 -msgid "Return to stock" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:97 -msgid "Uninstall" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:101 -msgid "Install" -msgstr "" - -#: stock/templates/stock/item_base.html:115 -msgid "Convert to variant" -msgstr "" - -#: stock/templates/stock/item_base.html:118 -msgid "Duplicate stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:120 -msgid "Edit stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:123 -msgid "Delete stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 -msgid "Build" -msgstr "" - -#: stock/templates/stock/item_base.html:211 -msgid "No manufacturer set" -msgstr "" - -#: stock/templates/stock/item_base.html:251 -msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 -msgid "Read only" -msgstr "" - -#: stock/templates/stock/item_base.html:265 -msgid "This stock item is unavailable" -msgstr "" - -#: stock/templates/stock/item_base.html:271 -msgid "This stock item is in production and cannot be edited." -msgstr "" - -#: stock/templates/stock/item_base.html:272 -msgid "Edit the stock item from the build view." -msgstr "" - -#: stock/templates/stock/item_base.html:287 -msgid "This stock item is allocated to Sales Order" -msgstr "" - -#: stock/templates/stock/item_base.html:295 -msgid "This stock item is allocated to Build Order" -msgstr "" - -#: stock/templates/stock/item_base.html:311 -msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "previous page" -msgstr "" - -#: stock/templates/stock/item_base.html:317 -msgid "Navigate to previous serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "next page" -msgstr "" - -#: stock/templates/stock/item_base.html:326 -msgid "Navigate to next serial number" -msgstr "" - -#: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 -msgid "No location set" -msgstr "" - -#: stock/templates/stock/item_base.html:413 -msgid "Tests" -msgstr "" - -#: stock/templates/stock/item_base.html:419 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:437 -#, python-format -msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:439 -#, python-format -msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "" - -#: stock/templates/stock/item_base.html:455 -msgid "No stocktake performed" -msgstr "" - -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 -msgid "stock item" -msgstr "" - -#: stock/templates/stock/item_base.html:527 -msgid "Edit Stock Status" -msgstr "" - -#: stock/templates/stock/item_base.html:536 -msgid "Stock Item QR Code" -msgstr "" - -#: stock/templates/stock/item_base.html:547 -msgid "Link Barcode to Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:611 -msgid "Select one of the part variants listed below." -msgstr "" - -#: stock/templates/stock/item_base.html:614 -msgid "Warning" -msgstr "" - -#: stock/templates/stock/item_base.html:615 -msgid "This action cannot be easily undone" -msgstr "" - -#: stock/templates/stock/item_base.html:623 -msgid "Convert Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:656 -msgid "Return to Stock" -msgstr "" - -#: stock/templates/stock/item_serialize.html:5 -msgid "Create serialized items from this stock item." -msgstr "" - -#: stock/templates/stock/item_serialize.html:7 -msgid "Select quantity to serialize, and unique serial numbers." -msgstr "" - -#: stock/templates/stock/location.html:35 -msgid "Perform stocktake for this stock location" -msgstr "" - -#: stock/templates/stock/location.html:42 -msgid "Locate stock location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan stock items into this location" -msgstr "" - -#: stock/templates/stock/location.html:60 -msgid "Scan In Stock Items" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:61 -msgid "Scan In Container" -msgstr "" - -#: stock/templates/stock/location.html:72 -msgid "Print Location Report" -msgstr "" - -#: stock/templates/stock/location.html:101 -msgid "Location actions" -msgstr "" - -#: stock/templates/stock/location.html:103 -msgid "Edit location" -msgstr "" - -#: stock/templates/stock/location.html:105 -msgid "Delete location" -msgstr "" - -#: stock/templates/stock/location.html:135 -msgid "Top level stock location" -msgstr "" - -#: stock/templates/stock/location.html:141 -msgid "Location Owner" -msgstr "" - -#: stock/templates/stock/location.html:145 -msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "" - -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 -msgid "Create new stock location" -msgstr "" - -#: stock/templates/stock/location.html:224 -msgid "New Location" -msgstr "" - -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 -msgid "stock location" -msgstr "" - -#: stock/templates/stock/location.html:320 -msgid "Scanned stock container into this location" -msgstr "" - -#: stock/templates/stock/location.html:393 -msgid "Stock Location QR Code" -msgstr "" - -#: stock/templates/stock/location.html:404 -msgid "Link Barcode to Stock Location" -msgstr "" - -#: stock/templates/stock/stock_app_base.html:16 -msgid "Loading..." -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:5 -msgid "Stock Tracking" -msgstr "" - -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Allocations" -msgstr "" - -#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 -msgid "Permission Denied" -msgstr "" - -#: templates/403.html:15 -msgid "You do not have permission to view this page." -msgstr "" - -#: templates/403_csrf.html:11 -msgid "Authentication Failure" -msgstr "" - -#: templates/403_csrf.html:14 -msgid "You have been logged out from InvenTree." -msgstr "" - -#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 -#: templates/navbar.html:150 -msgid "Login" -msgstr "" - -#: templates/404.html:6 templates/404.html:12 -msgid "Page Not Found" -msgstr "" - -#: templates/404.html:15 -msgid "The requested page does not exist" -msgstr "" - -#: templates/500.html:6 templates/500.html:12 -msgid "Internal Server Error" -msgstr "" - -#: templates/500.html:15 -#, python-format -msgid "The %(inventree_title)s server raised an internal error" -msgstr "" - -#: templates/500.html:16 -msgid "Refer to the error log in the admin interface for further details" -msgstr "" - -#: templates/503.html:11 templates/503.html:33 -msgid "Site is in Maintenance" -msgstr "" - -#: templates/503.html:39 -msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" - -#: templates/InvenTree/index.html:7 -msgid "Index" -msgstr "" - -#: templates/InvenTree/index.html:39 -msgid "Subscribed Parts" -msgstr "" - -#: templates/InvenTree/index.html:52 -msgid "Subscribed Categories" -msgstr "" - -#: templates/InvenTree/index.html:62 -msgid "Latest Parts" -msgstr "" - -#: templates/InvenTree/index.html:77 -msgid "BOM Waiting Validation" -msgstr "" - -#: templates/InvenTree/index.html:106 -msgid "Recently Updated" -msgstr "" - -#: templates/InvenTree/index.html:134 -msgid "Depleted Stock" -msgstr "" - -#: templates/InvenTree/index.html:148 -msgid "Required for Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:156 -msgid "Expired Stock" -msgstr "" - -#: templates/InvenTree/index.html:172 -msgid "Stale Stock" -msgstr "" - -#: templates/InvenTree/index.html:199 -msgid "Build Orders In Progress" -msgstr "" - -#: templates/InvenTree/index.html:210 -msgid "Overdue Build Orders" -msgstr "" - -#: templates/InvenTree/index.html:230 -msgid "Outstanding Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:241 -msgid "Overdue Purchase Orders" -msgstr "" - -#: templates/InvenTree/index.html:262 -msgid "Outstanding Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:273 -msgid "Overdue Sales Orders" -msgstr "" - -#: templates/InvenTree/index.html:299 -msgid "InvenTree News" -msgstr "" - -#: templates/InvenTree/index.html:301 -msgid "Current News" -msgstr "" - -#: templates/InvenTree/notifications/history.html:9 -msgid "Notification History" -msgstr "" - -#: templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:75 -msgid "Delete Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:9 -msgid "Pending Notifications" -msgstr "" - -#: templates/InvenTree/notifications/inbox.html:13 -#: templates/InvenTree/notifications/inbox.html:14 -msgid "Mark all as read" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:10 -#: templates/InvenTree/notifications/sidebar.html:5 -#: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:38 -msgid "No unread notifications found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:58 -msgid "No notification history found" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:65 -msgid "Delete all read notifications" -msgstr "" - -#: templates/InvenTree/notifications/notifications.html:89 -#: templates/js/translated/notification.js:85 -msgid "Delete Notification" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:8 -msgid "Inbox" -msgstr "" - -#: templates/InvenTree/notifications/sidebar.html:10 -msgid "History" -msgstr "" - -#: templates/InvenTree/search.html:8 -msgid "Search Results" -msgstr "" - -#: templates/InvenTree/settings/barcode.html:8 -msgid "Barcode Settings" -msgstr "" - -#: templates/InvenTree/settings/build.html:8 -msgid "Build Order Settings" -msgstr "" - -#: templates/InvenTree/settings/category.html:7 -msgid "Category Settings" -msgstr "" - -#: templates/InvenTree/settings/global.html:8 -msgid "Server Settings" -msgstr "" - -#: templates/InvenTree/settings/label.html:8 -#: templates/InvenTree/settings/user_labels.html:9 -msgid "Label Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:8 -msgid "Login Settings" -msgstr "" - -#: templates/InvenTree/settings/login.html:15 -msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "" - -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 -#: templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: templates/InvenTree/settings/login.html:36 -msgid "Single Sign On" -msgstr "" - -#: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:5 -msgid "URLs" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:8 -#, python-format -msgid "The Base-URL for this plugin is %(base)s." -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:14 -msgid "URL" -msgstr "" - -#: templates/InvenTree/settings/mixins/urls.html:23 -msgid "Open in new tab" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:9 -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" - -#: templates/InvenTree/settings/notifications.html:18 -msgid "Slug" -msgstr "" - -#: templates/InvenTree/settings/part.html:7 -msgid "Part Settings" -msgstr "" - -#: templates/InvenTree/settings/part.html:44 -msgid "Part Import" -msgstr "" - -#: templates/InvenTree/settings/part.html:48 -msgid "Import Part" -msgstr "" - -#: templates/InvenTree/settings/part_parameters.html:20 -msgid "Part Parameter Templates" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:7 -msgid "Stocktake Settings" -msgstr "" - -#: templates/InvenTree/settings/part_stocktake.html:25 -msgid "Stocktake Reports" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:8 -#: templates/InvenTree/settings/sidebar.html:35 -msgid "Physical Units" -msgstr "" - -#: templates/InvenTree/settings/physical_units.html:12 -msgid "Add Unit" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:9 -#: templates/InvenTree/settings/sidebar.html:64 -msgid "Plugin Settings" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:15 -msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "" - -#: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:66 -msgid "Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 -#: templates/js/translated/plugin.js:151 -msgid "Install Plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 -#: templates/js/translated/plugin.js:224 -msgid "Reload Plugins" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:58 -msgid "External plugins are not enabled for this InvenTree installation" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:73 -msgid "Plugin Error Stack" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:82 -msgid "Stage" -msgstr "" - -#: templates/InvenTree/settings/plugin.html:84 -#: templates/js/translated/notification.js:76 -msgid "Message" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:16 -msgid "Plugin information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:47 -msgid "no version information supplied" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:61 -msgid "License" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:70 -msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:76 -msgid "Package information" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:82 -msgid "Installation method" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:85 -msgid "This plugin was installed as a package" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:87 -msgid "This plugin was found in a local server path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:93 -msgid "Installation path" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:100 -#: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 -msgid "Builtin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:101 -msgid "This is a builtin plugin which cannot be disabled" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:107 -#: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 -msgid "Sample" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:108 -msgid "This is a sample plugin" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:113 -msgid "Commit Author" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:117 -#: templates/about.html:36 -msgid "Commit Date" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:121 -#: templates/about.html:29 -msgid "Commit Hash" -msgstr "" - -#: templates/InvenTree/settings/plugin_settings.html:125 -msgid "Commit Message" -msgstr "" - -#: templates/InvenTree/settings/po.html:7 -msgid "Purchase Order Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:7 -msgid "Pricing Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Exchange Rates" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:39 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:51 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:8 -msgid "Project Code Settings" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:21 -#: templates/InvenTree/settings/sidebar.html:33 -msgid "Project Codes" -msgstr "" - -#: templates/InvenTree/settings/project_codes.html:25 -#: templates/InvenTree/settings/settings_staff_js.html:216 -msgid "New Project Code" -msgstr "" - -#: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reporting.html:9 -msgid "Report Settings" -msgstr "" - -#: templates/InvenTree/settings/returns.html:7 -msgid "Return Order Settings" -msgstr "" - -#: templates/InvenTree/settings/setting.html:31 -msgid "No value set" -msgstr "" - -#: templates/InvenTree/settings/setting.html:46 -msgid "Edit setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:58 -msgid "Edit Plugin Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:60 -msgid "Edit Notification Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:63 -msgid "Edit Global Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_js.html:65 -msgid "Edit User Setting" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:49 -msgid "Rate" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 -msgid "Delete" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:95 -msgid "Edit Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:110 -msgid "Delete Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:124 -msgid "New Custom Unit" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:140 -msgid "No project codes found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 -msgid "group" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:175 -#: templates/InvenTree/settings/settings_staff_js.html:189 -msgid "Edit Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:176 -#: templates/InvenTree/settings/settings_staff_js.html:203 -msgid "Delete Project Code" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:285 -msgid "No category parameter templates found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 -msgid "Edit Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 -msgid "Delete Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:326 -msgid "Edit Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:352 -msgid "Delete Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:387 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:416 -msgid "Create Part Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:439 -msgid "No stock location types found" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:464 -msgid "Location count" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 -msgid "Edit Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:470 -msgid "Delete Location type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:493 -msgid "Delete Location Type" -msgstr "" - -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 -msgid "New Location Type" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:6 -#: templates/InvenTree/settings/user_settings.html:9 -msgid "User Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:9 -msgid "Account" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:11 -msgid "Display" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:13 -msgid "Home Page" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 -#: templates/navbar.html:107 templates/search.html:8 -#: templates/search_form.html:6 templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:19 -#: templates/InvenTree/settings/sidebar.html:43 -msgid "Reporting" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:24 -msgid "Global Settings" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 -msgid "Server" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:41 -msgid "Labels" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:45 -msgid "Categories" -msgstr "" - -#: templates/InvenTree/settings/so.html:7 -msgid "Sales Order Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:7 -msgid "Stock Settings" -msgstr "" - -#: templates/InvenTree/settings/stock.html:34 -msgid "Stock Location Types" -msgstr "" - -#: templates/InvenTree/settings/user.html:13 -msgid "Account Settings" -msgstr "" - -#: templates/InvenTree/settings/user.html:19 -#: templates/account/password_reset_from_key.html:4 -#: templates/account/password_reset_from_key.html:7 -msgid "Change Password" -msgstr "" - -#: templates/InvenTree/settings/user.html:55 -msgid "The following email addresses are associated with your account:" -msgstr "" - -#: templates/InvenTree/settings/user.html:76 -msgid "Verified" -msgstr "" - -#: templates/InvenTree/settings/user.html:78 -msgid "Unverified" -msgstr "" - -#: templates/InvenTree/settings/user.html:80 -#: templates/js/translated/company.js:957 -msgid "Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:86 -msgid "Make Primary" -msgstr "" - -#: templates/InvenTree/settings/user.html:87 -msgid "Re-send Verification" -msgstr "" - -#: templates/InvenTree/settings/user.html:96 -msgid "Warning:" -msgstr "" - -#: templates/InvenTree/settings/user.html:97 -msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "" - -#: templates/InvenTree/settings/user.html:105 -msgid "Add Email Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:110 -msgid "Add Email" -msgstr "" - -#: templates/InvenTree/settings/user.html:120 -msgid "Multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:125 -msgid "You have these factors available:" -msgstr "" - -#: templates/InvenTree/settings/user.html:135 -msgid "TOTP" -msgstr "" - -#: templates/InvenTree/settings/user.html:141 -msgid "Static" -msgstr "" - -#: templates/InvenTree/settings/user.html:150 -msgid "Multifactor authentication is not configured for your account" -msgstr "" - -#: templates/InvenTree/settings/user.html:157 -msgid "Change factors" -msgstr "" - -#: templates/InvenTree/settings/user.html:158 -msgid "Setup multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:160 -msgid "Remove multifactor" -msgstr "" - -#: templates/InvenTree/settings/user.html:171 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:177 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:178 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:187 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:188 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:192 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:193 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:194 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:207 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:209 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:223 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:29 -msgid "Theme Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:39 -msgid "Select theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:50 -msgid "Set Theme" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:58 -msgid "Language Settings" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:67 -msgid "Select language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:83 -#, python-format -msgid "%(lang_translated)s%% translated" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:85 -msgid "No translations available" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:92 -msgid "Set Language" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "Some languages are not complete" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:97 -msgid "Show only sufficient" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "and hidden." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:99 -msgid "Show them too" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:106 -msgid "Help the translation efforts!" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:107 -msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user_display.html:108 -msgid "InvenTree Translation Project" -msgstr "" - -#: templates/InvenTree/settings/user_homepage.html:9 -msgid "Home Page Settings" -msgstr "" - -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:9 -msgid "Single Sign On Accounts" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:16 -msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:52 -msgid "There are no social network accounts connected to this account." -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:58 -msgid "Add SSO Account" -msgstr "" - -#: templates/InvenTree/settings/user_sso.html:67 -msgid "Single Sign On is not enabled for this server" -msgstr "" - -#: templates/about.html:9 -msgid "InvenTree Version" -msgstr "" - -#: templates/about.html:14 -msgid "Development Version" -msgstr "" - -#: templates/about.html:17 -msgid "Up to Date" -msgstr "" - -#: templates/about.html:19 -msgid "Update Available" -msgstr "" - -#: templates/about.html:43 -msgid "Commit Branch" -msgstr "" - -#: templates/about.html:49 -msgid "InvenTree Documentation" -msgstr "" - -#: templates/about.html:54 -msgid "API Version" -msgstr "" - -#: templates/about.html:59 -msgid "Python Version" -msgstr "" - -#: templates/about.html:64 -msgid "Django Version" -msgstr "" - -#: templates/about.html:69 -msgid "View Code on GitHub" -msgstr "" - -#: templates/about.html:74 -msgid "Credits" -msgstr "" - -#: templates/about.html:79 -msgid "Mobile App" -msgstr "" - -#: templates/about.html:84 -msgid "Submit Bug Report" -msgstr "" - -#: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 -msgid "copy to clipboard" -msgstr "" - -#: templates/about.html:91 -msgid "copy version information" -msgstr "" - -#: templates/account/base.html:66 templates/navbar.html:17 -msgid "InvenTree logo" -msgstr "" - -#: templates/account/email_confirm.html:6 -#: templates/account/email_confirm.html:9 -msgid "Confirm Email Address" -msgstr "" - -#: templates/account/email_confirm.html:15 -#, python-format -msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "" - -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 -msgid "Confirm" -msgstr "" - -#: templates/account/email_confirm.html:29 -#, python-format -msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "" - -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 -msgid "Sign In" -msgstr "" - -#: templates/account/login.html:23 -msgid "Not a member?" -msgstr "" - -#: templates/account/login.html:25 templates/account/signup.html:11 -#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 -#: templates/socialaccount/signup.html:23 -msgid "Sign Up" -msgstr "" - -#: templates/account/login.html:47 -msgid "Forgot Password?" -msgstr "" - -#: templates/account/login.html:55 -msgid "or log in with" -msgstr "" - -#: templates/account/logout.html:5 templates/account/logout.html:8 -#: templates/account/logout.html:20 -msgid "Sign Out" -msgstr "" - -#: templates/account/logout.html:10 -msgid "Are you sure you want to sign out?" -msgstr "" - -#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 -msgid "Return to Site" -msgstr "" - -#: templates/account/password_reset.html:5 -#: templates/account/password_reset.html:12 -msgid "Password Reset" -msgstr "" - -#: templates/account/password_reset.html:18 -msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "" - -#: templates/account/password_reset.html:23 -msgid "Reset My Password" -msgstr "" - -#: templates/account/password_reset.html:27 templates/account/signup.html:37 -msgid "This function is currently disabled. Please contact an administrator." -msgstr "" - -#: templates/account/password_reset_from_key.html:7 -msgid "Bad Token" -msgstr "" - -#: templates/account/password_reset_from_key.html:11 -#, python-format -msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "" - -#: templates/account/password_reset_from_key.html:18 -msgid "Change password" -msgstr "" - -#: templates/account/password_reset_from_key.html:22 -msgid "Your password is now changed." -msgstr "" - -#: templates/account/signup.html:13 -#, python-format -msgid "Already have an account? Then please sign in." -msgstr "" - -#: templates/account/signup.html:28 -msgid "Use a SSO-provider for signup" -msgstr "" - -#: templates/account/signup_closed.html:5 -#: templates/account/signup_closed.html:8 -msgid "Sign Up Closed" -msgstr "" - -#: templates/account/signup_closed.html:10 -msgid "Sign up is currently closed." -msgstr "" - -#: templates/account/signup_closed.html:15 -#: templates/socialaccount/authentication_error.html:19 -#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 -msgid "Return to login page" -msgstr "" - -#: templates/admin_button.html:8 -msgid "View in administration panel" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:5 -msgid "Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/authenticate.html:13 -msgid "Authenticate" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:6 -msgid "Two-Factor Authentication Backup Tokens" -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:17 -msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:20 -msgid "No backup tokens are available. Press the button below to generate some." -msgstr "" - -#: templates/allauth_2fa/backup_tokens.html:28 -msgid "Generate Tokens" -msgstr "" - -#: templates/allauth_2fa/remove.html:6 -msgid "Disable Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/remove.html:9 -msgid "Are you sure?" -msgstr "" - -#: templates/allauth_2fa/remove.html:17 -msgid "Disable 2FA" -msgstr "" - -#: templates/allauth_2fa/setup.html:6 -msgid "Setup Two-Factor Authentication" -msgstr "" - -#: templates/allauth_2fa/setup.html:10 -msgid "Step 1" -msgstr "" - -#: templates/allauth_2fa/setup.html:14 -msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 -msgid "Step 2" -msgstr "" - -#: templates/allauth_2fa/setup.html:28 -msgid "Input a token generated by the app:" -msgstr "" - -#: templates/allauth_2fa/setup.html:38 -msgid "Verify" -msgstr "" - -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 -msgid "Add Link" -msgstr "" - -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 -msgid "Add Attachment" -msgstr "" - -#: templates/barcode_data.html:5 -msgid "Barcode Identifier" -msgstr "" - -#: templates/base.html:103 -msgid "Server Restart Required" -msgstr "" - -#: templates/base.html:106 -msgid "A configuration option has been changed which requires a server restart" -msgstr "" - -#: templates/base.html:106 templates/base.html:116 -msgid "Contact your system administrator for further information" -msgstr "" - -#: templates/base.html:113 -msgid "Pending Database Migrations" -msgstr "" - -#: templates/base.html:116 -msgid "There are pending database migrations which require attention" -msgstr "" - -#: templates/email/build_order_completed.html:9 -#: templates/email/canceled_order_assigned.html:9 -#: templates/email/new_order_assigned.html:9 -#: templates/email/overdue_build_order.html:9 -#: templates/email/overdue_purchase_order.html:9 -#: templates/email/overdue_sales_order.html:9 -#: templates/email/purchase_order_received.html:9 -#: templates/email/return_order_received.html:9 -msgid "Click on the following link to view this order" -msgstr "" - -#: templates/email/build_order_required_stock.html:7 -msgid "Stock is required for the following build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:8 -#, python-format -msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "" - -#: templates/email/build_order_required_stock.html:10 -msgid "Click on the following link to view this build order" -msgstr "" - -#: templates/email/build_order_required_stock.html:14 -msgid "The following parts are low on required stock" -msgstr "" - -#: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 -msgid "Required Quantity" -msgstr "" - -#: templates/email/build_order_required_stock.html:38 -#: templates/email/low_stock_notification.html:30 -msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "" - -#: templates/email/low_stock_notification.html:9 -msgid "Click on the following link to view this part" -msgstr "" - -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 -msgid "Minimum Quantity" -msgstr "" - -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 -msgid "No Response" -msgstr "" - -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 -msgid "No response from the InvenTree server" -msgstr "" - -#: templates/js/translated/api.js:232 -msgid "Error 400: Bad request" -msgstr "" - -#: templates/js/translated/api.js:233 -msgid "API request returned error code 400" -msgstr "" - -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 -msgid "Error 401: Not Authenticated" -msgstr "" - -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 -msgid "Authentication credentials not supplied" -msgstr "" - -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 -msgid "Error 403: Permission Denied" -msgstr "" - -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 -msgid "You do not have the required permissions to access this function" -msgstr "" - -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 -msgid "Error 404: Resource Not Found" -msgstr "" - -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 -msgid "The requested resource could not be located on the server" -msgstr "" - -#: templates/js/translated/api.js:252 -msgid "Error 405: Method Not Allowed" -msgstr "" - -#: templates/js/translated/api.js:253 -msgid "HTTP method not allowed at URL" -msgstr "" - -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 -msgid "Error 408: Timeout" -msgstr "" - -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 -msgid "Connection timeout while requesting data from server" -msgstr "" - -#: templates/js/translated/api.js:261 -msgid "Error 503: Service Unavailable" -msgstr "" - -#: templates/js/translated/api.js:262 -msgid "The server is currently unavailable" -msgstr "" - -#: templates/js/translated/api.js:265 -msgid "Unhandled Error Code" -msgstr "" - -#: templates/js/translated/api.js:266 -msgid "Error code" -msgstr "" - -#: templates/js/translated/attachment.js:114 -msgid "All selected attachments will be deleted" -msgstr "" - -#: templates/js/translated/attachment.js:129 -msgid "Delete Attachments" -msgstr "" - -#: templates/js/translated/attachment.js:205 -msgid "Delete attachments" -msgstr "" - -#: templates/js/translated/attachment.js:260 -msgid "Attachment actions" -msgstr "" - -#: templates/js/translated/attachment.js:294 -msgid "No attachments found" -msgstr "" - -#: templates/js/translated/attachment.js:334 -msgid "Edit Attachment" -msgstr "" - -#: templates/js/translated/attachment.js:365 -msgid "Upload Date" -msgstr "" - -#: templates/js/translated/attachment.js:385 -msgid "Edit attachment" -msgstr "" - -#: templates/js/translated/attachment.js:393 -msgid "Delete attachment" -msgstr "" - -#: templates/js/translated/barcode.js:43 -msgid "Scan barcode data here using barcode scanner" -msgstr "" - -#: templates/js/translated/barcode.js:45 -msgid "Enter barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:59 -msgid "Scan barcode using connected webcam" -msgstr "" - -#: templates/js/translated/barcode.js:138 -msgid "Enter optional notes for stock transfer" -msgstr "" - -#: templates/js/translated/barcode.js:139 -msgid "Enter notes" -msgstr "" - -#: templates/js/translated/barcode.js:188 -msgid "Server error" -msgstr "" - -#: templates/js/translated/barcode.js:217 -msgid "Unknown response from server" -msgstr "" - -#: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 -msgid "Invalid server response" -msgstr "" - -#: templates/js/translated/barcode.js:403 -msgid "Scan barcode data" -msgstr "" - -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 -msgid "Scan Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:489 -msgid "No URL in response" -msgstr "" - -#: templates/js/translated/barcode.js:529 -msgid "This will remove the link to the associated barcode" -msgstr "" - -#: templates/js/translated/barcode.js:535 -msgid "Unlink" -msgstr "" - -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 -msgid "Remove stock item" -msgstr "" - -#: templates/js/translated/barcode.js:641 -msgid "Scan Stock Items Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:643 -msgid "Scan stock item barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 -msgid "Check In" -msgstr "" - -#: templates/js/translated/barcode.js:678 -msgid "No barcode provided" -msgstr "" - -#: templates/js/translated/barcode.js:718 -msgid "Stock Item already scanned" -msgstr "" - -#: templates/js/translated/barcode.js:722 -msgid "Stock Item already in this location" -msgstr "" - -#: templates/js/translated/barcode.js:729 -msgid "Added stock item" -msgstr "" - -#: templates/js/translated/barcode.js:738 -msgid "Barcode does not match valid stock item" -msgstr "" - -#: templates/js/translated/barcode.js:757 -msgid "Scan Stock Container Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:759 -msgid "Scan stock container barcode to check in to this location" -msgstr "" - -#: templates/js/translated/barcode.js:793 -msgid "Barcode does not match valid stock location" -msgstr "" - -#: templates/js/translated/barcode.js:837 -msgid "Check Into Location" -msgstr "" - -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 -msgid "Barcode does not match a valid location" -msgstr "" - -#: templates/js/translated/bom.js:78 -msgid "Create BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:132 -msgid "Display row data" -msgstr "" - -#: templates/js/translated/bom.js:188 -msgid "Row Data" -msgstr "" - -#: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 -#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 -#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 -msgid "Close" -msgstr "" - -#: templates/js/translated/bom.js:306 -msgid "Download BOM Template" -msgstr "" - -#: templates/js/translated/bom.js:351 -msgid "Multi Level BOM" -msgstr "" - -#: templates/js/translated/bom.js:352 -msgid "Include BOM data for subassemblies" -msgstr "" - -#: templates/js/translated/bom.js:357 -msgid "Levels" -msgstr "" - -#: templates/js/translated/bom.js:358 -msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" - -#: templates/js/translated/bom.js:365 -msgid "Include Alternative Parts" -msgstr "" - -#: templates/js/translated/bom.js:366 -msgid "Include alternative parts in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:371 -msgid "Include Parameter Data" -msgstr "" - -#: templates/js/translated/bom.js:372 -msgid "Include part parameter data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:377 -msgid "Include Stock Data" -msgstr "" - -#: templates/js/translated/bom.js:378 -msgid "Include part stock data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:383 -msgid "Include Manufacturer Data" -msgstr "" - -#: templates/js/translated/bom.js:384 -msgid "Include part manufacturer data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:389 -msgid "Include Supplier Data" -msgstr "" - -#: templates/js/translated/bom.js:390 -msgid "Include part supplier data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:395 -msgid "Include Pricing Data" -msgstr "" - -#: templates/js/translated/bom.js:396 -msgid "Include part pricing data in exported BOM" -msgstr "" - -#: templates/js/translated/bom.js:591 -msgid "Remove substitute part" -msgstr "" - -#: templates/js/translated/bom.js:645 -msgid "Select and add a new substitute part using the input below" -msgstr "" - -#: templates/js/translated/bom.js:656 -msgid "Are you sure you wish to remove this substitute part link?" -msgstr "" - -#: templates/js/translated/bom.js:662 -msgid "Remove Substitute Part" -msgstr "" - -#: templates/js/translated/bom.js:701 -msgid "Add Substitute" -msgstr "" - -#: templates/js/translated/bom.js:702 -msgid "Edit BOM Item Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:764 -msgid "All selected BOM items will be deleted" -msgstr "" - -#: templates/js/translated/bom.js:780 -msgid "Delete selected BOM items?" -msgstr "" - -#: templates/js/translated/bom.js:826 -msgid "Delete items" -msgstr "" - -#: templates/js/translated/bom.js:936 -msgid "Load BOM for subassembly" -msgstr "" - -#: templates/js/translated/bom.js:946 -msgid "Substitutes Available" -msgstr "" - -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 -msgid "Variant stock allowed" -msgstr "" - -#: templates/js/translated/bom.js:1014 -msgid "Substitutes" -msgstr "" - -#: templates/js/translated/bom.js:1139 -msgid "BOM pricing is complete" -msgstr "" - -#: templates/js/translated/bom.js:1144 -msgid "BOM pricing is incomplete" -msgstr "" - -#: templates/js/translated/bom.js:1151 -msgid "No pricing available" -msgstr "" - -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 -msgid "External stock" -msgstr "" - -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 -msgid "No Stock Available" -msgstr "" - -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 -msgid "Includes variant and substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 -msgid "Includes variant stock" -msgstr "" - -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 -msgid "Includes substitute stock" -msgstr "" - -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 -msgid "Consumable item" -msgstr "" - -#: templates/js/translated/bom.js:1285 -msgid "Validate BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1287 -msgid "This line has been validated" -msgstr "" - -#: templates/js/translated/bom.js:1289 -msgid "Edit substitute parts" -msgstr "" - -#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 -msgid "Edit BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1293 -msgid "Delete BOM Item" -msgstr "" - -#: templates/js/translated/bom.js:1313 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1397 -msgid "No BOM items found" -msgstr "" - -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 -msgid "Required Part" -msgstr "" - -#: templates/js/translated/bom.js:1683 -msgid "Inherited from parent BOM" -msgstr "" - -#: templates/js/translated/build.js:143 -msgid "Edit Build Order" -msgstr "" - -#: templates/js/translated/build.js:191 -msgid "Create Build Order" -msgstr "" - -#: templates/js/translated/build.js:223 -msgid "Cancel Build Order" -msgstr "" - -#: templates/js/translated/build.js:232 -msgid "Are you sure you wish to cancel this build?" -msgstr "" - -#: templates/js/translated/build.js:238 -msgid "Stock items have been allocated to this build order" -msgstr "" - -#: templates/js/translated/build.js:245 -msgid "There are incomplete outputs remaining for this build order" -msgstr "" - -#: templates/js/translated/build.js:297 -msgid "Build order is ready to be completed" -msgstr "" - -#: templates/js/translated/build.js:305 -msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "" - -#: templates/js/translated/build.js:310 -msgid "Build Order is incomplete" -msgstr "" - -#: templates/js/translated/build.js:328 -msgid "Complete Build Order" -msgstr "" - -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 -msgid "Next available serial number" -msgstr "" - -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 -msgid "Latest serial number" -msgstr "" - -#: templates/js/translated/build.js:380 -msgid "The Bill of Materials contains trackable parts" -msgstr "" - -#: templates/js/translated/build.js:381 -msgid "Build outputs must be generated individually" -msgstr "" - -#: templates/js/translated/build.js:389 -msgid "Trackable parts can have serial numbers specified" -msgstr "" - -#: templates/js/translated/build.js:390 -msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "" - -#: templates/js/translated/build.js:397 -msgid "Create Build Output" -msgstr "" - -#: templates/js/translated/build.js:428 -msgid "Allocate stock items to this build output" -msgstr "" - -#: templates/js/translated/build.js:436 -msgid "Deallocate stock from build output" -msgstr "" - -#: templates/js/translated/build.js:445 -msgid "Complete build output" -msgstr "" - -#: templates/js/translated/build.js:453 -msgid "Scrap build output" -msgstr "" - -#: templates/js/translated/build.js:460 -msgid "Delete build output" -msgstr "" - -#: templates/js/translated/build.js:480 -msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "" - -#: templates/js/translated/build.js:498 -msgid "Deallocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 -msgid "Select Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 -msgid "At least one build output must be selected" -msgstr "" - -#: templates/js/translated/build.js:599 -msgid "Selected build outputs will be marked as complete" -msgstr "" - -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 -msgid "Output" -msgstr "" - -#: templates/js/translated/build.js:630 -msgid "Complete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:727 -msgid "Selected build outputs will be marked as scrapped" -msgstr "" - -#: templates/js/translated/build.js:729 -msgid "Scrapped output are marked as rejected" -msgstr "" - -#: templates/js/translated/build.js:730 -msgid "Allocated stock items will no longer be available" -msgstr "" - -#: templates/js/translated/build.js:731 -msgid "The completion status of the build order will not be adjusted" -msgstr "" - -#: templates/js/translated/build.js:761 -msgid "Scrap Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:851 -msgid "Selected build outputs will be deleted" -msgstr "" - -#: templates/js/translated/build.js:853 -msgid "Build output data will be permanently deleted" -msgstr "" - -#: templates/js/translated/build.js:854 -msgid "Allocated stock items will be returned to stock" -msgstr "" - -#: templates/js/translated/build.js:872 -msgid "Delete Build Outputs" -msgstr "" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" -msgstr "" - -#: templates/js/translated/build.js:1178 -msgid "Location not specified" -msgstr "" - -#: templates/js/translated/build.js:1200 -msgid "Complete outputs" -msgstr "" - -#: templates/js/translated/build.js:1218 -msgid "Scrap outputs" -msgstr "" - -#: templates/js/translated/build.js:1236 -msgid "Delete outputs" -msgstr "" - -#: templates/js/translated/build.js:1289 -msgid "build output" -msgstr "" - -#: templates/js/translated/build.js:1290 -msgid "build outputs" -msgstr "" - -#: templates/js/translated/build.js:1294 -msgid "Build output actions" -msgstr "" - -#: templates/js/translated/build.js:1470 -msgid "No active build outputs found" -msgstr "" - -#: templates/js/translated/build.js:1563 -msgid "Allocated Lines" -msgstr "" - -#: templates/js/translated/build.js:1577 -msgid "Required Tests" -msgstr "" - -#: templates/js/translated/build.js:1749 -#: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 -msgid "Select Parts" -msgstr "" - -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 -msgid "You must select at least one part to allocate" -msgstr "" - -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 -msgid "Specify stock allocation quantity" -msgstr "" - -#: templates/js/translated/build.js:1890 -msgid "All Parts Allocated" -msgstr "" - -#: templates/js/translated/build.js:1891 -msgid "All selected parts have been fully allocated" -msgstr "" - -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 -msgid "Select source location (leave blank to take from all locations)" -msgstr "" - -#: templates/js/translated/build.js:1933 -msgid "Allocate Stock Items to Build Order" -msgstr "" - -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 -msgid "No matching stock locations" -msgstr "" - -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 -msgid "No matching stock items" -msgstr "" - -#: templates/js/translated/build.js:2114 -msgid "Automatic Stock Allocation" -msgstr "" - -#: templates/js/translated/build.js:2115 -msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "" - -#: templates/js/translated/build.js:2117 -msgid "If a location is specified, stock will only be allocated from that location" -msgstr "" - -#: templates/js/translated/build.js:2118 -msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "" - -#: templates/js/translated/build.js:2119 -msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "" - -#: templates/js/translated/build.js:2149 -msgid "Allocate Stock Items" -msgstr "" - -#: templates/js/translated/build.js:2254 -msgid "No builds matching query" -msgstr "" - -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 -msgid "Select" -msgstr "" - -#: templates/js/translated/build.js:2303 -msgid "Build order is overdue" -msgstr "" - -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 -msgid "No user information" -msgstr "" - -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 -msgid "Edit stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 -msgid "Delete stock allocation" -msgstr "" - -#: templates/js/translated/build.js:2577 -msgid "Edit Allocation" -msgstr "" - -#: templates/js/translated/build.js:2589 -msgid "Remove Allocation" -msgstr "" - -#: templates/js/translated/build.js:2628 -msgid "build line" -msgstr "" - -#: templates/js/translated/build.js:2629 -msgid "build lines" -msgstr "" - -#: templates/js/translated/build.js:2647 -msgid "No build lines found" -msgstr "" - -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 -msgid "Trackable part" -msgstr "" - -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 -msgid "Unit Quantity" -msgstr "" - -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 -msgid "Sufficient stock available" -msgstr "" - -#: templates/js/translated/build.js:2837 -msgid "Consumable Item" -msgstr "" - -#: templates/js/translated/build.js:2844 -msgid "Tracked item" -msgstr "" - -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 -msgid "Build stock" -msgstr "" - -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 -msgid "Order stock" -msgstr "" - -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 -msgid "Allocate stock" -msgstr "" - -#: templates/js/translated/build.js:2866 -msgid "Remove stock allocation" -msgstr "" - -#: templates/js/translated/company.js:98 -msgid "Add Manufacturer" -msgstr "" - -#: templates/js/translated/company.js:111 -#: templates/js/translated/company.js:213 -msgid "Add Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:132 -msgid "Edit Manufacturer Part" -msgstr "" - -#: templates/js/translated/company.js:201 -#: templates/js/translated/purchase_order.js:93 -msgid "Add Supplier" -msgstr "" - -#: templates/js/translated/company.js:243 -#: templates/js/translated/purchase_order.js:318 -msgid "Add Supplier Part" -msgstr "" - -#: templates/js/translated/company.js:344 -msgid "All selected supplier parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:360 -msgid "Delete Supplier Parts" -msgstr "" - -#: templates/js/translated/company.js:466 -msgid "Add new Company" -msgstr "" - -#: templates/js/translated/company.js:546 -msgid "Parts Supplied" -msgstr "" - -#: templates/js/translated/company.js:555 -msgid "Parts Manufactured" -msgstr "" - -#: templates/js/translated/company.js:570 -msgid "No company information found" -msgstr "" - -#: templates/js/translated/company.js:619 -msgid "Create New Contact" -msgstr "" - -#: templates/js/translated/company.js:635 -#: templates/js/translated/company.js:758 -msgid "Edit Contact" -msgstr "" - -#: templates/js/translated/company.js:672 -msgid "All selected contacts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:678 -#: templates/js/translated/company.js:742 -msgid "Role" -msgstr "" - -#: templates/js/translated/company.js:686 -msgid "Delete Contacts" -msgstr "" - -#: templates/js/translated/company.js:717 -msgid "No contacts found" -msgstr "" - -#: templates/js/translated/company.js:730 -msgid "Phone Number" -msgstr "" - -#: templates/js/translated/company.js:736 -msgid "Email Address" -msgstr "" - -#: templates/js/translated/company.js:762 -msgid "Delete Contact" -msgstr "" - -#: templates/js/translated/company.js:859 -msgid "Create New Address" -msgstr "" - -#: templates/js/translated/company.js:874 -#: templates/js/translated/company.js:1035 -msgid "Edit Address" -msgstr "" - -#: templates/js/translated/company.js:909 -msgid "All selected addresses will be deleted" -msgstr "" - -#: templates/js/translated/company.js:923 -msgid "Delete Addresses" -msgstr "" - -#: templates/js/translated/company.js:950 -msgid "No addresses found" -msgstr "" - -#: templates/js/translated/company.js:989 -msgid "Postal city" -msgstr "" - -#: templates/js/translated/company.js:995 -msgid "State/province" -msgstr "" - -#: templates/js/translated/company.js:1007 -msgid "Courier notes" -msgstr "" - -#: templates/js/translated/company.js:1013 -msgid "Internal notes" -msgstr "" - -#: templates/js/translated/company.js:1039 -msgid "Delete Address" -msgstr "" - -#: templates/js/translated/company.js:1112 -msgid "All selected manufacturer parts will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1127 -msgid "Delete Manufacturer Parts" -msgstr "" - -#: templates/js/translated/company.js:1161 -msgid "All selected parameters will be deleted" -msgstr "" - -#: templates/js/translated/company.js:1175 -msgid "Delete Parameters" -msgstr "" - -#: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 -msgid "Order parts" -msgstr "" - -#: templates/js/translated/company.js:1208 -msgid "Delete manufacturer parts" -msgstr "" - -#: templates/js/translated/company.js:1240 -msgid "Manufacturer part actions" -msgstr "" - -#: templates/js/translated/company.js:1259 -msgid "No manufacturer parts found" -msgstr "" - -#: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 -msgid "Template part" -msgstr "" - -#: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 -msgid "Assembled part" -msgstr "" - -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 -msgid "No parameters found" -msgstr "" - -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 -msgid "Edit parameter" -msgstr "" - -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 -msgid "Delete parameter" -msgstr "" - -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 -msgid "Edit Parameter" -msgstr "" - -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 -msgid "Delete Parameter" -msgstr "" - -#: templates/js/translated/company.js:1496 -msgid "Delete supplier parts" -msgstr "" - -#: templates/js/translated/company.js:1546 -msgid "No supplier parts found" -msgstr "" - -#: templates/js/translated/company.js:1664 -msgid "Base Units" -msgstr "" - -#: templates/js/translated/company.js:1694 -msgid "Availability" -msgstr "" - -#: templates/js/translated/company.js:1725 -msgid "Edit supplier part" -msgstr "" - -#: templates/js/translated/company.js:1726 -msgid "Delete supplier part" -msgstr "" - -#: templates/js/translated/company.js:1779 -#: templates/js/translated/pricing.js:694 -msgid "Delete Price Break" -msgstr "" - -#: templates/js/translated/company.js:1789 -#: templates/js/translated/pricing.js:712 -msgid "Edit Price Break" -msgstr "" - -#: templates/js/translated/company.js:1804 -msgid "No price break information found" -msgstr "" - -#: templates/js/translated/company.js:1833 -msgid "Last updated" -msgstr "" - -#: templates/js/translated/company.js:1840 -msgid "Edit price break" -msgstr "" - -#: templates/js/translated/company.js:1841 -msgid "Delete price break" -msgstr "" - -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 -msgid "true" -msgstr "" - -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 -msgid "false" -msgstr "" - -#: templates/js/translated/filters.js:217 -msgid "Select filter" -msgstr "" - -#: templates/js/translated/filters.js:440 -msgid "Print Labels" -msgstr "" - -#: templates/js/translated/filters.js:444 -msgid "Print Reports" -msgstr "" - -#: templates/js/translated/filters.js:456 -msgid "Download table data" -msgstr "" - -#: templates/js/translated/filters.js:463 -msgid "Reload table data" -msgstr "" - -#: templates/js/translated/filters.js:472 -msgid "Add new filter" -msgstr "" - -#: templates/js/translated/filters.js:480 -msgid "Clear all filters" -msgstr "" - -#: templates/js/translated/filters.js:580 -msgid "Create filter" -msgstr "" - -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 -msgid "Action Prohibited" -msgstr "" - -#: templates/js/translated/forms.js:381 -msgid "Create operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:396 -msgid "Update operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:410 -msgid "Delete operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:424 -msgid "View operation not allowed" -msgstr "" - -#: templates/js/translated/forms.js:801 -msgid "Keep this form open" -msgstr "" - -#: templates/js/translated/forms.js:904 -msgid "Enter a valid number" -msgstr "" - -#: templates/js/translated/forms.js:1478 templates/modals.html:19 -#: templates/modals.html:43 -msgid "Form errors exist" -msgstr "" - -#: templates/js/translated/forms.js:2008 -msgid "No results found" -msgstr "" - -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 -msgid "Searching" -msgstr "" - -#: templates/js/translated/forms.js:2532 -msgid "Clear input" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "File Column" -msgstr "" - -#: templates/js/translated/forms.js:3134 -msgid "Field Name" -msgstr "" - -#: templates/js/translated/forms.js:3146 -msgid "Select Columns" -msgstr "" - -#: templates/js/translated/helpers.js:80 -msgid "YES" -msgstr "" - -#: templates/js/translated/helpers.js:83 -msgid "NO" -msgstr "" - -#: templates/js/translated/helpers.js:96 -msgid "True" -msgstr "" - -#: templates/js/translated/helpers.js:97 -msgid "False" -msgstr "" - -#: templates/js/translated/index.js:104 -msgid "No parts required for builds" -msgstr "" - -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 -msgid "Select Items" -msgstr "" - -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 -msgid "No items selected for printing" -msgstr "" - -#: templates/js/translated/label.js:143 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 -msgid "Cancel" -msgstr "" - -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 -#: templates/modals.html:28 templates/modals.html:51 -msgid "Submit" -msgstr "" - -#: templates/js/translated/modals.js:157 -msgid "Form Title" -msgstr "" - -#: templates/js/translated/modals.js:446 -msgid "Waiting for server..." -msgstr "" - -#: templates/js/translated/modals.js:597 -msgid "Show Error Information" -msgstr "" - -#: templates/js/translated/modals.js:687 -msgid "Accept" -msgstr "" - -#: templates/js/translated/modals.js:745 -msgid "Loading Data" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Invalid response from server" -msgstr "" - -#: templates/js/translated/modals.js:1016 -msgid "Form data missing from server response" -msgstr "" - -#: templates/js/translated/modals.js:1028 -msgid "Error posting form data" -msgstr "" - -#: templates/js/translated/modals.js:1125 -msgid "JSON response missing form data" -msgstr "" - -#: templates/js/translated/modals.js:1140 -msgid "Error 400: Bad Request" -msgstr "" - -#: templates/js/translated/modals.js:1141 -msgid "Server returned error code 400" -msgstr "" - -#: templates/js/translated/modals.js:1164 -msgid "Error requesting form data" -msgstr "" - -#: templates/js/translated/news.js:33 -msgid "No news found" -msgstr "" - -#: templates/js/translated/news.js:38 -#: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 -msgid "ID" -msgstr "" - -#: templates/js/translated/notification.js:52 -msgid "Age" -msgstr "" - -#: templates/js/translated/notification.js:65 -msgid "Notification" -msgstr "" - -#: templates/js/translated/notification.js:224 -msgid "Mark as unread" -msgstr "" - -#: templates/js/translated/notification.js:228 -msgid "Mark as read" -msgstr "" - -#: templates/js/translated/notification.js:254 -msgid "No unread notifications" -msgstr "" - -#: templates/js/translated/notification.js:296 templates/notifications.html:12 -msgid "Notifications will load here" -msgstr "" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 -msgid "Add Extra Line Item" -msgstr "" - -#: templates/js/translated/order.js:151 -msgid "Export Order" -msgstr "" - -#: templates/js/translated/order.js:266 -msgid "Duplicate Line" -msgstr "" - -#: templates/js/translated/order.js:280 -msgid "Edit Line" -msgstr "" - -#: templates/js/translated/order.js:293 -msgid "Delete Line" -msgstr "" - -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:394 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:395 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/part.js:91 -msgid "Part Attributes" -msgstr "" - -#: templates/js/translated/part.js:95 -msgid "Part Creation Options" -msgstr "" - -#: templates/js/translated/part.js:99 -msgid "Part Duplication Options" -msgstr "" - -#: templates/js/translated/part.js:122 -msgid "Add Part Category" -msgstr "" - -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 -msgid "Icon (optional) - Explore all available icons on" -msgstr "" - -#: templates/js/translated/part.js:355 -msgid "Create Part Category" -msgstr "" - -#: templates/js/translated/part.js:358 -msgid "Create new category after this one" -msgstr "" - -#: templates/js/translated/part.js:359 -msgid "Part category created" -msgstr "" - -#: templates/js/translated/part.js:373 -msgid "Edit Part Category" -msgstr "" - -#: templates/js/translated/part.js:386 -msgid "Are you sure you want to delete this part category?" -msgstr "" - -#: templates/js/translated/part.js:391 -msgid "Move to parent category" -msgstr "" - -#: templates/js/translated/part.js:400 -msgid "Delete Part Category" -msgstr "" - -#: templates/js/translated/part.js:404 -msgid "Action for parts in this category" -msgstr "" - -#: templates/js/translated/part.js:409 -msgid "Action for child categories" -msgstr "" - -#: templates/js/translated/part.js:433 -msgid "Create Part" -msgstr "" - -#: templates/js/translated/part.js:435 -msgid "Create another part after this one" -msgstr "" - -#: templates/js/translated/part.js:436 -msgid "Part created successfully" -msgstr "" - -#: templates/js/translated/part.js:464 -msgid "Edit Part" -msgstr "" - -#: templates/js/translated/part.js:466 -msgid "Part edited" -msgstr "" - -#: templates/js/translated/part.js:477 -msgid "Create Part Variant" -msgstr "" - -#: templates/js/translated/part.js:534 -msgid "Active Part" -msgstr "" - -#: templates/js/translated/part.js:535 -msgid "Part cannot be deleted as it is currently active" -msgstr "" - -#: templates/js/translated/part.js:549 -msgid "Deleting this part cannot be reversed" -msgstr "" - -#: templates/js/translated/part.js:551 -msgid "Any stock items for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:552 -msgid "This part will be removed from any Bills of Material" -msgstr "" - -#: templates/js/translated/part.js:553 -msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "" - -#: templates/js/translated/part.js:560 -msgid "Delete Part" -msgstr "" - -#: templates/js/translated/part.js:596 -msgid "You are subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:598 -msgid "You have subscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:603 -msgid "Subscribe to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:605 -msgid "You have unsubscribed to notifications for this item" -msgstr "" - -#: templates/js/translated/part.js:622 -msgid "Validating the BOM will mark each line item as valid" -msgstr "" - -#: templates/js/translated/part.js:632 -msgid "Validate Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:635 -msgid "Validated Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:660 -msgid "Copy Bill of Materials" -msgstr "" - -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 -msgid "Low stock" -msgstr "" - -#: templates/js/translated/part.js:691 -msgid "No stock available" -msgstr "" - -#: templates/js/translated/part.js:751 -msgid "Demand" -msgstr "" - -#: templates/js/translated/part.js:774 -msgid "Unit" -msgstr "" - -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 -msgid "Virtual part" -msgstr "" - -#: templates/js/translated/part.js:809 -msgid "Subscribed part" -msgstr "" - -#: templates/js/translated/part.js:813 -msgid "Salable part" -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Schedule generation of a new stocktake report." -msgstr "" - -#: templates/js/translated/part.js:896 -msgid "Once complete, the stocktake report will be available for download." -msgstr "" - -#: templates/js/translated/part.js:904 -msgid "Generate Stocktake Report" -msgstr "" - -#: templates/js/translated/part.js:908 -msgid "Stocktake report scheduled" -msgstr "" - -#: templates/js/translated/part.js:1057 -msgid "No stocktake information available" -msgstr "" - -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 -msgid "Edit Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 -msgid "Delete Stocktake Entry" -msgstr "" - -#: templates/js/translated/part.js:1288 -msgid "No variants found" -msgstr "" - -#: templates/js/translated/part.js:1606 -msgid "No part parameter templates found" -msgstr "" - -#: templates/js/translated/part.js:1669 -msgid "Edit Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1681 -msgid "Any parameters which reference this template will also be deleted" -msgstr "" - -#: templates/js/translated/part.js:1689 -msgid "Delete Part Parameter Template" -msgstr "" - -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/part.js:1976 -msgid "Delete part relationship" -msgstr "" - -#: templates/js/translated/part.js:1998 -msgid "Delete Part Relationship" -msgstr "" - -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 -msgid "No parts found" -msgstr "" - -#: templates/js/translated/part.js:2207 -msgid "Set the part category for the selected parts" -msgstr "" - -#: templates/js/translated/part.js:2212 -msgid "Set Part Category" -msgstr "" - -#: templates/js/translated/part.js:2241 -msgid "Set category" -msgstr "" - -#: templates/js/translated/part.js:2293 -msgid "part" -msgstr "" - -#: templates/js/translated/part.js:2294 -msgid "parts" -msgstr "" - -#: templates/js/translated/part.js:2390 -msgid "No category" -msgstr "" - -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 -msgid "Display as list" -msgstr "" - -#: templates/js/translated/part.js:2566 -msgid "Display as grid" -msgstr "" - -#: templates/js/translated/part.js:2664 -msgid "No subcategories found" -msgstr "" - -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 -msgid "Display as tree" -msgstr "" - -#: templates/js/translated/part.js:2780 -msgid "Load Subcategories" -msgstr "" - -#: templates/js/translated/part.js:2795 -msgid "Subscribed category" -msgstr "" - -#: templates/js/translated/part.js:2883 -msgid "No test templates matching query" -msgstr "" - -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 -msgid "results" -msgstr "" - -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "" - -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "" - -#: templates/js/translated/part.js:2960 -msgid "This test is defined for a parent part" -msgstr "" - -#: templates/js/translated/part.js:2976 -msgid "Edit Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:2990 -msgid "Delete Test Result Template" -msgstr "" - -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 -msgid "No date specified" -msgstr "" - -#: templates/js/translated/part.js:3072 -msgid "Specified date is in the past" -msgstr "" - -#: templates/js/translated/part.js:3078 -msgid "Speculative" -msgstr "" - -#: templates/js/translated/part.js:3128 -msgid "No scheduling information available for this part" -msgstr "" - -#: templates/js/translated/part.js:3134 -msgid "Error fetching scheduling information for this part" -msgstr "" - -#: templates/js/translated/part.js:3230 -msgid "Scheduled Stock Quantities" -msgstr "" - -#: templates/js/translated/part.js:3246 -msgid "Maximum Quantity" -msgstr "" - -#: templates/js/translated/part.js:3291 -msgid "Minimum Stock Level" -msgstr "" - -#: templates/js/translated/plugin.js:46 -msgid "No plugins found" -msgstr "" - -#: templates/js/translated/plugin.js:58 -msgid "This plugin is no longer installed" -msgstr "" - -#: templates/js/translated/plugin.js:60 -msgid "This plugin is active" -msgstr "" - -#: templates/js/translated/plugin.js:62 -msgid "This plugin is installed but not active" -msgstr "" - -#: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 -msgid "Disable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 -msgid "Enable Plugin" -msgstr "" - -#: templates/js/translated/plugin.js:158 -msgid "The Plugin was installed" -msgstr "" - -#: templates/js/translated/plugin.js:177 -msgid "Are you sure you want to enable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:181 -msgid "Are you sure you want to disable this plugin?" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Enable" -msgstr "" - -#: templates/js/translated/plugin.js:189 -msgid "Disable" -msgstr "" - -#: templates/js/translated/plugin.js:203 -msgid "Plugin updated" -msgstr "" - -#: templates/js/translated/pricing.js:159 -msgid "Error fetching currency data" -msgstr "" - -#: templates/js/translated/pricing.js:321 -msgid "No BOM data available" -msgstr "" - -#: templates/js/translated/pricing.js:463 -msgid "No supplier pricing data available" -msgstr "" - -#: templates/js/translated/pricing.js:572 -msgid "No price break data available" -msgstr "" - -#: templates/js/translated/pricing.js:755 -msgid "No purchase history data available" -msgstr "" - -#: templates/js/translated/pricing.js:791 -msgid "Purchase Price History" -msgstr "" - -#: templates/js/translated/pricing.js:894 -msgid "No sales history data available" -msgstr "" - -#: templates/js/translated/pricing.js:916 -msgid "Sale Price History" -msgstr "" - -#: templates/js/translated/pricing.js:1005 -msgid "No variant data available" -msgstr "" - -#: templates/js/translated/pricing.js:1045 -msgid "Variant Part" -msgstr "" - -#: templates/js/translated/purchase_order.js:169 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/purchase_order.js:176 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:177 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:184 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/purchase_order.js:185 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/purchase_order.js:206 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:223 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/purchase_order.js:431 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:448 -#: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/purchase_order.js:454 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/purchase_order.js:459 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/purchase_order.js:460 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:483 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:488 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/purchase_order.js:494 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/purchase_order.js:515 -#: templates/js/translated/return_order.js:164 -msgid "After placing this order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/purchase_order.js:520 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/purchase_order.js:612 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:637 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/purchase_order.js:646 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/purchase_order.js:664 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:705 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/purchase_order.js:755 -msgid "Merge" -msgstr "" - -#: templates/js/translated/purchase_order.js:859 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/purchase_order.js:878 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/purchase_order.js:1104 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/purchase_order.js:1115 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/purchase_order.js:1237 -msgid "Add barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1238 -msgid "Remove barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1241 -msgid "Specify location" -msgstr "" - -#: templates/js/translated/purchase_order.js:1249 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 -msgid "Serials" -msgstr "" - -#: templates/js/translated/purchase_order.js:1368 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/purchase_order.js:1370 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1396 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1464 -msgid "Scan Item Barcode" -msgstr "" - -#: templates/js/translated/purchase_order.js:1465 -msgid "Scan barcode on incoming item (must not match any existing stock items)" -msgstr "" - -#: templates/js/translated/purchase_order.js:1479 -msgid "Invalid barcode data" -msgstr "" - -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/purchase_order.js:1913 -msgid "All selected Line items will be deleted" -msgstr "" - -#: templates/js/translated/purchase_order.js:1931 -msgid "Delete selected Line items?" -msgstr "" - -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/report.js:49 -msgid "Print Report" -msgstr "" - -#: templates/js/translated/report.js:68 -msgid "Report print successful" -msgstr "" - -#: templates/js/translated/report.js:73 -msgid "Report printing failed" -msgstr "" - -#: templates/js/translated/return_order.js:60 -#: templates/js/translated/sales_order.js:86 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/return_order.js:134 -msgid "Create Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:149 -msgid "Edit Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:169 -msgid "Issue Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:186 -msgid "Are you sure you wish to cancel this Return Order?" -msgstr "" - -#: templates/js/translated/return_order.js:193 -msgid "Cancel Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:218 -msgid "Complete Return Order" -msgstr "" - -#: templates/js/translated/return_order.js:265 -msgid "No return orders found" -msgstr "" - -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 -msgid "Invalid Customer" -msgstr "" - -#: templates/js/translated/return_order.js:560 -msgid "Receive Return Order Items" -msgstr "" - -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/return_order.js:796 -msgid "Mark item as received" -msgstr "" - -#: templates/js/translated/sales_order.js:161 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:176 -msgid "Edit Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:291 -msgid "No stock items have been allocated to this shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:296 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:336 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:360 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:416 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:420 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:430 -msgid "Complete Shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:452 -msgid "Skip" -msgstr "" - -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - -#: templates/js/translated/sales_order.js:513 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 -msgid "Issue this Sales Order?" -msgstr "" - -#: templates/js/translated/sales_order.js:577 -msgid "Issue Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:596 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:601 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:655 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:764 -msgid "No sales orders found" -msgstr "" - -#: templates/js/translated/sales_order.js:944 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:947 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:952 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:969 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:984 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1017 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/sales_order.js:1042 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:1084 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/sales_order.js:1088 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/sales_order.js:1255 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/sales_order.js:1306 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1307 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:1513 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/sales_order.js:1605 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1619 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/sales_order.js:1620 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/sales_order.js:2044 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2048 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/sales_order.js:2071 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/sales_order.js:2074 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/sales_order.js:2145 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/sales_order.js:2253 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/search.js:270 -msgid "No results" -msgstr "" - -#: templates/js/translated/search.js:292 templates/search.html:25 -msgid "Enter search query" -msgstr "" - -#: templates/js/translated/search.js:342 -msgid "result" -msgstr "" - -#: templates/js/translated/search.js:352 -msgid "Minimize results" -msgstr "" - -#: templates/js/translated/search.js:355 -msgid "Remove results" -msgstr "" - -#: templates/js/translated/stock.js:106 -msgid "Serialize Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:137 -msgid "Confirm Stock Serialization" -msgstr "" - -#: templates/js/translated/stock.js:173 -msgid "Add Location type" -msgstr "" - -#: templates/js/translated/stock.js:209 -msgid "Edit Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:224 -msgid "New Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:226 -msgid "Create another location after this one" -msgstr "" - -#: templates/js/translated/stock.js:227 -msgid "Stock location created" -msgstr "" - -#: templates/js/translated/stock.js:241 -msgid "Are you sure you want to delete this stock location?" -msgstr "" - -#: templates/js/translated/stock.js:248 -msgid "Move to parent stock location" -msgstr "" - -#: templates/js/translated/stock.js:257 -msgid "Delete Stock Location" -msgstr "" - -#: templates/js/translated/stock.js:261 -msgid "Action for stock items in this stock location" -msgstr "" - -#: templates/js/translated/stock.js:266 -msgid "Action for sub-locations" -msgstr "" - -#: templates/js/translated/stock.js:320 -msgid "This part cannot be serialized" -msgstr "" - -#: templates/js/translated/stock.js:356 -msgid "Add given quantity as packs instead of individual items" -msgstr "" - -#: templates/js/translated/stock.js:368 -msgid "Enter initial quantity for this stock item" -msgstr "" - -#: templates/js/translated/stock.js:374 -msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" - -#: templates/js/translated/stock.js:445 -msgid "Stock item duplicated" -msgstr "" - -#: templates/js/translated/stock.js:465 -msgid "Duplicate Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:481 -msgid "Are you sure you want to delete this stock item?" -msgstr "" - -#: templates/js/translated/stock.js:486 -msgid "Delete Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:507 -msgid "Edit Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:549 -msgid "Create another item after this one" -msgstr "" - -#: templates/js/translated/stock.js:561 -msgid "Created new stock item" -msgstr "" - -#: templates/js/translated/stock.js:574 -msgid "Created multiple stock items" -msgstr "" - -#: templates/js/translated/stock.js:599 -msgid "Find Serial Number" -msgstr "" - -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 -msgid "Enter serial number" -msgstr "" - -#: templates/js/translated/stock.js:620 -msgid "Enter a serial number" -msgstr "" - -#: templates/js/translated/stock.js:640 -msgid "No matching serial number" -msgstr "" - -#: templates/js/translated/stock.js:649 -msgid "More than one matching result found" -msgstr "" - -#: templates/js/translated/stock.js:757 -msgid "Confirm stock assignment" -msgstr "" - -#: templates/js/translated/stock.js:758 -msgid "Assign Stock to Customer" -msgstr "" - -#: templates/js/translated/stock.js:835 -msgid "Warning: Merge operation cannot be reversed" -msgstr "" - -#: templates/js/translated/stock.js:836 -msgid "Some information will be lost when merging stock items" -msgstr "" - -#: templates/js/translated/stock.js:838 -msgid "Stock transaction history will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:839 -msgid "Supplier part information will be deleted for merged items" -msgstr "" - -#: templates/js/translated/stock.js:933 -msgid "Confirm stock item merge" -msgstr "" - -#: templates/js/translated/stock.js:934 -msgid "Merge Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1031 -msgid "Transfer Stock" -msgstr "" - -#: templates/js/translated/stock.js:1032 -msgid "Move" -msgstr "" - -#: templates/js/translated/stock.js:1038 -msgid "Count Stock" -msgstr "" - -#: templates/js/translated/stock.js:1039 -msgid "Count" -msgstr "" - -#: templates/js/translated/stock.js:1043 -msgid "Remove Stock" -msgstr "" - -#: templates/js/translated/stock.js:1044 -msgid "Take" -msgstr "" - -#: templates/js/translated/stock.js:1048 -msgid "Add Stock" -msgstr "" - -#: templates/js/translated/stock.js:1049 users/models.py:396 -msgid "Add" -msgstr "" - -#: templates/js/translated/stock.js:1053 -msgid "Delete Stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" - -#: templates/js/translated/stock.js:1152 -msgid "Specify stock quantity" -msgstr "" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:1257 -msgid "Select at least one available stock item" -msgstr "" - -#: templates/js/translated/stock.js:1303 -msgid "Confirm stock adjustment" -msgstr "" - -#: templates/js/translated/stock.js:1448 -msgid "PASS" -msgstr "" - -#: templates/js/translated/stock.js:1450 -msgid "FAIL" -msgstr "" - -#: templates/js/translated/stock.js:1455 -msgid "NO RESULT" -msgstr "" - -#: templates/js/translated/stock.js:1535 -msgid "Pass test" -msgstr "" - -#: templates/js/translated/stock.js:1538 -msgid "Add test result" -msgstr "" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 -msgid "No test results found" -msgstr "" - -#: templates/js/translated/stock.js:1625 -msgid "Test Date" -msgstr "" - -#: templates/js/translated/stock.js:1638 -msgid "Test started" -msgstr "" - -#: templates/js/translated/stock.js:1647 -msgid "Test finished" -msgstr "" - -#: templates/js/translated/stock.js:1801 -msgid "Edit Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1821 -msgid "Delete Test Result" -msgstr "" - -#: templates/js/translated/stock.js:1853 -msgid "In production" -msgstr "" - -#: templates/js/translated/stock.js:1857 -msgid "Installed in Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:1865 -msgid "Assigned to Sales Order" -msgstr "" - -#: templates/js/translated/stock.js:1871 -msgid "No stock location set" -msgstr "" - -#: templates/js/translated/stock.js:1927 -msgid "Change stock status" -msgstr "" - -#: templates/js/translated/stock.js:1936 -msgid "Merge stock" -msgstr "" - -#: templates/js/translated/stock.js:1985 -msgid "Delete stock" -msgstr "" - -#: templates/js/translated/stock.js:2038 -msgid "stock items" -msgstr "" - -#: templates/js/translated/stock.js:2043 -msgid "Scan to location" -msgstr "" - -#: templates/js/translated/stock.js:2054 -msgid "Stock Actions" -msgstr "" - -#: templates/js/translated/stock.js:2098 -msgid "Load installed items" -msgstr "" - -#: templates/js/translated/stock.js:2176 -msgid "Stock item is in production" -msgstr "" - -#: templates/js/translated/stock.js:2181 -msgid "Stock item assigned to sales order" -msgstr "" - -#: templates/js/translated/stock.js:2184 -msgid "Stock item assigned to customer" -msgstr "" - -#: templates/js/translated/stock.js:2187 -msgid "Serialized stock item has been allocated" -msgstr "" - -#: templates/js/translated/stock.js:2189 -msgid "Stock item has been fully allocated" -msgstr "" - -#: templates/js/translated/stock.js:2191 -msgid "Stock item has been partially allocated" -msgstr "" - -#: templates/js/translated/stock.js:2194 -msgid "Stock item has been installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:2196 -msgid "Stock item has been consumed by a build order" -msgstr "" - -#: templates/js/translated/stock.js:2200 -msgid "Stock item has expired" -msgstr "" - -#: templates/js/translated/stock.js:2202 -msgid "Stock item will expire soon" -msgstr "" - -#: templates/js/translated/stock.js:2207 -msgid "Stock item has been rejected" -msgstr "" - -#: templates/js/translated/stock.js:2209 -msgid "Stock item is lost" -msgstr "" - -#: templates/js/translated/stock.js:2211 -msgid "Stock item is destroyed" -msgstr "" - -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 -msgid "Depleted" -msgstr "" - -#: templates/js/translated/stock.js:2380 -msgid "Supplier part not specified" -msgstr "" - -#: templates/js/translated/stock.js:2427 -msgid "Stock Value" -msgstr "" - -#: templates/js/translated/stock.js:2555 -msgid "No stock items matching query" -msgstr "" - -#: templates/js/translated/stock.js:2658 -msgid "stock locations" -msgstr "" - -#: templates/js/translated/stock.js:2813 -msgid "Load Sublocations" -msgstr "" - -#: templates/js/translated/stock.js:2930 -msgid "Details" -msgstr "" - -#: templates/js/translated/stock.js:2934 -msgid "No changes" -msgstr "" - -#: templates/js/translated/stock.js:2946 -msgid "Part information unavailable" -msgstr "" - -#: templates/js/translated/stock.js:2968 -msgid "Location no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:2985 -msgid "Build order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3000 -msgid "Purchase order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3017 -msgid "Sales Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3034 -msgid "Return Order no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3053 -msgid "Customer no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3071 -msgid "Stock item no longer exists" -msgstr "" - -#: templates/js/translated/stock.js:3089 -msgid "Added" -msgstr "" - -#: templates/js/translated/stock.js:3097 -msgid "Removed" -msgstr "" - -#: templates/js/translated/stock.js:3169 -msgid "No installed items" -msgstr "" - -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 -msgid "Uninstall Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3280 -msgid "Select stock item to uninstall" -msgstr "" - -#: templates/js/translated/stock.js:3301 -msgid "Install another stock item into this item" -msgstr "" - -#: templates/js/translated/stock.js:3302 -msgid "Stock items can only be installed if they meet the following criteria" -msgstr "" - -#: templates/js/translated/stock.js:3304 -msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:3305 -msgid "The Stock Item is currently available in stock" -msgstr "" - -#: templates/js/translated/stock.js:3306 -msgid "The Stock Item is not already installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:3307 -msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "" - -#: templates/js/translated/stock.js:3320 -msgid "Select part to install" -msgstr "" - -#: templates/js/translated/stock.js:3383 -msgid "Select one or more stock items" -msgstr "" - -#: templates/js/translated/stock.js:3396 -msgid "Selected stock items" -msgstr "" - -#: templates/js/translated/stock.js:3400 -msgid "Change Stock Status" -msgstr "" - -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 -msgid "Has project code" -msgstr "" - -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 -msgid "Order status" -msgstr "" - -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:165 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:169 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:173 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:189 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Has location type" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:333 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:338 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:342 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:343 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:348 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:353 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:358 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:363 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:368 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:372 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:373 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:378 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:383 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:407 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:416 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:421 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:422 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:426 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:430 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:443 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:449 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:463 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:467 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:715 -msgid "Include parts in subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:720 -msgid "Show active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 -msgid "Available stock" -msgstr "" - -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 -msgid "Has Units" -msgstr "" - -#: templates/js/translated/table_filters.js:742 -msgid "Part has defined units" -msgstr "" - -#: templates/js/translated/table_filters.js:746 -msgid "Has IPN" -msgstr "" - -#: templates/js/translated/table_filters.js:747 -msgid "Part has internal part number" -msgstr "" - -#: templates/js/translated/table_filters.js:751 -msgid "In stock" -msgstr "" - -#: templates/js/translated/table_filters.js:759 -msgid "Purchasable" -msgstr "" - -#: templates/js/translated/table_filters.js:771 -msgid "Has stocktake entries" -msgstr "" - -#: templates/js/translated/table_filters.js:841 -msgid "Has Choices" -msgstr "" - -#: templates/js/translated/tables.js:92 -msgid "Display calendar view" -msgstr "" - -#: templates/js/translated/tables.js:102 -msgid "Display list view" -msgstr "" - -#: templates/js/translated/tables.js:112 -msgid "Display tree view" -msgstr "" - -#: templates/js/translated/tables.js:130 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/tables.js:136 -msgid "Collapse all rows" -msgstr "" - -#: templates/js/translated/tables.js:186 -msgid "Export Table Data" -msgstr "" - -#: templates/js/translated/tables.js:190 -msgid "Select File Format" -msgstr "" - -#: templates/js/translated/tables.js:529 -msgid "Loading data" -msgstr "" - -#: templates/js/translated/tables.js:532 -msgid "rows per page" -msgstr "" - -#: templates/js/translated/tables.js:537 -msgid "Showing all rows" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "Showing" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "to" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "of" -msgstr "" - -#: templates/js/translated/tables.js:539 -msgid "rows" -msgstr "" - -#: templates/js/translated/tables.js:546 -msgid "No matching results" -msgstr "" - -#: templates/js/translated/tables.js:549 -msgid "Hide/Show pagination" -msgstr "" - -#: templates/js/translated/tables.js:555 -msgid "Toggle" -msgstr "" - -#: templates/js/translated/tables.js:561 -msgid "All" -msgstr "" - -#: templates/navbar.html:45 -msgid "Buy" -msgstr "" - -#: templates/navbar.html:57 -msgid "Sell" -msgstr "" - -#: templates/navbar.html:121 -msgid "Show Notifications" -msgstr "" - -#: templates/navbar.html:124 -msgid "New Notifications" -msgstr "" - -#: templates/navbar.html:144 users/models.py:201 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:148 -msgid "Logout" -msgstr "" - -#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 -msgid "Save" -msgstr "" - -#: templates/notifications.html:9 -msgid "Show all notifications and history" -msgstr "" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - -#: templates/qr_code.html:11 -msgid "QR data not provided" -msgstr "" - -#: templates/registration/logged_out.html:7 -msgid "You were logged out successfully." -msgstr "" - -#: templates/registration/logged_out.html:9 -msgid "Log in again" -msgstr "" - -#: templates/search.html:9 -msgid "Show full search results" -msgstr "" - -#: templates/search.html:12 -msgid "Clear search" -msgstr "" - -#: templates/search.html:15 -msgid "Close search menu" -msgstr "" - -#: templates/socialaccount/authentication_error.html:5 -msgid "Social Network Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:8 -msgid "Account Login Failure" -msgstr "" - -#: templates/socialaccount/authentication_error.html:11 -msgid "An error occurred while attempting to login via your social network account." -msgstr "" - -#: templates/socialaccount/authentication_error.html:13 -msgid "Contact your system administrator for further information." -msgstr "" - -#: templates/socialaccount/login.html:13 -#, python-format -msgid "Connect %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:15 -#, python-format -msgid "You are about to connect a new third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:17 -#, python-format -msgid "Sign In Via %(provider)s" -msgstr "" - -#: templates/socialaccount/login.html:19 -#, python-format -msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "" - -#: templates/socialaccount/login.html:24 -msgid "Continue" -msgstr "" - -#: templates/socialaccount/login.html:29 -msgid "Invalid SSO Provider" -msgstr "" - -#: templates/socialaccount/login.html:31 -msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "" - -#: templates/socialaccount/signup.html:11 -#, python-format -msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" - -#: templates/socialaccount/signup.html:13 -msgid "As a final step, please complete the following form" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:26 -msgid "Provider has not been configured" -msgstr "" - -#: templates/socialaccount/snippets/provider_list.html:35 -msgid "No SSO providers have been configured" -msgstr "" - -#: templates/stats.html:13 -msgid "Instance Name" -msgstr "" - -#: templates/stats.html:18 -msgid "Database" -msgstr "" - -#: templates/stats.html:26 -msgid "Server is running in debug mode" -msgstr "" - -#: templates/stats.html:33 -msgid "Docker Mode" -msgstr "" - -#: templates/stats.html:34 -msgid "Server is deployed using docker" -msgstr "" - -#: templates/stats.html:39 -msgid "Plugin Support" -msgstr "" - -#: templates/stats.html:43 -msgid "Plugin support enabled" -msgstr "" - -#: templates/stats.html:45 -msgid "Plugin support disabled" -msgstr "" - -#: templates/stats.html:52 -msgid "Server status" -msgstr "" - -#: templates/stats.html:55 -msgid "Healthy" -msgstr "" - -#: templates/stats.html:57 -msgid "Issues detected" -msgstr "" - -#: templates/stats.html:64 -msgid "Background Worker" -msgstr "" - -#: templates/stats.html:67 -msgid "Background worker not running" -msgstr "" - -#: templates/stats.html:75 -msgid "Email Settings" -msgstr "" - -#: templates/stats.html:78 -msgid "Email settings not configured" -msgstr "" - -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - -#: templates/yesnolabel.html:4 -msgid "Yes" -msgstr "" - -#: templates/yesnolabel.html:6 -msgid "No" -msgstr "" - -#: users/admin.py:104 -msgid "Users" -msgstr "" - -#: users/admin.py:105 -msgid "Select which users are assigned to this group" -msgstr "" - -#: users/admin.py:249 -msgid "The following users are members of multiple groups" -msgstr "" - -#: users/admin.py:283 -msgid "Personal info" -msgstr "" - -#: users/admin.py:285 -msgid "Permissions" -msgstr "" - -#: users/admin.py:288 -msgid "Important dates" -msgstr "" - -#: users/authentication.py:29 users/models.py:138 -msgid "Token has been revoked" -msgstr "" - -#: users/authentication.py:32 -msgid "Token has expired" -msgstr "" - -#: users/models.py:81 -msgid "API Token" -msgstr "" - -#: users/models.py:82 -msgid "API Tokens" -msgstr "" - -#: users/models.py:118 -msgid "Token Name" -msgstr "" - -#: users/models.py:119 -msgid "Custom token name" -msgstr "" - -#: users/models.py:125 -msgid "Token expiry date" -msgstr "" - -#: users/models.py:133 -msgid "Last Seen" -msgstr "" - -#: users/models.py:134 -msgid "Last time the token was used" -msgstr "" - -#: users/models.py:138 -msgid "Revoked" -msgstr "" - -#: users/models.py:379 -msgid "Permission set" -msgstr "" - -#: users/models.py:388 -msgid "Group" -msgstr "" - -#: users/models.py:392 -msgid "View" -msgstr "" - -#: users/models.py:392 -msgid "Permission to view items" -msgstr "" - -#: users/models.py:396 -msgid "Permission to add items" -msgstr "" - -#: users/models.py:400 -msgid "Change" -msgstr "" - -#: users/models.py:402 -msgid "Permissions to edit items" -msgstr "" - -#: users/models.py:408 -msgid "Permission to delete items" -msgstr "" - diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index c1dcb07e7e1d..0dd2fb4c1b49 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 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" @@ -48,38 +48,34 @@ msgstr "Số lượng cung cấp không hợp lệ" msgid "Invalid quantity supplied ({exc})" msgstr "Số lượng cung cấp không hợp lệ ({exc})" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "Chi tiết lỗi có thể được tìm thấy trong bảng quản trị" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "Nhập ngày" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "Ghi chú" @@ -92,270 +88,250 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu" msgid "Provided value does not match required pattern: " msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "Nhập mật khẩu" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "Nhập mật khẩu mới" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "Xác nhận mật khẩu" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "Xác nhận mật khẩu mới" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "Mật khẩu cũ" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "Email (nhắc lại)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "Xác nhận địa chỉ email" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "Bạn phải nhập cùng một email mỗi lần." -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "Địa chỉ email chính đã cung cấp không hợp lệ." -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "Miền email được cung cấp không được phê duyệt." -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "Đăng ký bị vô hiệu hóa." -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "Chuỗi số sê-ri trống" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "Trùng lặp sê-ri" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "Phạm vi nhóm không hợp lệ: {group}" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, 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:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "Thứ tự nhóm không hợp lệ: {group}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "Không tìm thấy số sê-ri" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "Số sê ri duy nhất ({len(serials)}) phải phù hợp số lượng ({expected_quantity})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "Xóa thẻ HTML từ giá trị này" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 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:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 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:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 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:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "Tiếng Bulgaria" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "Tiếng Séc" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "Tiếng Đan Mạch" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "Tiếng Đức" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "Tiếng Hy Lạp" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "Tiếng Anh" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "Tiếng Tây Ban Nha" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "Tiếng Tây Ban Nha (Mê-hi-cô)" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "Tiếng Ba Tư" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "Tiếng Phần Lan" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "Tiếng Pháp" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "Tiếng Do Thái" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "Tiếng Ấn Độ" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "Tiếng Hung-ga-ri" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "Tiếng Ý" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "Tiếng Nhật" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "Tiếng Hàn" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "Tiếng Hà Lan" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "Tiếng Na Uy" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "Tiếng Ba Lan" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "Tiếng Bồ Đào Nha" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "Tiếng Bồ Đào Nha (Brazil)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "Tiếng Nga" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "Tiếng Slo-va-ki-a" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "Tiếng Slô-ven-ni-a" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "Tiếng Serbia" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "Tiếng Thụy Điển" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "Tiếng Thái" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "Tiếng Thổ Nhĩ Kỳ" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "Tiếng Việt" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "Tiếng Trung (Giản thể)" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" @@ -364,310 +340,349 @@ msgstr "Tiếng Trung (Phồn thể)" msgid "[{site_name}] Log in to the app" msgstr "[{site_name}] Đăng nhập vào ứng dụng" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "Siêu dữ liệu phải là đối tượng từ điển của python" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "Phụ trợ siêu dữ liệu" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "Trường siêu dữ liệu JSON, được sử dụng bởi phụ trợ bên ngoài" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "Mẫu được định dạng không thích hợp" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "Khóa định dạng không rõ ràng đã được chỉ định" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "Thiếu khóa định dạng cần thiết" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "Trường tham chiếu không thể rỗng" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "Tham chiếu phải phù hợp với mẫu yêu cầu" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "Số tham chiếu quá lớn" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "Tập tin bị thiếu" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "Thiếu liên kết bên ngoài" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "Đính kèm" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "Chọn file đính kèm" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "Liên kết" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "Liên kết đến URL bên ngoài" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "Bình luận" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "Bình luận tệp tin" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "Người dùng" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "Ngày tải lên" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "Tên tập tin không được để trống" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "Thư mục đính kèm không hợp lệ" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "Tên tập tin chứa ký tự không hợp lệ '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "Tên tệp tin thiếu phần mở rộng" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "Tên của tệp đính kèm này đã tồn tại" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "Lỗi khi đổi tên tệp tin" + +#: InvenTree/models.py:846 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:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "thư mục cha" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Đường dẫn" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "Ghi chú markdown (không bắt buộc)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "Dữ liệu mã vạch" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "Dữ liệu mã vạch của bên thứ ba" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "Dữ liệu băm mã vạch" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 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:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "Tên người dùng" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "Tên" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "Họ" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "Hoạt động" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "Bạn không có quyền thay đổi vai trò của người dùng này." -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "Chỉ có siêu người dùng là có thể tạo người dùng mới" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "Tên tập tin" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "Tập tin dữ liệu" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "Chọn tệp tin để tải lên" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "Loại tệp tin không được hỗ trợ" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "Tệp tin quá lớn" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "Không tìm thấy cột nào trong tệp tin" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "Không tìm thấy dòng nào trong tệp tin" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "Chưa có dữ liệu" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "Chưa cung cấp cột dữ liệu" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Thiếu cột bắt buộc: '{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Nhân bản cột: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "Nhân công chạy ngầm kiểm tra thất bại" @@ -679,27 +694,223 @@ msgstr "Chưa cấu hình dịch vụ gửi email" msgid "InvenTree system health checks failed" msgstr "Kiểm tra tình trạng hệ thống InvenTree thất bại" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Đợi duyệt" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "Đã đặt" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "Hoàn thành" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "Đã hủy" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "Mất" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "Đã trả lại" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "Đang tiến hành" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "Đã chuyển" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "Đồng ý" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "Chú ý cần thiết" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "Bị hư hại" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "Đã hủy" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "Đã từ chối" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "Đã cách ly" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "Mục theo dõi kho cổ điển" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Kho hàng đã được khởi tạo" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "Sửa kho hàng" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "Số sê ri đã được gán" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "Kho đã đếm" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "Kho được thêm thủ công" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "Kho được xóa thủ công" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "Vị trí đã thay đổi" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "Kho hàng đã được cập nhật" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "Đã cài đặt vào bộ phận lắp ráp" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "Di rời khỏi bộ phận lắp ráp" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "Mục thành phần đã cài đặt" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "Mục thành phần đã di rời" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "Tách từ mục cha" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "Tách mục con" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "Kho hàng đã được gộp" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "Đã chuyển đổi sang biến thể" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "Đầu ra đơn đặt bản dựng đã được tạo" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "Đầu ra đơn đặt bản dựng đã hoàn thành" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "Đầu ra đơn đặt bản dựng bị từ chối" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "Tiêu hao bởi đơn đặt bản dựng" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "Vận chyển dựa vào đơn đặt bản dựng" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "Đã nhận dựa vào đơn đặt hàng mua" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "Trả hành dựa vào đơn hàng trả lại" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Gửi đến khách hàng" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "Bị trả lại từ khách hàng" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "Sản xuất" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "Trả lại" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "Sửa chữa" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "Thay thế" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "Hoàn tiền" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "Từ chối" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Không rõ cơ sở dữ liệu" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "Đơn vị vật lý không hợp lệ" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Giá trị hàng hóa dư không thể là số âm" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Hàng hóa dư thừa không thể vượt quá 100%" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "Giá trị không hợp lệ cho hàng hóa dư thừa" @@ -727,105 +938,62 @@ msgstr "Thông tin hệ thống" msgid "About InvenTree" msgstr "Giới thiệu" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "Phiên bản cha" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "Phát hành bởi" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 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:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "Lắp ráp" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "Có sẵn" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -833,922 +1001,711 @@ msgstr "Tạo đơn hàng" #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:55 #: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "Tạo đơn hàng" - -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" +msgid "Build Orders" +msgstr "Tạo đơn hàng" -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "Lựa chọn sai cho bản dựng cha" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 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:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "Phiên bản cha" + +#: build/models.py:200 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:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Nguyên liệu" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:284 +#: build/models.py:222 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:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:293 +#: build/models.py:231 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:298 +#: build/models.py:236 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:302 +#: build/models.py:240 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:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:315 +#: build/models.py:253 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:319 +#: build/models.py:257 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "Ngày tạo" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:344 +#: build/models.py:282 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:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:362 +#: build/models.py:300 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:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:371 +#: build/models.py:309 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:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "Liên kết đến URL bên ngoài" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, 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:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:973 +#: build/models.py:811 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:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 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:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1585 +#: build/models.py:1403 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:1594 +#: build/models.py:1412 #, 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:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 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:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1675 +#: build/models.py:1493 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:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:1761 +#: build/models.py:1579 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:1769 +#: build/models.py:1587 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "Tên sản phẩm" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:184 +#: build/serializers.py:172 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:188 +#: build/serializers.py:176 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:192 +#: build/serializers.py:180 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:203 +#: build/serializers.py:191 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:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:291 +#: build/serializers.py:269 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:294 +#: build/serializers.py:272 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:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:310 +#: build/serializers.py:288 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:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "Địa điểm" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "Danh sách đầu ra bản dựng phải được cung cấp" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "Địa điểm" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:464 +#: build/serializers.py:434 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:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Trạng thái" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:542 +#: build/serializers.py:512 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:654 -msgid "Consume Allocated Stock" -msgstr "" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "Xóa phân kho" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "Trừ số lượng bất kỳ kho nào được phân bổ đến bản dựng này" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:662 +#: build/serializers.py:600 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:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:690 +#: build/serializers.py:628 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:691 +#: build/serializers.py:629 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:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:723 +#: build/serializers.py:653 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:733 +#: build/serializers.py:663 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:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:739 +#: build/serializers.py:669 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:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Kho được yêu cầu chưa được phân bổ hết không gian" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:755 +#: build/serializers.py:685 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:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Đơn đặt bản dựng có đầu ra chưa hoàn thiện" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:836 +#: build/serializers.py:752 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:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:886 +#: build/serializers.py:802 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:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:955 +#: build/serializers.py:871 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:962 +#: build/serializers.py:878 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:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1049 +#: build/serializers.py:965 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:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1058 +#: build/serializers.py:974 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:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1064 +#: build/serializers.py:980 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:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1076 +#: build/serializers.py:992 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:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "Mã số nhà sản xuất" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "Tên địa điểm" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "Đóng gói" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "ID sản phẩm" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "IPN sản phẩm" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "Mô tả sản phẩm" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "Số sê-ri" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "Số lượng sẵn có" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "Có thể theo dõi" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "Cho phép biến thể" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bật đơn hàng" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "Đợi duyệt" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "Sản xuất" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "Đã hủy" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "Hoàn thành" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "Kho được yêu cầu cho đặt hàng bản dựng" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "Đơn đặt bản dựng quá hạn" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" @@ -1764,8 +1721,8 @@ msgstr "Ảnh thu nhỏ sản phẩm" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "Chức năng mã vạch" @@ -1776,7 +1733,7 @@ msgstr "Chức năng mã vạch" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "Hiển thị mã QR" @@ -1787,9 +1744,9 @@ msgstr "Hiển thị mã QR" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "Gỡ mã vạch" @@ -1800,7 +1757,7 @@ msgstr "Gỡ mã vạch" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "Liên kết mã vạch" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "Sửa bản dựng" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "Nhân bản bản dựng" +msgid "Cancel Build" +msgstr "Hủy bản dựng" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "" +msgid "Duplicate Build" +msgstr "Nhân bản bản dựng" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "Hủy bản dựng" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "Xóa bản dựng" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "Bản dựng hoàn thiện" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "Mô tả bản dựng" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Không có đầu ra bản dựng đã được tạo cho đơn đặt bản dựng này" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "Đơn đặt bản dựng đã được đánh dấu hoàn thành" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Đơn đặt bản dựng không thể hoàn thiện bởi vì những đầu ra nổi bật còn tồn tại" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "Kho không được phân bổ đầy đủ với yêu cầu bản dựng này" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "Ngày mục tiêu" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "Bản dựng đã đến hạn vào %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "Quá hạn" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "Đầu ra hoàn thiện" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Đơn đặt hàng" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "Phát hành bởi" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" msgstr "Độ ưu tiên" -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "" - -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "" - -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "Nguồn kho" msgid "Stock can be taken from any available location." msgstr "Kho có thể được lấy từ bất kỳ địa điểm nào." -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "Đích đến" @@ -1981,23 +1924,23 @@ msgstr "Địa điểm đích chưa được xác định" msgid "Allocated Parts" msgstr "Sản phẩm đã phân bổ" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "Hàng loạt" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "Đã tạo" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "Chưa đặt ngày mục tiêu" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Đã hoàn thành" @@ -2015,13 +1958,13 @@ msgstr "Đã hoàn thành" msgid "Build not complete" msgstr "Xây dựng chưa hoàn thiện" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "Đơn đặt bản dựng con" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "" +msgid "Allocate Stock to Build" +msgstr "Phân bổ kho đến bản dựng" #: build/templates/build/detail.html:181 msgid "Deallocate stock" @@ -2043,7 +1986,7 @@ msgstr "Tự động phân bổ" msgid "Manually allocate stock to build" msgstr "Chỉ định kho thủ công đến bản dựng" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "Chỉ định kho" @@ -2072,19 +2015,15 @@ msgstr "Tạo đầu ra bản dựng mới" msgid "New Build Output" msgstr "Đầu ra bản dựng mới" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Kho tiêu thụ" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Đầu ra bản dựng hoàn thiện" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Tập tin đính kèm" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Ghi chép bản dựng" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "Tạo đơn đặt bản dựng" @@ -2120,57 +2059,10 @@ msgstr "Tạo đơn đặt bản dựng" msgid "Build Order Details" msgstr "Chi tiết đơn đặt bản dựng" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "Mục dòng" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "Đầu ra chưa hoàn thiện" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "Không phần mở rộng" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "Tập tin {name.title()}" msgid "Select {name} file to upload" msgstr "Chọn tập tin {name} để tải lên" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "Đã cập nhật" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "Nhãn thời gian của lần cập cuối cùng" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "Mã dự án duy nhất" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:166 +#: common/models.py:146 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:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "Khóa thiết lập (phải duy nhất - phân biệt hoa thường)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "Không có nhóm" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "Tên miền rỗng là không được phép." + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "Tên miền không hợp lệ: {domain}" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "Không phần mở rộng" + +#: common/models.py:1259 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "Một thiết lập đã bị thay đổi yêu cầu khởi động lại máy chủ" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "Sử dụng tên thực thể trên thanh tiêu đề" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "Chỉ hiển thị cửa sổ `giới thiệu` với siêu người dùng" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Tên công ty" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "URL cơ sở" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Mức độ thường xuyên để cập nhật tỉ giá hối đoái (điền 0 để tắt)" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "ngày" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "Phần mở rộng cập nhật tiền tệ được sử dụng" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "Cho phép tải ảnh và tệp tin từ xa theo URL bên ngoài" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "Kích thước tải xuống tối đa với hình ảnh từ xa" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Cho phép ghi đè user-agent được dùng để tải về hình ảnh và tệp tin từ xa theo URL bên ngoài (để trống nghĩa là dùng mặc định)" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "Yêu cầu xác nhận" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "Yêu cầu người dùng xác nhận rõ ràng với một số chức năng nhất định." -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "Cấp độ cây" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Độ sâu cây mặc định cho màn hình cây. Cấp độ sâu hơn sẽ sử dụng kỹ thuật tải chậm nếu cần thiết." -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "Mức độ thường xuyên để kiểm tra bản cập nhật (điền 0 để tắt)" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "Bật tính năng sao lưu tự động cơ sở dữ liệu và tệp tin đa phương tiện" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "Xác định số ngày giữa các kỳ sao lưu tự động" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "Kết quả tác vụ chạy ngầm sẽ bị xóa sau số ngày được chỉ định" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "Nhật ký lỗi sẽ bị xóa sau số ngày được chỉ định" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "Thông báo sẽ bị xóa sau số ngày được chỉ định" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "Bật hỗ trợ máy quét mã vạch trong giao diện web" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "Cho phép quét mã vạch qua webcam bên trong trình duyệt" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "Mẫu dùng nhanh phổ biến dành cho tìm IPN sản phẩm" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "Cho phép nhiều sản phẩm dùng IPN giống nhau" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "Cho phép đổi giá trị IPN khi sửa một sản phẩm" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "Sao chép dữ liệu BOM mặc định khi nhân bản 1 sản phẩm" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "Sao chép dữ liệu tham số mặc định khi nhân bản 1 sản phẩm" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "Sao chép dữ liệu kiểm thử mặc định khi nhân bản 1 sản phẩm" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "Sao chéo mẫu tham số danh mục khi tạo 1 sản phẩm" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mẫu" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "Lắp ráp" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Thành phần" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "Sản phẩm có thể được sử dụng mặc định như thành phần phụ" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "Có thể mua" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Có thể bán" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "Có thể theo dõi" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Ảo" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "Hiển thị Nhập liệu trong khung xem" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "Hiển thị đồ thuật nhập dữ liệu trong một số khung nhìn sản phẩm" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "Hiện sản phẩm liên quan cho 1 sản phẩm" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "Cho phép tạo tồn kho ban đầu khi thêm 1 sản phẩm mới" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Cho phép tạo dữ liệu nhà cung cấp ban đầu khi thêm 1 sản phẩm mới" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "Biểu tượng mặc định của danh mục sản phẩm" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "Biểu tượng mặc định của danh mục sản phẩm (để trống nghĩa là không có biểu tượng)" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "Nếu đơn vị được cung cấp, giá trị tham số phải phù hợp với các đơn vị xác định" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối thiểu cần hiển thị khi tạo dữ liệu giá" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối đa cần hiển thị khi tạo dữ liệu giá" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Bao gồm giá phá vỡ cả nhà cung cấp trong tính toán giá tổng thể" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Giá đơn hàng đặt mua trước đó ghi đè giá phá vỡ của nhà cung cấp" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Dùng giá bán từ dữ liệu kho nhập vào thủ công đối với bộ tính toán giá bán" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Loại trừ hàng hóa trong kho cũ hơn số ngày ngày từ bảng tính giá bán" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "Bao gồm giá biến thể trong bộ tính toán giá tổng thể" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "Chỉ sử dụng sản phẩm biến thể hoạt động để tính toán giá bán biến thể" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "Số ngày trước khi giá sản phẩm được tự động cập nhật" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "Nếu khả dụng, giá nội bộ ghi đè tính toán khoảng giá" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "Bật chức năng in tem nhãn từ giao diện web" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Độ phân giải DPI khi tạo tệp hình ảnh để cung cấp cho plugin in ấn tem nhãn" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "Tạo báo cáo trong chế độ gỡ lỗi (đầu ra HTML)" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "Khổ giấy" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "Kích thước trang mặc định cho báo cáo PDF" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "Bật báo cáo kiểm thử" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "Cho phép tạo báo cáo kiểm thử" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "Đính kèm báo cáo kiểm thử" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Khi in một báo cáo kiểm thử, đính kèm một bản sao của báo cáo kiểm thử với hàng trong kho đã được kết hợp" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "Số sê ri cho hàng trong kho phải là duy nhất trong toàn hệ thống" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "Tự động điền số sê ri" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "Tự động điền số sê ri vào biểu mẫu" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "Mẫu tạo mã theo lô mặc định cho hàng trong kho" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "Số ngày hàng trong kho được xác định là cũ trước khi quá hạn" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "Cho phép xây dựng với kho hàng quá hạn" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "Bật chức năng kiểm soát sở hữu kho với địa điểm và hàng trong kho" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "Biểu tượng địa điểm kho hàng mặc định (trống nghĩa là không có biểu tượng)" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "Hiển thị hàng trong kho đã được lắp đặt trên bảng kho" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt bản dựng" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "Bật chức năng đơn hàng trả lại trong giao diện người dùng" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "Cho phép sửa đơn hàng trả lại sau khi đã hoàn thành rồi" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "Mẫu bắt buộc để tạo trường tham chiếu đơn đặt hàng" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "Cho phép tạo vận chuyển mặc định với đơn đặt hàng" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt hàng sau khi đã vận chuyển hoặc hoàn thành" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt mua" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt mua sau khi đã vận chuyển hoặc hoàn thành" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "Bật chức năng quên mật khẩu trong trang đăng nhập" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "Cho phép người dùng tự đăng ký tại trang đăng nhập" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "Bật SSO" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Cho phép người dùng tự đăng ký SSO tại trang đăng nhập" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "Yêu cầu email" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "Yêu cầu người dùng cung cấp email để đăng ký" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "Tự động điền thông tin chi tiết từ dữ liệu tài khoản SSO" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần thư điện tử của họ" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần mật khẩu của họ" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Cấm đăng ký với 1 số tên miền cụ thể (dấu phẩy ngăn cách, bắt đầu với dấu @)" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "Nhóm được gán cho người dùng mới khi đăng ký" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "Người dùng phải sử dụng bảo mật đa nhân tố." -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Kiểm tra toàn bộ phần mở rộng đã được cài đặt khi khởi dộng - bật trong môi trường ảo hóa" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "Bật phần mở rộng để tích hợp thanh định hướng" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "Bật phẩn mở rộng để chạy các tác vụ theo lịch" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "Bật phần mở rộng để trả lời sự kiện bên trong" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "Bật mã dự án" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "Bật mã dự án để theo dõi dự án" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "Chức năng kiểm kê" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Bật chức năng kiểm kê theo mức độ ghi nhận kho và tính toán giá trị kho" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Loại trừ hàng trong kho thuộc địa điểm bên ngoài ra khỏi tính toán kiểm kê" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Số ngày giữa ghi chép kiểm kê tự động (đặt không để tắt)" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "Khoảng thời gian xóa báo cáo" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Báo cáo kiểm kê sẽ bị xóa sau số ngày xác định" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "Khóa thiết lập (phải duy nhất - phân biệt hoa thường" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Ẩn sản phẩm bị tắt trong kết quả trình bày tại trang chủ" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "Hiện sản phẩm đã đăng ký" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "Hiện sản phẩm đã đăng ký trên trang chủ" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "Hiện danh mục đã đăng ký" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "Hiện danh mục sản phẩm đã đăng ký trên trang chủ" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "Hiện BOM chờ xác thực tại trang chủ" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "Hiện thay đổi kho hàng gần đây" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "Hiện hàng trong kho được thay đổi gần nhất trên trang chủ" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "Hiển thị hàng còn ít" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "Hiển thị hàng hóa còn ít tại trang chủ" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "Hiển thị hết hàng" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "Hiển thị hàng hóa đã bán hết tại trang chủ" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "Hiển thị hàng cần thiết" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "Hiện hàng trong kho cần thiết cho xây dựng tại trang chủ" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "Bán kho quá hạn" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "Hiển thị hàng hóa đã quá hạn trên trang chủ" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "Hiện kho hàng ế" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "Hiện hàng trong kho bị ế trên trang chủ" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "Hiện bản dựng chờ xử lý" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "Hiện bản dựng chờ xử lý trên trang chủ" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "Hiện bản dựng quá hạn" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "Hiện bản dựng quá hạn trên trang chủ" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "Hiện PO nổi bật" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "Hiện PO nổi bật trên trang chủ" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "Hiện PO quá hạn" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "Hiện đơn mua hàng quá hạn trên trang chủ" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "Hiện đơn hàng vận chuyển nổi bật" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "Hiện đơn hàng vận chuyển nổi bật tại trang chủ" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "Hiện đơn vận chuyển quá hạn" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "Hiện đơn vận chuyển quá hạn trên trang chủ" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "Hiện đơn vận chuyển chờ xử lý" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "Hiện đơn vận chuyển chờ xử lý trên trang chủ" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "Hiện tin tức" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "Hiện tin tức trên trang chủ" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "Hiển thị nhãn cùng dòng" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Hiển thị nhãn PDF trong trình duyệt, thay vì tải về dạng tệp tin" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "Máy in tem nhãn mặc định" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "Cấu hình máy in tem nhãn nào được chọn mặc định" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "Hiển thị báo cáo cùng hàng" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Hiện báo cáo PDF trong trình duyệt, thay vì tải về dạng tệp tin" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "Tìm sản phẩm" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "Hiện hàng hóa trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "Tìm sản phẩm nhà cung cấp" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "Hiện sản phẩm nhà cung cấp trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "Tìm sản phẩm nhà sản xuất" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "Hiện sản phẩm nhà sản xuất trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "Loại trừ sản phẩm ngưng hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "Tìm kiếm danh mục" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "Hiện danh mục sản phẩm trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "Tìm kiếm kho" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "Hiện hàng hóa ở kho trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "Ẩn hàng hóa trong kho không có sẵn" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "Không bao gồm hàng hóa trong kho mà không sẵn sàng từ màn hình xem trước tìm kiếm" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "Tìm kiếm vị trí" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "Hiện vị trí kho hàng trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "Tìm kiếm công ty" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "Hiện công ty trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "Tìm kiếm đặt hàng xây dựng" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "Hiện đơn đặt xây dựng trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "Tìm kiếm đơn đặt mua" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "Hiện đơn đặt mua trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "Loại trừ đơn đặt mua không hoạt động" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "Loại trừ đơn đặt mua không hoạt động ra khỏi cửa sổ xem trước tìm kiếm" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "Tìm đơn đặt hàng người mua" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "Hiện đơn đặt hàng người mua trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "Loại trừ đơn đặt hàng người mua không hoạt động" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "Không bao gồm đơn đặt hàng người mua không hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "Tìm kiếm đơn hàng trả lại" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "Hiện đơn hàng trả lại trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "Loại trừ đơn hàng trả lại không hoạt động" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "Không bao gồm đơn hàng trả lại không hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "Kết quả xem trước tìm kiếm" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "Số kết quả cần hiển thị trong từng phần của cửa sổ xem trước tìm kiếm" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "Tìm kiếm biểu thức" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "Bật tìm kiếm biểu thức chính quy trong câu truy vấn tìm kiếm" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "Tìm phù hợp toàn bộ chữ" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "Truy vấn tìm trả về kết quả phù hợp toàn bộ chữ" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "Hiện số lượng trong biểu mẫu" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "Hiển thị số lượng sản phẩm có sẵn trong một số biểu mẫu" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "Phím escape để đóng mẫu biểu" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "Sử dụng phím escape để đóng mẫu biểu hộp thoại" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "Cố định điều hướng" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "Vị trí thành điều hướng là cố định trên cùng màn hình" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "Định dạng ngày" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "Định dạng ưa chuộng khi hiển thị ngày" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Lập lịch sản phẩm" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "Hiển thị thông tin lịch sản phẩm" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Kiểm kê sản phẩm" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Hiển thị thông tin kiểm kê sản phẩm (nếu chức năng kiểm kê được bật)" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "Độ dài chuỗi trong bảng" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "Giới hạn độ dài tối đa cho chuỗi hiển thị trong kiểu xem bảng biểu" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "Mẫu nhãn sản phẩm mặc định" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "Mẫu nhãn sản phẩm mặc định được chọn tự động" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "Mẫu hàng hóa trong khi mặc định" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "Mẫu nhãn hàng hóa trong kho tự động được chọn" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "Mẫu nhãn vị trí kho mặc định" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "Mẫu nhãn vị trí kho được chọn tự động" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "Nhận báo cáo lỗi" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "Nhận thông báo khi có lỗi hệ thống" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "Người dùng" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "Giá" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "Hoạt động" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "Bí mật" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "Máy chủ" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "Đầu mục" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "Thân" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:2878 +#: common/models.py:2882 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:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:2884 +#: common/models.py:2888 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:3010 +#: common/models.py:3014 msgid "Id" msgstr "Mã" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "Liên kết" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "Đã công bố" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Tác giả" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "Đọc" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Hình ảnh" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 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:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "Định nghĩa đơn vị" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "Đính kèm" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "Tập tin bị thiếu" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "Thiếu liên kết bên ngoài" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "Chọn file đính kèm" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "Bình luận" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "{verbose_name} đã bị hủy" msgid "A order that is assigned to you was canceled" msgstr "Một đơn đặt từng được phân công cho bạn đã bị hủy bỏ" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "Mục đã nhận" @@ -4000,102 +3752,65 @@ msgstr "Hàng đã nhận theo đơn hàng trả lại" msgid "Error raised by plugin" msgstr "Lỗi được thông báo bởi phần mở rộng" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:414 -msgid "Function" -msgstr "Chức năng" - -#: common/serializers.py:414 -msgid "Function name" -msgstr "Tên chức năng" - -#: common/serializers.py:416 -msgid "Arguments" -msgstr "Đối số" - -#: common/serializers.py:416 -msgid "Task arguments" -msgstr "Đối số công việc" - -#: common/serializers.py:419 -msgid "Keyword Arguments" -msgstr "Đối số từ khóa" - -#: common/serializers.py:419 -msgid "Task keyword arguments" -msgstr "Đối số từ khóa công việc" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "Tên tập tin" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" +#: common/serializers.py:372 +msgid "Function" +msgstr "Chức năng" -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" +#: common/serializers.py:372 +msgid "Function name" +msgstr "Tên chức năng" -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" +#: common/serializers.py:374 +msgid "Arguments" +msgstr "Đối số" -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" +#: common/serializers.py:374 +msgid "Task arguments" +msgstr "Đối số công việc" -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "Tên miền rỗng là không được phép." +#: common/serializers.py:377 +msgid "Keyword Arguments" +msgstr "Đối số từ khóa" -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "Tên miền không hợp lệ: {domain}" +#: common/serializers.py:377 +msgid "Task keyword arguments" +msgstr "Đối số từ khóa công việc" #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 @@ -4135,435 +3850,406 @@ msgstr "Hàng hóa đã được nhập vào" msgid "Previous Step" msgstr "Bước trước" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "Doanh nghiêp" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "Doanh nghiệp" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "Mô tả công ty" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "Mô tả của công ty" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "Trang web" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "URL trang web của công ty" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "Số điện thoại" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "Số điện thoại liên hệ" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "Địa chỉ email liên hệ" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Liên hệ" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "Đầu mối liên hệ" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "Liên kết đến thông tin công ty ngoài" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" -msgstr "" +#: company/models.py:165 +msgid "is customer" +msgstr "là khách hàng" -#: company/models.py:169 +#: company/models.py:166 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:174 -msgid "Is supplier" -msgstr "" +#: company/models.py:171 +msgid "is supplier" +msgstr "là nhà cung cấp" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "Bạn có mua hàng từ công ty này?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "là nhà sản xuất" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "Công ty này có sản xuất sản phẩm?" -#: company/models.py:189 +#: company/models.py:186 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:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "Địa chỉ" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "Địa chỉ" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "Doanh nghiêp" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "Chọn doanh nghiệp" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "Tiêu đề địa chỉ" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "Tiêu đề mô tả mục địa chỉ" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "Địa chỉ chính" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "Đặt làm địa chỉ chính" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "Dòng 1" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "Địa chỉ dòng 1" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "Dòng 2" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "Địa chỉ dòng 2" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "Mã bưu chính" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "Thành phố/Vùng" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "Mã bưu chính thành phố/vùng" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "Bang/Tỉnh" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "Bang hay tỉnh" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "Quốc gia" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "Địa chỉ quốc gia" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "Ghi chú vận chuyển" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "Ghi chú dành cho chuyển phát nhanh" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "Ghi chú nội bọ chuyển phát nhanh" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "Sản phẩm nhà sản xuất" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Sản phẩm cơ bản" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "Chọn sản phẩm" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "Nhà sản xuất" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "Mã số nhà sản xuất" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "URL cho liên kết sản phẩm của nhà sản xuất bên ngoài" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "Mô tả sản phẩm của nhà sản xuất" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "Sản phẩm nhà sản xuất" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "Tên tham số" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "Giá trị" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "Giá trị tham số" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "Đơn vị" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "Đơn vị tham số" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "Sản phẩm nhà cung cấp" - -#: company/models.py:719 +#: company/models.py:731 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:726 +#: company/models.py:738 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:740 +#: company/models.py:752 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:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Nhà cung cấp" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "Chọn sản phẩm của nhà sản xuất" -#: company/models.py:819 +#: company/models.py:831 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:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "Ghi chú" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "Đóng gói" + +#: company/models.py:864 msgid "Part packaging" msgstr "Đóng gói sản phẩm" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "Số lượng gói" -#: company/models.py:860 +#: company/models.py:871 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:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "nhiều" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "Đặt hàng nhiều" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "Số lượng có sẵn từ nhà cung cấp" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "Sẵn hàng đã được cập nhật" -#: company/models.py:899 +#: company/models.py:910 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:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 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:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "Còn hàng" @@ -4571,8 +4257,8 @@ msgstr "Còn hàng" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Không hoạt động" @@ -4607,11 +4293,11 @@ msgstr "Xóa doanh nghiệp" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "Ảnh sản phẩm" @@ -4630,17 +4316,17 @@ msgstr "Tải hình ảnh từ URL" msgid "Delete image" msgstr "Xóa ảnh" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "Khách hàng" @@ -4648,12 +4334,19 @@ msgstr "Khách hàng" msgid "Uses default currency" msgstr "Dùng tiền mặc định" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "Địa chỉ" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "Điện thoại" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "Xoá hình ảnh" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "Xóa hình ảnh gắn với công ty này" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Xóa" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "Tải hình lên" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "Tải ảnh xuống" @@ -4690,7 +4383,7 @@ msgstr "Thêm mới sản phẩm nhà cung cấp" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "Sản phẩm nhà cung cấp mới" @@ -4703,7 +4396,7 @@ msgstr "Sản phẩm nhà sản xuất" msgid "Create new manufacturer part" msgstr "Tạo sản phẩm nhà sản xuất mới" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "Sản phẩm nhà sản xuất mới" @@ -4717,7 +4410,7 @@ msgstr "Kho nhà cung cấp" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "Đơn đặt hàng mới" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "Nhà sản xuất" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "Đặt mua sản phẩm" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "Xóa sản phẩm của nhà sản xuất" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4838,7 +4530,7 @@ msgstr "Chưa có thông tin nhà sản xuất" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "Nhà cung cấp" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Thông số" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "Tham số mới" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "Thêm thông số" @@ -4887,6 +4575,19 @@ msgstr "Hàng trong kho đã được phân bổ" msgid "Contacts" msgstr "Danh bạ" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "Địa chỉ" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "Sản phẩm nhà cung cấp" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "Chức năng cho sản phẩm nhà cung cấp" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "Đặt hàng sản phẩm" @@ -4928,12 +4629,12 @@ msgstr "Xóa sản phẩm nhà cung cấp" msgid "No supplier information available" msgstr "Chưa có thông tin nhà cung cấp" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "Kho sản phẩm nhà cung cấp" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "Thêm mới hàng trong kho" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Hàng trong kho mới" @@ -4966,33 +4667,29 @@ msgstr "Thông tin giá cả" msgid "Add Price Break" msgstr "Thêm giá phá vỡ" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "Mã QR sản phẩm nhà cung cấp" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "Liên kết mã vạch đến hàng hóa nhà cung cấp" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "Cập nhật độ sẵn sàng sản phẩm" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "Hàng trong kho" @@ -5018,236 +4715,134 @@ msgstr "Khách hàng" msgid "New Customer" msgstr "Khách hàng mới" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "Doanh nghiệp" + #: company/views.py:52 msgid "New Company" msgstr "Doanh nghiệp mới" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "Đã đặt" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "Dữ liệu" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "Hợp lệ" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" +#: label/models.py:120 +msgid "Label name" +msgstr "Tên nhãn" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" +#: label/models.py:128 +msgid "Label description" +msgstr "Mô tả nhãn" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" +#: label/models.py:136 +msgid "Label" +msgstr "Nhãn" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" +#: label/models.py:137 +msgid "Label template file" +msgstr "Tệp mẫu nhãn" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Đã bật" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "Mẫu nhãn đã bật" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "Chiều rộng [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "Chiều rộng nhãn, tính theo mm" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "Chiều cao [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "Chiều cao nhãn, tính theo mm" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "Mẫu tên tệp" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "Mẫu dùng để tạo tên tệp nhãn" -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "Truy vấn bộ lọc (dùng dấu phẩy ngăn cách các cặp key=value)" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "Bộ lọc" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "Mã QR" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "Mã QR" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "Không rõ" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "Tổng tiền" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "Tham chiếu đơn đặt" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "Không tìm thấy đơn đặt mua phù hợp" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Đơn hàng trả lại" @@ -5399,617 +4980,513 @@ msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiề 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:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" -#: order/models.py:310 +#: order/models.py:299 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:324 +#: order/models.py:313 msgid "Created By" msgstr "Tạo bởi" -#: order/models.py:332 +#: order/models.py:321 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:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "Đầu mối liên hệ của đơn đặt này" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:492 +#: order/models.py:466 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:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "nhận bởi" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "Ngày phát hành" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "Ngày đặt hàng đã phát hành" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:571 +#: order/models.py:545 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:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:991 +#: order/models.py:911 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:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "Đơn đặt hàng không thể hoàn thiện vì chưa có sản phẩm nào được chọn" -#: order/models.py:1084 +#: order/models.py:1004 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:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 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:1093 +#: order/models.py:1013 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:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1393 +#: order/models.py:1296 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:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "Ngữ cảnh" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 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:1476 +#: order/models.py:1374 msgid "deleted" msgstr "đã bị xóa" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "Có phải người mua hàng muốn mặt hàng này được tích trữ?" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "Không thể gán sản phẩm ảo vào trong đơn đặt bán hàng" -#: order/models.py:1642 +#: order/models.py:1528 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:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "Đã chuyển" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:1836 +#: order/models.py:1721 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:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:1973 +#: order/models.py:1848 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:1976 +#: order/models.py:1851 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:1979 +#: order/models.py:1854 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:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 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:2001 +#: order/models.py:1876 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:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Vận đơn không phù hợp với đơn bán hàng" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "Dòng" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2148 +#: order/models.py:2009 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:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "Chỉ hàng hóa thêo sêri mới có thể được gán vào đơn hàng trả lại" -#: order/models.py:2392 +#: order/models.py:2216 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:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:2399 +#: order/models.py:2223 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:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:2411 -msgid "Outcome for this line item" -msgstr "Kết quả cho hàng hóa dòng này" - -#: order/models.py:2418 -msgid "Cost associated with return or repair for this line item" -msgstr "Chi phí gắn với hàng trả lại hoặc sửa chữa cho dòng hàng hóa này" - -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" +#: order/models.py:2235 +msgid "Outcome for this line item" +msgstr "Kết quả cho hàng hóa dòng này" -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "Tên nhà cung cấp" +#: order/models.py:2242 +msgid "Cost associated with return or repair for this line item" +msgstr "Chi phí gắn với hàng trả lại hoặc sửa chữa cho dòng hàng hóa này" -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 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:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 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:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "Mã sản phẩm nội bộ" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "Mục dòng không phù hợp với đơn đặt mua" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "Cần điền số nguyên cho sản phẩm có thể theo dõi" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 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:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 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:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "Những số sê ri sau đây đã được phân bổ" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:1758 +#: order/serializers.py:1652 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:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:1790 +#: order/serializers.py:1684 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:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "Mất" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "Đã trả lại" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "Đang tiến hành" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "Trả lại" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "Sửa chữa" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "Thay thế" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "Hoàn tiền" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "Từ chối" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Đơn đặt mua quá hạn" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "Chỉnh sửa đơn đặt" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "Đơn đặt trùng" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "Hủy đơn đặt" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "Đơn đặt trùng" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "Vấn đề đơn hàng" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "Đánh dấu đơn đặt đã hoàn thành" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "Đơn đặt hoàn thành" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "Ảnh thu nhỏ sản phẩm nhà cung cấp" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "Tham chiếu đơn đặt" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "Mô tả đơn đặt" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "Chưa có thông tin nhà cung cấp" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Mục dòng hoàn thành" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Chưa hoàn thành" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Đã cấp" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "Tổng chi phí" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "Không thể tính tổng chi phí" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "Mã QR đơn đặt mua" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "Liên kết mã vạch đến đơn đặt mua" @@ -6184,13 +5661,13 @@ msgstr "Lựa chọn trùng lặp" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Xóa hàng" @@ -6231,6 +5708,15 @@ msgstr "Đơn đặt đã được xử lý. Không thể tải lên tệp tin." msgid "Step %(step)s of %(count)s" msgstr "Bước %(step)s của %(count)s" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "Mục dòng" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Kho đã nhận hàng" @@ -6243,7 +5729,7 @@ msgstr "Hàng hóa đặt mua" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Thêm mục dòng" @@ -6291,31 +5777,31 @@ msgstr "In báo cáo đơn hàng trả lại" msgid "Print packing list" msgstr "In danh sách đóng gói" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "Mã khách hàng" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "Tổng chi phí" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "Mã QR đơn hàng trả lại" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "Chi tiết đơn đặt" msgid "Print sales order report" msgstr "In báo cáo đơn hàng bán" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "Mục vận chuyển" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "Hoàn thành đơn bán hàng" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "Chưa phân bổ đầy đủ đơn bán hàng" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "Vận chuyển đang chờ xử lý" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Chức năng" @@ -6401,21 +5881,35 @@ msgstr "Cập nhật {part} giá đơn vị đến {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Cập nhật {part} giá đơn vị đến {price} và số lượng đến {qty}" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "ID sản phẩm" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "Tên sản phẩm" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "Mô tả sản phẩm" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "Phiên bản" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Từ khóa" @@ -6423,16 +5917,15 @@ msgstr "Từ khóa" msgid "Part Image" msgstr "Ảnh sản phẩm" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "ID danh mục" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "Tên danh mục" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "ID vị trí mặc định" @@ -6440,11 +5933,11 @@ msgstr "ID vị trí mặc định" msgid "Default Supplier ID" msgstr "ID nhà cung ứng mặc định" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Biến thể của" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -6452,187 +5945,165 @@ msgstr "Kho tối thiểu" msgid "Used In" msgstr "Sử dụng trong" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "Đang dựng" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID cha" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "Tên cha" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "Đưỡng dẫn danh mục" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Nguyên liệu" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "Cấp độ BOM" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "ID hàng hóa BOM" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "IPN cha" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "IPN sản phẩm" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "Đơn đặt mua vào" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "Đơn hàng bán ra" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "Kho sản xuất bởi Đơn đặt bản dựng" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "Kho được yêu cầu cho đơn đặt bản dựng" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "Hợp lệ" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" msgstr "Tùy chọn này phải được chọn" -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "Danh mục" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Điểm bán mặc định" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Tổng số lượng" @@ -6641,1148 +6112,1024 @@ msgstr "Tổng số lượng" msgid "Input quantity for price calculation" msgstr "Số lượng đầu ra cho tính toán giá bán" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Danh mục sản phẩm" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Danh mục sản phẩm" -#: part/models.py:108 +#: part/models.py:102 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:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Cấu trúc" -#: part/models.py:115 +#: part/models.py:109 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:124 +#: part/models.py:118 msgid "Default keywords" msgstr "Từ khóa mặc định" -#: part/models.py:125 +#: part/models.py:119 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:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" -#: part/models.py:178 +#: part/models.py:148 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:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "Lựa chọn sai cho sản phẩm cha" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, 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:632 +#: part/models.py:551 #, 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:695 +#: part/models.py:616 #, 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:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 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:917 +#: part/models.py:801 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:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 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:951 +#: part/models.py:826 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:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:989 +#: part/models.py:861 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:999 +#: part/models.py:871 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:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:1015 +#: part/models.py:887 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:1025 +#: part/models.py:897 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1040 +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "Mã sản phẩm nội bộ" + +#: part/models.py:912 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:1050 -msgid "Is this part a revision of another part?" -msgstr "" - -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "" - -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Nhà cung ứng mặc định" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "Nhà cung ứng sản phẩm mặc định" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1130 +#: part/models.py:992 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:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1155 +#: part/models.py:1017 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:1161 +#: part/models.py:1023 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:1167 +#: part/models.py:1029 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:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 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:1185 +#: part/models.py:1041 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:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 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:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1247 +#: part/models.py:1097 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:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "Kiểm kê cuối cùng" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3116 +#: part/models.py:2994 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:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3154 +#: part/models.py:3032 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:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3161 +#: part/models.py:3039 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:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3168 +#: part/models.py:3046 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:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3175 +#: part/models.py:3053 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:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3182 +#: part/models.py:3060 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:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3189 +#: part/models.py:3067 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:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3196 +#: part/models.py:3074 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:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3231 +#: part/models.py:3109 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:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3277 +#: part/models.py:3155 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:3285 +#: part/models.py:3163 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:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Ngày" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "Ghi chú bổ sung" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "Người dùng đã thực hiện đợt kiểm kê này" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3315 +#: part/models.py:3193 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:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3322 +#: part/models.py:3200 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:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Báo cáo" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "Tệp báo cáo kiểm kê (được sinh nội bộ)" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Bộ đếm sản phẩm" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "Số sản phẩm đã được bao quát bởi kiểm kê" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "Người dùng đã yêu cầu báo cáo kiểm kê này" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "Lựa chọn phải duy nhất" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "Chỉ có thể tạo mẫu kiểm thử cho sản phẩm có thể theo dõi" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "Đã bật" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3635 +#: part/models.py:3506 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:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3642 +#: part/models.py:3513 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:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "Lựa chọn" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "Lựa chọn phải duy nhất" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "Tên tham số" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "Mô tả tham số" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Ô lựa chọn" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: part/models.py:3793 +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "Lựa chọn" + +#: part/models.py:3645 msgid "Valid choices for this parameter (comma-separated)" msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu phẩy)" -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "" - -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "" - -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "Sản phẩm cha" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Mẫu tham số" -#: part/models.py:3952 +#: part/models.py:3778 +msgid "Data" +msgstr "Dữ liệu" + +#: part/models.py:3779 msgid "Parameter Value" msgstr "Giá trị tham số" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "" - -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Giá trị mặc định" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "Tên hoặc mã sản phẩm" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "Giá trị mã sản phẩm duy nhất" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "Giá trị IPN sản phẩm" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "Cấp độ" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "Cấp độ BOM" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4266 +#: part/models.py:4048 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:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Dư thừa" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Số lượng bản dựng lãng phí ước tính (tuyệt đối hoặc phần trăm)" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4308 +#: part/models.py:4090 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:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "Cho phép biến thể" + +#: part/models.py:4096 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:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 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:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4572 +#: part/models.py:4354 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:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4637 +#: part/models.py:4419 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:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 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:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "Chưa chọn sản phẩm" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "Chọn danh mục" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:480 +#: part/serializers.py:451 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:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:487 +#: part/serializers.py:458 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:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:514 +#: part/serializers.py:480 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:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:522 +#: part/serializers.py:488 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:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:555 +#: part/serializers.py:516 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:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:572 +#: part/serializers.py:533 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:581 +#: part/serializers.py:542 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:592 +#: part/serializers.py:553 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:599 +#: part/serializers.py:560 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:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:942 +#: part/serializers.py:857 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:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:949 +#: part/serializers.py:864 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:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:956 +#: part/serializers.py:871 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:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:965 +#: part/serializers.py:880 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:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:971 +#: part/serializers.py:886 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:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Hạn chế báo cáo kiểm kê với sản phẩm riêng biệt và sản phẩm biến thể bất kỳ" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Hạn chế báo cáo kiểm kê với danh mục sản phẩm riêng biệt và danh mục con bất kỳ" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Hạn chế báo cáo kiểm kê với vị trí kho riêng biệt và vị trí con bất kỳ" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "Ngoại trừ kho bên ngoài" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "Loại trừ hàng trong kho của vị trí bên ngoài" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "Tạo báo cáo" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "Tạo tệp báo cáo chứa dữ liệu kiểm kê đã tính toán" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "Cập nhật sản phẩm" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "Cập nhật sản phẩm cụ thể với dữ liệu kiểm kê đã tính" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "Chức năng kiểm kê chưa được bật" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, 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:1429 +#: part/serializers.py:1344 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:1432 +#: part/serializers.py:1347 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:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "Có thể dựng" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 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:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1846 +#: part/serializers.py:1723 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:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1852 +#: part/serializers.py:1729 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:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1858 +#: part/serializers.py:1735 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:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "Dọn dẹp BOM đang tồn tại" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "Xóa mục BOM đang tồn tại trước khi tải lên" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "Chưa chỉ ra cột sản phẩm" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "Tìm thấy nhiều sản phẩm phù hợp" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "Không tìm thấy sản phẩm nào" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "Sản phẩm không được chỉ định như là một thành phần" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "Chưa cung cấp số lượng" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "Số lượng không hợp lệ" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "Buộc phải nhập ít nhất một mục BOM" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "Tổng số lượng" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "Thực hiện kiểm kê cho danh mục hàng hóa này" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "Bạn đã được đăng ký nhận thông báo cho danh mục này" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "Đăng ký nhận thông báo cho danh mục này" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "Chức năng danh mục" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "Sửa danh mục" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "Sửa danh mục" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "Xóa danh mục" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "Xóa danh mục" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "Danh mục sản phẩm cấp đầu" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "Sản phẩm (bao gồm các phụ mục)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "Tạo sản phẩm mới" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "Sản phẩm mới" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "Thông số phụ tùng" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "Thêm danh mục sản phẩm mới" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "Danh mục mới" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "Thêm thông tin kiểm kê" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "Kiểm kê" @@ -7946,105 +7293,101 @@ msgstr "Mẫu kiểm thử sản phẩm" msgid "Add Test Template" msgstr "Thêm mẫu kiểm thử" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "Phân bổ đơn hàng bán" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "Ghi chú sản phẩm" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "Biến thể sản phẩm" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "Tạo biến thể mới" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "Biến thể mới" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "Thêm tham số mới" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Sản phẩm liên quan" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "Thêm liên quan" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Hóa đơn nguyên vật liệu" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "Chức năng xuất dữ liệu" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "Xuất BOM" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "Báo cáo in BOM" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "Chức năng BOM" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "Tải lên BOM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Xác minh BOM" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Thêm mục BOM" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Lắp ráp" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "Bản dựng sản phẩm" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "Phân bổ đơn hàng bản dựng" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "Nhà cung cấp sản phẩm" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "Nhà sản xuất sản phẩm" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "Tải về mẫu nhập liệu sản phẩm" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "Định dạng" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "Chọn định dạng tệp" @@ -8103,7 +7446,7 @@ msgstr "Đăng ký nhận thông báo về sản phẩm này" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "In tem nhãn" @@ -8113,7 +7456,7 @@ msgstr "Hiện thông tin giá cả" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "Chức năng kho" @@ -8125,7 +7468,7 @@ msgstr "Đếm kho sản phẩm" msgid "Transfer part stock" msgstr "Chuyển kho sản phẩm" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "Chức năng sản phẩm" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Sản phẩm là ảo (không phải sản phẩm vật lý)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "Chi tiết giá sản phẩm" @@ -8188,47 +7531,51 @@ msgstr "Phân bổ đến đơn đặt bản dựng" msgid "Allocated to Sales Orders" msgstr "Phân bổ đến đơn bán hàng" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "Có thể dựng" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "Cấp kho tối thiểu" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "Khoảng giá" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "Số seri mới nhất" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "Tìm kiếm cho số sê ri" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "Mã QR sản phẩm" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "Liên kết mã vạch đến sản phẩm" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "Tính toán" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "Xóa ảnh gắn kết với sản phẩm này" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "Không tìm thấy hình ảnh phù hợp" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "Ẩn chi tiết sản phẩm" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "Biến thể" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "Kiện hàng" @@ -8324,17 +7671,17 @@ msgstr "Ghi đè định giá sản phẩm" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "Sửa" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "Cập nhật lần cuối" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "Cập nhập giá bán" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "Hết hàng" @@ -8486,7 +7833,7 @@ msgstr "Không tìm thấy ảnh sản phẩm" msgid "Part Pricing" msgstr "Định giá sản phẩm" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ 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:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "Không tìm thấy dữ liệu mã vạch phù hợp" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 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:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 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:336 +#: plugin/base/barcodes/api.py:293 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:353 +#: plugin/base/barcodes/api.py:310 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:357 +#: plugin/base/barcodes/api.py:314 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:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "Sản phẩm nhà cung cấp phù hợp" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "Hàng hóa này đã được nhận" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "Không phù hợp với mã vạch nhà cung cấp" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "Kho không đủ hạn mức khả dụng" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "Không đủ thông tin" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "Tìm thấy nhiều sản phẩm nhà cung cấp cho mã vạch" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "Tìm thấy nhiều đơn đặt mua phù hợp với '{order}'" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "Không có đơn đặt mua phù hợp với '{order}'" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "Đơn đặt mua không phù hợp với nhà cung cấp" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "Không tìm thấy mục dòng chờ xử lý cho sản phẩm nhà cung cấp" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 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:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "Mục dòng đơn đặt mua đã nhận" @@ -8607,120 +7946,88 @@ msgstr "Mục dòng đơn đặt mua đã nhận" msgid "Scanned barcode data" msgstr "Thông tin mã vạch đã quét" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "Đơn đặt mua không chờ xử lý" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "Đơn đặt mua để nhận hàng hóa" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "Đơn đặt mua vẫn chưa được thực hiện" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "Địa điểm để nhận hàng hóa vào bên trong" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "Không thể chọn một địa điểm có cấu trúc" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "Số lượng cần phân bổ" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "In nhãn thất bại" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "Mã vạch InvenTree" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "Cung cấp hỗ trợ gốc cho mã vạch" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 -#: plugin/builtin/labels/label_sheet.py:63 -#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 -#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 -msgid "InvenTree contributors" -msgstr "Người đóng góp InvenTree" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" +#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" +msgstr "Người đóng góp InvenTree" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" @@ -8768,21 +8075,19 @@ msgstr "Trao đổi tiền tệ InvenTree" msgid "Default currency exchange integration" msgstr "Tích hợp trao đổi tiền tệ mặc định" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "Máy in nhãn InvenTree PDF" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "Cung cấp hỗ trợ gốc để in nhãn PDF" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "Chế độ gỡ lỗi" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Bật chế độ gỡ lỗi - trả về mã HTML thuần thay vì PDF" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "Viền" msgid "Print a border around each label" msgstr "In một viền xung quanh từng nhãn" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "Ngang" @@ -8838,11 +8143,11 @@ msgstr "Máy in tờ nhãn InvenTree" msgid "Arrays multiple labels onto a single sheet" msgstr "Sắp xếp nhiều nhãn trong một tờ đơn" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "Nhãn quá lớn so với khổ giấy" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "Chưa tạo nhãn nào" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "Cấu hình phần bổ sung" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "Cấu hình phần bổ sung" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "Khóa" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "Khóa của phần bổ sung" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "Tên của phần bổ sung" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "Tên gói" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "Là phần bổ sung hoạt động" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Đã cài đặt" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "Phần bổ sung mẫu" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "Plugin có sẵn" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "Phương thức" @@ -8998,17 +8302,17 @@ msgstr "Phương thức" msgid "No author found" msgstr "Không tìm thấy tác giả" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, 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:537 +#: plugin/registry.py:591 #, 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:539 +#: plugin/registry.py:593 #, 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}" @@ -9091,1193 +8395,908 @@ msgstr "Cài đặt chưa được xác nhận" msgid "Either packagename of URL must be provided" msgstr "Hoặc là phải cung cấp tên gói của URL" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "Tải lại đầy đủ" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "Buộc tải lại" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "Kích hoạt phần bổ sung" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "Kích hoạt phần bổ sung này" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "Chưa cung cấp đối tượng hợp lệ cho bản mẫu" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Tệp mẫu '{template}' đang bị lỗi hoặc không tồn tại" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "Báo cáo kiểm tra" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "Pháp lý" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "Thư" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "Tên mẫu" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "Mẫu tên tệp" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" -msgstr "Bộ lọc" +#: report/models.py:183 +msgid "Report template file" +msgstr "Tệp mẫu báo cáo" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:190 +msgid "Report template description" +msgstr "Mô tả tệp mẫu báo cáo" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "Số phiên bản báo cáo (tự động tăng)" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "Khổ giấy cho báo cáo PDF" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "Tạo báo cáo theo hướng ngang" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "Chiều rộng [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "Quy tắc sinh tên tệp báo cáo" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "Chiều rộng nhãn, tính theo mm" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "Mẫu báo cáo đang bật" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "Chiều cao [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "Truy vấn bộ lọc hàng trong kho (dùng dấu phẩy liệt kê các cặp key=value)" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "Chiều cao nhãn, tính theo mm" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "Bao gồm các đợt kiểm tra đã lắp đặt" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "Bao gồm kết quả kiểm tra cho hàng trong kho được cài đặt bên trong hàng hóa đã lắp ráp" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "" +#: report/models.py:424 +msgid "Build Filters" +msgstr "Dựng bộ lọc" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "Dựng bộ lọc truy vấn (dùng dấu phẩy liệt kê các cặp key=value" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "" +#: report/models.py:464 +msgid "Part Filters" +msgstr "Bộ lọc sản phẩm" -#: report/models.py:456 -msgid "Report Template" -msgstr "" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "Bộ lọc truy vấn sản phẩm (dùng dấu phẩy liệt kê các cặp key=value" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "Bộ lọc truy vấn đơn đặt mua" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "Bộ lọc truy vấn đơn hàng bán" -#: report/models.py:475 -msgid "Label output plugin" -msgstr "" +#: report/models.py:569 +msgid "Return order query filters" +msgstr "Bộ lọc truy vấn đơn hàng trả lại" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "Mẫu trích" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "Tệp báo cáo mẫu" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "Mô tả tệp báo cáo mẫu" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "Tài sản" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "Tệp báo cáo tài sản" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "Mô tả tệp báo cáo tài sản" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "Mã QR" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "Mã QR" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "bộ lọc truy vấn vị trí kho (dùng dấu phẩy liệt kê các cặp key=value)" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Vật liệu cần có" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "Bắt buộc cho" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Nhà cung cấp đã bị xóa" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "Đơn giá" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "Bảng liệt kê mở rộng" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "Tổng cộng" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "Số sê-ri" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "Mục vị trí kho hàng" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Báo cáo kiểm thử mặt hàng" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Kết quả kiểm tra" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "Thử nghiệm" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "Kết quả" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Đạt" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Không đạt" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "Không có kết quả (bắt buộc)" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "Không có kết quả" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Mục đã cài đặt" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sê-ri" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "Tệp tin tài sản không tồn tại" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "Không tìm thấy tệp hình ảnh" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 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:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "ID địa điểm" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "Tên địa điểm" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "Đường dẫn địa điểm" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "ID mặt hàng" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "Mã trạng thái" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "Sản phẩm nhà cung cấp" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" msgstr "Tên nhà cung cấp" -#: stock/admin.py:200 +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "Tên nhà cung cấp" + +#: stock/admin.py:196 msgid "Customer ID" msgstr "ID Khách hàng" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Đã cài đặt trong" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "ID bản dựng" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "ID đơn hàng bán" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "ID đơn đặt mua" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "Cần xem xét" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "Xóa khi thiếu hụt" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Ế" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "Loại vị trí kho hàng" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "Loại vị trí kho hàng" -#: stock/models.py:91 +#: stock/models.py:90 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:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Vị trí kho hàng" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "Chọn chủ sở hữu" -#: stock/models.py:189 +#: stock/models.py:167 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:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Bên ngoài" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "Đây là vị trí kho bên ngoài" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Loại vị trí" -#: stock/models.py:207 +#: stock/models.py:185 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:279 +#: stock/models.py:254 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:664 +#: stock/models.py:626 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:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 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:708 +#: stock/models.py:670 #, 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:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 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:721 +#: stock/models.py:683 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:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:748 +#: stock/models.py:712 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:761 +#: stock/models.py:725 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:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:799 +#: stock/models.py:763 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:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 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:830 +#: stock/models.py:794 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:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:891 +#: stock/models.py:855 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:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:921 +#: stock/models.py:885 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:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:940 +#: stock/models.py:904 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:960 +#: stock/models.py:924 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:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1511 +#: stock/models.py:1465 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:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1525 +#: stock/models.py:1479 #, 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:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "Số sêri phải là một danh sách dãy số nguyên" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 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:1663 +#: stock/models.py:1617 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:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:1669 +#: stock/models.py:1623 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:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:1686 +#: stock/models.py:1640 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:1694 +#: stock/models.py:1648 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:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:1960 +#: stock/models.py:1870 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:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 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:2454 +#: stock/models.py:2403 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:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "Số sêri quá lớn" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "Mục cha" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 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:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "Đã hết hạn" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "Mục con" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 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:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 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:674 +#: stock/serializers.py:477 #, 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:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: stock/serializers.py:709 +#: stock/serializers.py:512 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:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 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:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:804 +#: stock/serializers.py:607 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:817 +#: stock/serializers.py:620 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:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 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:930 +#: stock/serializers.py:703 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:947 +#: stock/serializers.py:720 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:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "Vị trí đích dành cho hàng hóa trả lại" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 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:1306 +#: stock/serializers.py:1077 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:1330 +#: stock/serializers.py:1101 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:1336 +#: stock/serializers.py:1107 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:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 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:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 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:1444 -msgid "Allow mismatched status" -msgstr "Cho phép trạng thái không khớp" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "Cho phép mặt hàng với mã trạng thái khác nhau để gộp lại" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "Cần cung cấp ít nhất hai mặt hàng" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "Giá trị khóa chính mặt hàng" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "Mã trạng thái mặt hàng" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "Ghi chú giao dịch kho" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "Đồng ý" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "Chú ý cần thiết" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "Bị hư hại" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "Đã hủy" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "Đã từ chối" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "Đã cách ly" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "Mục theo dõi kho cổ điển" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "Kho hàng đã được khởi tạo" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "Sửa kho hàng" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "Số sê ri đã được gán" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "Kho đã đếm" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "Kho được thêm thủ công" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "Kho được xóa thủ công" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "Vị trí đã thay đổi" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "Kho hàng đã được cập nhật" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "Đã cài đặt vào bộ phận lắp ráp" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "Di rời khỏi bộ phận lắp ráp" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "Mục thành phần đã cài đặt" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "Mục thành phần đã di rời" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "Tách từ mục cha" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "Tách mục con" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "Kho hàng đã được gộp" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "Đã chuyển đổi sang biến thể" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "Đầu ra đơn đặt bản dựng đã được tạo" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "Đầu ra đơn đặt bản dựng đã hoàn thành" +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/status_codes.py:77 -msgid "Build order output rejected" -msgstr "Đầu ra đơn đặt bản dựng bị từ chối" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "Cho phép trạng thái không khớp" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "Tiêu hao bởi đơn đặt bản dựng" +#: stock/serializers.py:1216 +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/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "Vận chyển dựa vào đơn đặt bản dựng" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "Cần cung cấp ít nhất hai mặt hàng" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "Đã nhận dựa vào đơn đặt hàng mua" +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "Trả hành dựa vào đơn hàng trả lại" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "Giá trị khóa chính mặt hàng" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "Gửi đến khách hàng" +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "Mã trạng thái mặt hàng" -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "Bị trả lại từ khách hàng" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "Ghi chú giao dịch kho" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" @@ -10300,7 +9319,7 @@ msgstr "Thông tin kiểm thử" msgid "Test Report" msgstr "Báo cáo kiểm thử" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "Xóa dữ liệu báo cáo kiểm thử" @@ -10316,15 +9335,15 @@ msgstr "Ghi chú tại kho hàng" msgid "Installed Stock Items" msgstr "Hàng hóa đã lắp đặt" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "Lắp đặt hàng hóa trong kho" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "Xóa toàn bộ kết quả kiểm thử cho kho hàng này" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "Quét vào điểm bán" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "Chức năng in" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "Chức năng điều chỉnh kho" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "Đếm hàng" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "Thêm hàng" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "Xóa hàng hóa" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "Sắp xếp hàng hóa" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "Chuyển giao hàng" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "Chỉ định cho khách hàng" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "Xóa mặt hàng" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "Dựng" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "Mục cha" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "Chưa đặt nhà sản xuất" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "Bạn không thuộc danh sách chủ sở hữu hàng hóa này. Mặt hàng này không thể sửa đổi." #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "Chỉ đọc" @@ -10469,8 +9492,12 @@ msgstr "trang tiếp theo" msgid "Navigate to next serial number" msgstr "Điều hướng đến số sêri tiếp" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "Số lượng sẵn có" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "Không có vị trí nào được đặt" @@ -10487,6 +9514,11 @@ msgstr "Mặt hàng không đạt toàn bộ yêu cầu thử nghiệm" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Mặt hàng này hết hạn vào %(item.expiry_date)s" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "Đã hết hạn" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "Mặt hàng này hết hạn vào %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Chưa thực hiện kiểm kê" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "Chọn một trong những biến thể sản phẩm được liệt kê bên dưới." -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "Cánh báo" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "Thao tác này không thể khôi phục lại một cách dễ dàng" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "Tạo hàng hóa tuần tự từ mặt hàng này." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Chọn số lượng cần tuần tự hóa và số sêri duy nhất." -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "Thực hiện kiểm kê cho vị trí kho này" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "Xác định vị trí kho" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "Quét các mặt hàng vào vị trí kho này" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "Quét vào trong mặt hàng" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "Quét kho chứa vào trong vị trí kho này" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "Quét vào trong bộ chứa" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "In báo cáo vị trí" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "Chức năng vị trí" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "Sửa vị trí" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "Xóa vị trí" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "Vị trí kho cấp đầu" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "Chủ sở hữu vị trí" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Bạn không thuộc danh sách chủ sở hữu của vị trí này. Vị trí kho này không thể sửa được." -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "Tạo mới vị trí kho" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "Vị trí mới" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "Theo dõi tồn kho" msgid "Allocations" msgstr "Phân bổ" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "Mục con" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Quyền truy cập bị từ chối" @@ -10840,12 +9872,12 @@ msgstr "Cài đặt đăng nhập" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Chưa cấu hình email gửi đi. Một số tính năng đăng nhập và đăng ký sẽ không hoạt động được!" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Đăng ký" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "Đăng nhập một lần" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "Cài đặt sản phẩm" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Nhập hàng hóa" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Nhập sản phẩm" @@ -10922,36 +9954,36 @@ msgstr "Thiết lập phần bổ sung" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Đổi thiết lập bên dưới yêu cầu bạn cần khởi động máy chủ ngay lập tức. Đừng thay đổi điều này trong khi đang sử dụng phần mềm." -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Phần bổ sung" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Cài đặt phần bổ sung" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Tải lại plugin" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Phần bổ sung bên ngoài chưa được bật cho cài đặt InvenTree này" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "Ngăn Xếp Lỗi Phần Bổ Sung" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "Giai đoạn" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Tin nhắn" @@ -10994,7 +10026,7 @@ msgstr "Đường dẫn cài đặt" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "Gắn liền" @@ -11004,7 +10036,7 @@ msgstr "Đây là phần bổ sung có sẵn nên không thể tắt được" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "Mẫu" @@ -11038,20 +10070,20 @@ msgstr "Cài đặt đơn đặt mua" msgid "Pricing Settings" msgstr "Cài đặt định giá" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Tỷ giá hối đoái" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Cập nhật ngay" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Lần cập nhật gần nhất" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Chưa bao giờ" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "Xóa" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "Loại vị trí mới" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "Trang chủ" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "Thiết lập đơn hàng bán" msgid "Stock Settings" msgstr "Cài đặt kho hàng" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "Loại ví trí kho" @@ -11267,6 +10299,18 @@ msgstr "Cài đặt tài khoản" msgid "Change Password" msgstr "Đổi mật khẩu" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "Tên người dùng" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "Tên" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "Họ" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "Địa chỉ email sau đã được liên kết với tài khoản của bạn:" @@ -11340,49 +10384,49 @@ msgstr "Cài đặt đa nhân tố" msgid "Remove multifactor" msgstr "Xóa đa nhân tố" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "Các phiên hoạt động" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "Đăng xuất phiên đang hoạt động (trừ phiên này)" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "Đăng xuất phiên đang hoạt động" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "không rõ trên không rõ" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "không rõ" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "Địa chỉ IP" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "Thiết bị" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "Hoạt động gần đây" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s trước (phiên này)" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "%(time)s trước" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "Gửi báo cáo lỗi" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "sao chép đến bảng tạm" @@ -11554,7 +10598,7 @@ msgstr "Xác nhận địa chỉ email" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Xin hãy xác nhận rằng %(email)s là địa chỉ email cho người dùng %(user_display)s." -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "Xác nhận" @@ -11563,26 +10607,26 @@ msgstr "Xác nhận" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Liên kết xác nhận email đã hết hạn hoặc không hợp lệ. Xin hãy tạo yêu cầu xác nhận email mới." -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Đăng nhập" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "Chưa có tài khoản?" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Đăng ký" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "Quân mật khẩu?" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "hoặc đăng nhập bằng" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "Bạn có chắc bạn muốn đăng xuất không?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "Quay lại site" @@ -11710,19 +10754,15 @@ msgstr "Bước 1" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "Quét mã QR bên dưới với bộ sinh mã thông báo mà bạn chọn (cho thực thể Google Authentication)." -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "Bước 2" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "Điền một mã thông báo đã sinh bởi ứng dụng:" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Xác minh" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "Sản phẩm sau còn ít hàng trong kho yêu cầu" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Số lượng bắt buộc" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "Nhấp chuột vào liên kết dưới đây để xem sản phẩm này" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Số lượng tối thiểu" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Quét mã vạch" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Lỗi biểu mẫu tồn tại" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Gửi" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "Sẽ tải thông báo ở đây" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "Thêm" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "Lưu lại" msgid "Show all notifications and history" msgstr "Hiện toàn bộ thông báo và lịch sử" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Chưa cung cấp dữ liệu QR" @@ -15125,14 +14122,6 @@ msgstr "Thiết lập email" msgid "Email settings not configured" msgstr "Chưa cấu hình thiết lập email" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "Có" @@ -15205,35 +14194,35 @@ msgstr "Lần cuối mã thông báo được sử dụng" msgid "Revoked" msgstr "Đã thu hồi" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "Quyền hạn đã đặt" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "Nhóm" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "Xem" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "Quyền để xem mục" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "Quyền để thêm mục" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "Đổi" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "Quyển để sửa mục" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "Quyền để xóa mục" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po similarity index 62% rename from src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po rename to src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po index c00538315381..a421e6d44b99 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2024-04-21 04:19\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" msgstr "" @@ -48,38 +48,34 @@ msgstr "" msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "" @@ -92,270 +88,250 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" msgstr "" @@ -364,310 +340,349 @@ msgstr "" msgid "[{site_name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:909 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" msgstr "" @@ -679,27 +694,223 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 +#: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" msgstr "" -#: InvenTree/validators.py:40 +#: InvenTree/validators.py:39 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:136 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:142 +#: InvenTree/validators.py:145 msgid "Invalid value for overage" msgstr "" @@ -727,105 +938,62 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "" - -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "" - -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "" - -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "" - -#: build/api.py:125 -msgid "Assigned To" -msgstr "" - -#: build/api.py:301 +#: build/api.py:238 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "" - -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" - -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 +#: build/api.py:294 company/models.py:902 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 msgid "Available" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 +#: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 +#: build/models.py:75 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -836,919 +1004,708 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "" - -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "" - -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:163 +#: build/models.py:116 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:174 order/models.py:239 +#: build/models.py:127 order/models.py:239 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:180 +#: build/models.py:133 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:241 +#: build/models.py:179 msgid "Build Order Reference" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" msgstr "" -#: build/models.py:253 +#: build/models.py:191 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:262 +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:330 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1308 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1323 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1493 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:433 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:734 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:788 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" msgstr "" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1721,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1733,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1744,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1757,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1781,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1911,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "" @@ -1981,23 +1924,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "" @@ -2006,8 +1949,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2015,12 +1958,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1986,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2072,19 +2015,15 @@ msgstr "" msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2033,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2059,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2101,1623 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:137 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:146 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1171 +msgid "No plugin" +msgstr "" + +#: common/models.py:1259 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1268 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1434 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1435 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1511 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 +#: common/models.py:1680 msgid "Log Report Errors" msgstr "" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1955 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:2034 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 +#: common/models.py:2437 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2443 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "" - -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:3044 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:3086 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:3105 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3736,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" msgstr "" @@ -4000,103 +3752,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:370 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:372 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,435 +3850,406 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 +#: company/api.py:164 msgid "Part is Active" msgstr "" -#: company/api.py:145 +#: company/api.py:168 msgid "Manufacturer is Active" msgstr "" -#: company/api.py:278 +#: company/api.py:317 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:282 +#: company/api.py:321 msgid "Internal Part is Active" msgstr "" -#: company/api.py:286 +#: company/api.py:325 msgid "Supplier is Active" msgstr "" -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" msgstr "" -#: company/models.py:163 +#: company/models.py:160 msgid "Is this company active?" msgstr "" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:171 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:177 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:383 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:388 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:395 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:396 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:402 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:409 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:437 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:450 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:738 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 +#: company/models.py:814 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:864 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" msgstr "" @@ -4571,8 +4257,8 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4607,11 +4293,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" @@ -4630,17 +4316,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "" @@ -4648,12 +4334,19 @@ msgstr "" msgid "Uses default currency" msgstr "" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" @@ -4662,19 +4355,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4383,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4396,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,7 +4410,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4740,7 +4433,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 @@ -4812,7 +4505,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" @@ -4827,8 +4520,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" msgstr "" @@ -4838,7 +4530,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,23 +4539,19 @@ msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,6 +4575,19 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" @@ -4895,7 +4596,7 @@ msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4928,12 +4629,12 @@ msgstr "" msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" msgstr "" @@ -4942,13 +4643,13 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4966,33 +4667,29 @@ msgstr "" msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "" @@ -5018,236 +4715,134 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: importer/serializers.py:91 -msgid "Invalid field defaults" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: importer/serializers.py:104 -msgid "Invalid field overrides" +#: label/api.py:247 +msgid "Error printing label" msgstr "" -#: importer/serializers.py:117 -msgid "Invalid field filters" +#: label/models.py:120 +msgid "Label name" msgstr "" -#: importer/serializers.py:178 -msgid "Rows" +#: label/models.py:128 +msgid "Label description" msgstr "" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" +#: label/models.py:136 +msgid "Label" msgstr "" -#: importer/serializers.py:192 -msgid "No rows provided" +#: label/models.py:137 +msgid "Label template file" msgstr "" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" msgstr "" -#: importer/serializers.py:199 -msgid "Row contains invalid data" +#: label/models.py:144 +msgid "Label template is enabled" msgstr "" -#: importer/serializers.py:202 -msgid "Row has already been completed" +#: label/models.py:149 +msgid "Width [mm]" msgstr "" -#: importer/status_codes.py:11 -msgid "Initializing" +#: label/models.py:150 +msgid "Label width, specified in mm" msgstr "" -#: importer/status_codes.py:12 -msgid "Mapping Columns" +#: label/models.py:156 +msgid "Height [mm]" msgstr "" -#: importer/status_codes.py:13 -msgid "Importing Data" +#: label/models.py:157 +msgid "Label height, specified in mm" msgstr "" -#: importer/status_codes.py:16 -msgid "Processing Data" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: label/models.py:164 +msgid "Pattern for generating label filenames" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "" - -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" msgstr "" @@ -5287,6 +4882,10 @@ msgstr "" msgid "Initialized" msgstr "" +#: machine/models.py:110 +msgid "Errors" +msgstr "" + #: machine/models.py:117 msgid "Machine status" msgstr "" @@ -5304,82 +4903,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "" - -#: order/api.py:132 -msgid "Has Project Code" -msgstr "" - -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 msgid "Order Complete" msgstr "" -#: order/api.py:452 +#: order/api.py:458 msgid "Order Pending" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -5399,617 +4980,513 @@ msgstr "" msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:278 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:287 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:332 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:342 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:2009 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 msgid "Merge Items" msgstr "" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:598 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1655 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5528,87 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5661,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5708,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6243,7 +5729,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5777,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5813,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5851,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5881,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5917,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,11 +5933,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -6452,187 +5945,165 @@ msgstr "" msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" msgstr "" -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 msgid "Parent" msgstr "" -#: part/api.py:181 +#: part/api.py:180 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" msgstr "" -#: part/api.py:216 +#: part/api.py:215 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:441 +#: part/api.py:461 msgid "Has Results" msgstr "" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" +#: part/api.py:893 +msgid "Valid" msgstr "" -#: part/api.py:926 -msgid "Has Revisions" +#: part/api.py:894 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1117 -msgid "BOM Valid" +#: part/api.py:900 +msgid "This option must be selected" msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6641,1148 +6112,1024 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:551 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:616 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:879 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "" - -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:905 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:912 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1097 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3585 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3602 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3778 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3779 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" - -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:407 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" +#: part/serializers.py:823 +msgid "External Stock" msgstr "" -#: part/serializers.py:908 +#: part/serializers.py:825 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:911 +#: part/serializers.py:828 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" msgstr "" @@ -7828,65 +7175,65 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +7279,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7946,105 +7293,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7422,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7446,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7456,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7468,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8174,7 +7517,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7531,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7629,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7671,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" msgstr "" @@ -8406,9 +7753,9 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,7 +7833,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8498,108 +7845,100 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 msgid "Received purchase order line item" msgstr "" @@ -8607,90 +7946,82 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8698,30 +8029,6 @@ msgstr "" msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,21 +8075,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8794,11 +8099,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "" @@ -8822,7 +8127,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" msgstr "" @@ -8838,11 +8143,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8935,62 +8240,61 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 msgid "Package Plugin" msgstr "" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" msgstr "" @@ -8998,17 +8302,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9091,1192 +8395,907 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/helpers.py:43 +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 msgid "A4" msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "" - -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" msgstr "" -#: report/models.py:156 -msgid "Template description" -msgstr "" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "" - -#: report/models.py:234 -msgid "Filters" +#: report/models.py:183 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:190 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:204 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:325 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:354 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:424 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:464 +msgid "Part Filters" msgstr "" -#: report/models.py:456 -msgid "Report Template" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" +#: report/models.py:497 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:533 +msgid "Sales order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:569 +msgid "Return order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:641 +msgid "Snippet file with this name already exists" msgstr "" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:714 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:722 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:752 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:185 +msgid "Supplier ID" msgstr "" -#: stock/admin.py:189 -msgid "Supplier ID" +#: stock/admin.py:191 +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 msgid "Filter by location depth" msgstr "" -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 msgid "Parent Location" msgstr "" -#: stock/api.py:368 +#: stock/api.py:326 msgid "Filter by parent location" msgstr "" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:64 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:185 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:670 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:855 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1479 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1595 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "" - -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 msgid "Test station" msgstr "" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2585 +#: stock/models.py:2471 msgid "Finished" msgstr "" -#: stock/models.py:2586 +#: stock/models.py:2472 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:254 +#: stock/serializers.py:119 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:588 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 -msgid "Item is allocated to a build order" -msgstr "" - -#: stock/serializers.py:1330 -msgid "Customer to assign stock items" -msgstr "" - -#: stock/serializers.py:1336 -msgid "Selected company is not a customer" -msgstr "" - -#: stock/serializers.py:1344 -msgid "Stock assignment notes" -msgstr "" - -#: stock/serializers.py:1354 stock/serializers.py:1608 -msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1433 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1438 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1439 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:1444 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:1445 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:1455 -msgid "At least two stock items must be provided" -msgstr "" - -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 -msgid "StockItem primary key value" -msgstr "" - -#: stock/serializers.py:1570 -msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" msgstr "" -#: stock/status_codes.py:62 -msgid "Removed component item" +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" msgstr "" -#: stock/status_codes.py:65 -msgid "Split from parent item" +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" msgstr "" -#: stock/status_codes.py:66 -msgid "Split child item" +#: stock/serializers.py:1115 +msgid "Stock assignment notes" msgstr "" -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" msgstr "" -#: stock/status_codes.py:72 -msgid "Converted to variant" +#: stock/serializers.py:1204 +msgid "Stock merging notes" msgstr "" -#: stock/status_codes.py:75 -msgid "Build order output created" +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" msgstr "" -#: stock/status_codes.py:76 -msgid "Build order output completed" +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/status_codes.py:77 -msgid "Build order output rejected" +#: stock/serializers.py:1215 +msgid "Allow mismatched status" msgstr "" -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" msgstr "" -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" +#: stock/serializers.py:1293 +msgid "No Change" msgstr "" -#: stock/status_codes.py:87 -msgid "Returned against Return Order" +#: stock/serializers.py:1322 +msgid "StockItem primary key value" msgstr "" -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" +#: stock/serializers.py:1341 +msgid "Stock item status code" msgstr "" -#: stock/status_codes.py:91 -msgid "Returned from customer" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" msgstr "" #: stock/templates/stock/item.html:17 @@ -10300,7 +9319,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" msgstr "" @@ -10316,15 +9335,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" msgstr "" @@ -10337,8 +9356,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +9366,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" msgstr "" @@ -10366,12 +9385,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" msgstr "" @@ -10412,10 +9431,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +9448,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +9492,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" msgstr "" @@ -10487,6 +9514,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9528,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9573,80 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "" - -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9662,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9872,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9916,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9954,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10994,7 +10026,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" msgstr "" @@ -11004,7 +10036,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" msgstr "" @@ -11038,20 +10070,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +10139,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "" @@ -11130,7 +10162,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" msgstr "" @@ -11149,12 +10181,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +10194,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 msgid "New Location Type" msgstr "" @@ -11218,7 +10250,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +10285,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 msgid "Stock Location Types" msgstr "" @@ -11267,6 +10299,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11340,49 +10384,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10576,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10598,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "" @@ -11563,26 +10607,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10640,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11710,19 +10754,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10827,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11801,15 +10841,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10861,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10893,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10929,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10982,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,8 +11077,8 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" @@ -12156,7 +11196,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" msgstr "" @@ -12176,30 +11216,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" @@ -12231,7 +11271,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" @@ -12239,120 +11279,120 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +11416,231 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "" - -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12779,7 +11787,7 @@ msgid "Delete Parameters" msgstr "" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" @@ -12796,34 +11804,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" @@ -12877,119 +11885,119 @@ msgstr "" msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +12005,110 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +12118,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +12146,400 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -13625,7 +12665,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" @@ -13638,6 +12678,7 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13695,12 +12736,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" @@ -13712,136 +12753,138 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12916,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12978,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14108,751 +13135,733 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1450 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 msgid "Has Choices" msgstr "" @@ -14924,6 +13933,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14960,22 +13973,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15125,14 +14122,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15205,35 +14194,35 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index c838076993a6..c2b95c519cfd 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: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:51\n" +"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"PO-Revision-Date: 2023-02-28 22:38\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -14,662 +14,702 @@ msgstr "" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" "X-Crowdin-Language: zh-CN\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" +"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:269 +#: InvenTree/api.py:255 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:502 +#: InvenTree/api.py:519 msgid "User does not have permission to view this model" -msgstr "用户没有权限查阅当前模型。" +msgstr "" #: InvenTree/conversion.py:160 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "Invalid quantity provided" msgid "Invalid unit provided ({unit})" -msgstr "提供了无效的单位 ({unit})" +msgstr "提供的数量无效" #: InvenTree/conversion.py:177 +#, fuzzy +#| msgid "No value set" msgid "No value provided" -msgstr "没有提供数值" +msgstr "未设置值" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "不能将 {original} 转换到 {unit}" +msgstr "" #: InvenTree/conversion.py:206 +#, fuzzy +#| msgid "Invalid quantity provided" msgid "Invalid quantity supplied" msgstr "提供的数量无效" #: InvenTree/conversion.py:220 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "Invalid quantity provided" msgid "Invalid quantity supplied ({exc})" -msgstr "提供的数量无效 ({exc})" +msgstr "提供的数量无效" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到错误详细信息" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:139 msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:847 company/templates/company/sidebar.html:37 +#: order/models.py:1283 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3175 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 msgid "Notes" msgstr "备注" #: InvenTree/format.py:164 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "值' {name}' 未出现在模式格式中" +msgstr "值 '{name}' 没有以模式格式显示" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " -msgstr "提供的值与所需模式不匹配:" +msgstr "提供的值与所需模式不匹配: " -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "输入密码" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "输入新密码" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "确认密码" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "确认新密码" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "旧密码" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" -msgstr "电子邮件 (重复)" +msgstr "Email (再次)" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" -msgstr "邮箱地址已确认" +msgstr "Email 地址确认" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." -msgstr "您必须每次输入相同的电子邮件。" - -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "MFA注册已禁用。" +msgstr "您必须输入相同的 Email 。" -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." -msgstr "提供的主电子邮件地址无效。" +msgstr "所提供的主要电子邮件地址无效。" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." -msgstr "提供的邮箱域名未被批准。" +msgstr "提供的电子邮件域未被核准。" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:395 msgid "Registration is disabled." -msgstr "注册已禁用。" +msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 msgid "Invalid quantity provided" msgstr "提供的数量无效" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:533 msgid "Empty serial number string" -msgstr "序號為空白" +msgstr "空序列号字符串" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:562 msgid "Duplicate serial" -msgstr "复制序列号" +msgstr "重复的序列号" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 -#, python-brace-format +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#, fuzzy, python-brace-format +#| msgid "Invalid group range: {g}" msgid "Invalid group range: {group}" -msgstr "无效的组范围: {group}" +msgstr "无效的组范围: {g}" -#: InvenTree/helpers.py:591 -#, python-brace-format +#: InvenTree/helpers.py:625 +#, fuzzy, python-brace-format +#| msgid "Group range {g} exceeds allowed quantity ({q})" msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "组范围 {group} 超出了允许的数量 ({expected_quantity})" +msgstr "组 {g} 超出了允许的数量 ({q})" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 -#, python-brace-format +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#, fuzzy, python-brace-format +#| msgid "Invalid group sequence: {g}" msgid "Invalid group sequence: {group}" -msgstr "无效的组序列: {group}" +msgstr "无效的组序列: {g}" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:691 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:696 +#, fuzzy +#| msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "唯一序列号的数量 ({len(serials)}) 必须与数量匹配 ({expected_quantity})" +msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:150 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:158 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:171 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" -msgstr "图片下载超出最大尺寸" +msgstr "图像下载超过最大尺寸" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" #: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "阿拉伯语" - -#: InvenTree/locales.py:19 +#, fuzzy +#| msgid "Hungarian" msgid "Bulgarian" -msgstr "Bulgarian" +msgstr "匈牙利语" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:19 msgid "Czech" -msgstr "Czech" +msgstr "捷克语" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:20 msgid "Danish" -msgstr "Danish" +msgstr "丹麦语" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:21 msgid "German" -msgstr "German" +msgstr "德语" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:22 msgid "Greek" -msgstr "Greek" +msgstr "希腊语" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:23 msgid "English" -msgstr "English" +msgstr "英语" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:24 msgid "Spanish" -msgstr "Spanish" +msgstr "西班牙语" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:25 msgid "Spanish (Mexican)" -msgstr "Spanish (Mexican)" - -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "爱沙尼亚语" +msgstr "西班牙语(墨西哥)" -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:26 msgid "Farsi / Persian" -msgstr "Farsi / Persian" +msgstr "波斯语" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:27 +#, fuzzy +#| msgid "Danish" msgid "Finnish" -msgstr "Finnish" +msgstr "丹麦语" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:28 msgid "French" -msgstr "French" +msgstr "法语" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:29 msgid "Hebrew" -msgstr "Hebrew" +msgstr "希伯来语" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:30 msgid "Hindi" -msgstr "Hindi" +msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:31 msgid "Hungarian" -msgstr "Hungarian" +msgstr "匈牙利语" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:32 msgid "Italian" -msgstr "Italian" +msgstr "意大利语" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:33 msgid "Japanese" -msgstr "Japanese" +msgstr "日语" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:34 msgid "Korean" -msgstr "Korean" +msgstr "韩语" -#: InvenTree/locales.py:37 +#: InvenTree/locales.py:35 msgid "Latvian" -msgstr "Latvian" +msgstr "" -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:36 msgid "Dutch" -msgstr "Dutch" +msgstr "荷兰语" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:37 msgid "Norwegian" -msgstr "Norwegian" +msgstr "挪威语" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:38 msgid "Polish" -msgstr "Polish" +msgstr "波兰语" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:39 msgid "Portuguese" -msgstr "Portuguese" +msgstr "葡萄牙语" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" -msgstr "Portuguese (Brazilian)" +msgstr "葡萄牙语 (巴西)" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "罗马尼亚语" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:41 msgid "Russian" -msgstr "Russian" +msgstr "俄语" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:42 +#, fuzzy +#| msgid "Slovenian" msgid "Slovak" -msgstr "Slovak" +msgstr "斯洛文尼亚" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:43 msgid "Slovenian" -msgstr "Slovenian" +msgstr "斯洛文尼亚" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:44 msgid "Serbian" -msgstr "Serbian" +msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:45 msgid "Swedish" -msgstr "Swedish" +msgstr "瑞典语" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:46 msgid "Thai" -msgstr "Thai" +msgstr "泰语" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:47 msgid "Turkish" -msgstr "Turkish" - -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "乌克兰语" +msgstr "土耳其语" -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:48 msgid "Vietnamese" -msgstr "Vietnamese" +msgstr "越南语" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:49 msgid "Chinese (Simplified)" -msgstr "中文 (简体)" +msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:50 msgid "Chinese (Traditional)" -msgstr "中文 (繁体)" +msgstr "" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "[{site_name}] 登录到应用程序" +msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" msgstr "电子邮件" -#: InvenTree/models.py:103 +#: InvenTree/models.py:107 +#, fuzzy +#| msgid "Error reading file (invalid format)" msgid "Error running plugin validation" -msgstr "驗證外掛程式時發生錯誤" +msgstr "读取文件时发生错误 (无效编码)" -#: InvenTree/models.py:172 +#: InvenTree/models.py:162 msgid "Metadata must be a python dict object" -msgstr "Metadata必須是一個Python Dictionary物件" +msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:168 msgid "Plugin Metadata" -msgstr "外掛程式Metadata" +msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:169 msgid "JSON metadata field, for use by external plugins" -msgstr "外掛程式使用的JSON Metadata欄位" +msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:399 msgid "Improperly formatted pattern" -msgstr "格式錯誤" +msgstr "格式不正确" -#: InvenTree/models.py:416 +#: InvenTree/models.py:406 msgid "Unknown format key specified" -msgstr "指定了不明的格式鍵值" +msgstr "指定了未知格式密钥" -#: InvenTree/models.py:422 +#: InvenTree/models.py:412 msgid "Missing required format key" -msgstr "缺少必須的格式鍵值" +msgstr "缺少必需的格式密钥" -#: InvenTree/models.py:433 +#: InvenTree/models.py:423 msgid "Reference field cannot be empty" -msgstr "參考欄位不能空白" +msgstr "引用字段不能为空" -#: InvenTree/models.py:441 +#: InvenTree/models.py:431 msgid "Reference must match required pattern" -msgstr "參考欄位並須符合格式" +msgstr "引用必须匹配所需的图案" -#: InvenTree/models.py:472 +#: InvenTree/models.py:462 msgid "Reference number is too large" -msgstr "參考編號過大" +msgstr "参考编号过大" -#: InvenTree/models.py:723 +#: InvenTree/models.py:536 +msgid "Missing file" +msgstr "缺少文件" + +#: InvenTree/models.py:537 +msgid "Missing external link" +msgstr "缺少外部链接" + +#: InvenTree/models.py:558 stock/models.py:2444 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "附件" + +#: InvenTree/models.py:559 +msgid "Select file to attach" +msgstr "选择附件" + +#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:830 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: part/admin.py:55 part/models.py:919 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "链接" + +#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 +#: stock/models.py:819 +msgid "Link to external URL" +msgstr "链接到外部 URL" + +#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "注释" + +#: InvenTree/models.py:575 +msgid "File comment" +msgstr "文件注释" + +#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 +#: common/models.py:2495 common/models.py:2719 common/models.py:2720 +#: common/models.py:2965 common/models.py:2966 part/models.py:3185 +#: part/models.py:3272 part/models.py:3365 part/models.py:3393 +#: plugin/models.py:250 plugin/models.py:251 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "用户" + +#: InvenTree/models.py:588 +msgid "upload date" +msgstr "上传日期" + +#: InvenTree/models.py:610 +msgid "Filename must not be empty" +msgstr "文件名不能为空!" + +#: InvenTree/models.py:621 +msgid "Invalid attachment directory" +msgstr "非法的附件目录" + +#: InvenTree/models.py:651 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "文件名包含非法字符 '{c}'" + +#: InvenTree/models.py:654 +msgid "Filename missing extension" +msgstr "缺少文件名扩展" + +#: InvenTree/models.py:663 +msgid "Attachment with this filename already exists" +msgstr "使用此文件名的附件已存在" + +#: InvenTree/models.py:670 +msgid "Error renaming file" +msgstr "重命名文件出错" + +#: InvenTree/models.py:846 msgid "Duplicate names cannot exist under the same parent" -msgstr "同一個上層元件下不能有重複的名字" +msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:863 msgid "Invalid choice" -msgstr "無效的選項" +msgstr "选择无效" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 +#: common/serializers.py:370 company/models.py:613 label/models.py:120 +#: machine/models.py:24 part/models.py:855 part/models.py:3616 +#: plugin/models.py:41 report/models.py:176 stock/models.py:76 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:81 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 +#: templates/InvenTree/settings/settings_staff_js.html:446 #: templates/js/translated/company.js:676 #: templates/js/translated/company.js:724 #: templates/js/translated/company.js:913 #: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "名稱" +msgstr "名称" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 +#: InvenTree/models.py:899 build/models.py:188 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:522 company/models.py:838 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 +#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:189 +#: report/models.py:655 report/models.py:729 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "描述" +msgstr "描述信息" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:900 stock/models.py:83 msgid "Description (optional)" -msgstr "描述(選填)" +msgstr "描述 (可选)" + +#: InvenTree/models.py:909 +msgid "parent" +msgstr "上级项" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 msgid "Path" -msgstr "路徑" +msgstr "路径" -#: InvenTree/models.py:929 +#: InvenTree/models.py:1021 +#, fuzzy +#| msgid "Add transaction note (optional)" msgid "Markdown notes (optional)" -msgstr "Markdown 註記(選填)" +msgstr "添加交易备注 (可选)" -#: InvenTree/models.py:960 +#: InvenTree/models.py:1050 msgid "Barcode Data" -msgstr "條碼資料" +msgstr "条码数据" -#: InvenTree/models.py:961 +#: InvenTree/models.py:1051 msgid "Third party barcode data" -msgstr "第三方條碼資料" +msgstr "第三方条形码数据" -#: InvenTree/models.py:967 +#: InvenTree/models.py:1057 msgid "Barcode Hash" -msgstr "條碼雜湊值" +msgstr "条码哈希" -#: InvenTree/models.py:968 +#: InvenTree/models.py:1058 msgid "Unique hash of barcode data" -msgstr "條碼資料的唯一雜湊值" +msgstr "条码数据的唯一哈希" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1111 msgid "Existing barcode found" -msgstr "發現現有條碼" +msgstr "发现现有条码" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1154 msgid "Server Error" -msgstr "伺服器錯誤" +msgstr "服务器错误" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1155 msgid "An error has been logged by the server." -msgstr "伺服器紀錄了一個錯誤。" +msgstr "服务器记录了一个错误。" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:62 part/models.py:4169 msgid "Must be a valid number" -msgstr "必須是有效的數字" +msgstr "必须是有效数字" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:2993 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "貨幣" +msgstr "货币" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:102 msgid "Select currency from available options" -msgstr "從可用選項中選擇貨幣" - -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "用户名" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "名" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "用户的名字(不包括姓氏)" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "姓" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "用户的姓氏" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "用户的电子邮件地址" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "职员" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "此用户是否拥有员工权限" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "超级用户" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "此用户是否为超级用户" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "激活" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "此用户帐户是否已激活" +msgstr "" -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." -msgstr "您沒有更改這個使用者角色的權限" +msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:453 msgid "Only superusers can create new users" -msgstr "只有管理員帳戶可以建立新的使用者" +msgstr "" -#: InvenTree/serializers.py:494 +#: InvenTree/serializers.py:472 msgid "Your account has been created." -msgstr "您的帳號已經建立完成。" +msgstr "" -#: InvenTree/serializers.py:496 +#: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" -msgstr "請使用重設密碼功能來登入" +msgstr "" -#: InvenTree/serializers.py:503 +#: InvenTree/serializers.py:481 +#, fuzzy +#| msgid "About InvenTree" msgid "Welcome to InvenTree" -msgstr "歡迎使用 InvenTree" +msgstr "关于 InventTree" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "文件名" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:576 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:596 msgid "Data File" msgstr "数据文件" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:597 msgid "Select data file for upload" -msgstr "选择要上传的数据文件" +msgstr "选择要上传的文件" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:614 msgid "Unsupported file type" msgstr "不支持的文件类型" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:620 msgid "File is too large" msgstr "文件过大" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:641 msgid "No columns found in file" msgstr "在文件中没有找到列" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:644 msgid "No data rows found in file" msgstr "在文件中没有找到数据行" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:757 msgid "No data rows provided" msgstr "没有提供数据行" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:760 msgid "No data columns supplied" msgstr "没有提供数据列" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:827 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "缺少必需的列:'{name}'" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:836 #, python-brace-format msgid "Duplicate column: '{col}'" -msgstr "重复列: '{col}'" +msgstr "复制列: '{col}'" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:859 +#, fuzzy +#| msgid "Part name" msgid "Remote Image" -msgstr "远程图片" +msgstr "商品名称" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:860 msgid "URL of remote image file" -msgstr "远程图片文件的 URL" +msgstr "远程图像文件的 URL" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:878 msgid "Downloading images from remote URL is not enabled" -msgstr "未启用从远程 URL下载图片" +msgstr "未启用从远程 URL下载图像" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1161 msgid "Background worker check failed" -msgstr "后台执行器检查失败" +msgstr "后台工作人员检查失败" #: InvenTree/status.py:70 msgid "Email backend not configured" @@ -677,1085 +717,1073 @@ msgstr "未配置电子邮件后端" #: InvenTree/status.py:73 msgid "InvenTree system health checks failed" -msgstr "InvenTree 系统健康检查失败" +msgstr "InventTree系统健康检查失败" -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" -msgstr "未知的資料庫" +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "待定" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" -msgstr "無效的物理單位" +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "已添加" -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" -msgstr "無效的貨幣代碼" +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "完成" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" -msgstr "損失值不能為負" +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "已取消" -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" -msgstr "損失率不能超過100%" +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "丢失" -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" -msgstr "無效的損失值" +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "已退回" -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" -msgstr "編輯使用者資訊" +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" -msgstr "設定密碼" +#: InvenTree/status_codes.py:43 order/models.py:1564 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "已发货" -#: InvenTree/views.py:434 -msgid "Password fields must match" -msgstr "密碼必須相符" +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "OK" -#: InvenTree/views.py:442 -msgid "Wrong password provided" -msgstr "密碼錯誤" +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "需要关注" -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" -msgstr "系統資訊" +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "破损" -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" -msgstr "關於InvenTree" +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "已销毁" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" -msgstr "级联" +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "已拒绝" -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" -msgstr "上層生產工單" +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "隔离" -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" -msgstr "分配给我" +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "旧库存跟踪条目" -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" -msgstr "发布者" +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "库存项已创建" -#: build/api.py:125 -msgid "Assigned To" -msgstr "" +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "已编辑库存项" -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" -msgstr "工單必須被取消才能被刪除" +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "已分配序列号" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" -msgstr "耗材" - -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" -msgstr "非必須項目" +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "库存计数" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" -msgstr "装配" +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "已手动添加库存" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" -msgstr "追蹤中" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "库存手动删除" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" -msgstr "" +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "仓储地点已更改" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" -msgstr "已分配" +#: InvenTree/status_codes.py:106 +#, fuzzy +#| msgid "Stock counted" +msgid "Stock updated" +msgstr "库存计数" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" -msgstr "可用數量" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "安装到组装中" -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" -msgstr "生產工單" +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "已从组装中删除" -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" -msgstr "生產工單" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "已安装组件项" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" -msgstr "装配物料清单尚未验证" +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "已删除组件项" -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" -msgstr "无法为未激活的零件创建生产订单" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "从父项拆分" -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" -msgstr "无法为已解锁的零件创建生产订单" +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "拆分子项" -#: build/models.py:163 -msgid "Invalid choice for parent build" -msgstr "無效的上層生產工單選擇" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "合并的库存项目" -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" -msgstr "必须指定负责的用户或组" +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "转换为变量" -#: build/models.py:180 -msgid "Build order part cannot be changed" -msgstr "無法更改生產工單" +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "已创建生产订单输出" -#: build/models.py:241 -msgid "Build Order Reference" -msgstr "生產工單代號" +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "生产订单输出已完成" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 +#: InvenTree/status_codes.py:128 +#, fuzzy +#| msgid "Build order output created" +msgid "Build order output rejected" +msgstr "已创建生产订单输出" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "被生产订单消耗" + +#: InvenTree/status_codes.py:132 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Shipped against Sales Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:135 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Received against Purchase Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:138 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Returned against Return Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "发送给客户" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "从客户退货" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "生产中" + +#: InvenTree/status_codes.py:185 +#, fuzzy +#| msgid "Returned" +msgid "Return" +msgstr "已退回" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +#, fuzzy +#| msgid "Placed" +msgid "Replace" +msgstr "已添加" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +#, fuzzy +#| msgid "Rejected" +msgid "Reject" +msgstr "已拒绝" + +#: InvenTree/templatetags/inventree_extras.py:183 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +#, fuzzy +#| msgid "Invalid value" +msgid "Invalid physical unit" +msgstr "无效值" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "不是有效的货币代码" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "备损值不能为负数" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" +msgstr "备损不能超过 100%" + +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "无效的备损值" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "编辑用户信息" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "设置密码" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "密码字段必须相匹配。" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "密码错误" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "系统信息" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "关于 InventTree" + +#: build/api.py:238 +msgid "Build must be cancelled before it can be deleted" +msgstr "在删除前必须取消生产" + +#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 +msgid "Consumable" +msgstr "" + +#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 +msgid "Optional" +msgstr "可选项" + +#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" +msgstr "" + +#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 +msgid "Allocated" +msgstr "" + +#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 +msgid "Available" +msgstr "空闲" + +#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 +msgid "Build Order" +msgstr "生产订单" + +#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:207 +msgid "Build Orders" +msgstr "生产订单" + +#: build/models.py:116 +msgid "Invalid choice for parent build" +msgstr "上级生产选项无效" + +#: build/models.py:127 order/models.py:239 +msgid "Responsible user or group must be specified" +msgstr "" + +#: build/models.py:133 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Build order part cannot be changed" +msgstr "无法取消订单" + +#: build/models.py:179 +msgid "Build Order Reference" +msgstr "相关生产订单" + +#: build/models.py:180 order/models.py:442 order/models.py:898 +#: order/models.py:1276 order/models.py:1996 part/admin.py:417 +#: part/models.py:4062 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 msgid "Reference" -msgstr "參考代號" +msgstr "引用" -#: build/models.py:253 +#: build/models.py:191 +#, fuzzy +#| msgid "Brief description of the build" msgid "Brief description of the build (optional)" -msgstr "關於生產工單的簡單說明(選填)" +msgstr "生产的简短描述." + +#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "上级生产" -#: build/models.py:262 +#: build/models.py:200 msgid "BuildOrder to which this build is allocated" -msgstr "這張生產工單對應的上層生產工單" - -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +msgstr "此次生产匹配的订单" + +#: build/models.py:205 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 +#: order/models.py:1401 order/models.py:1544 order/models.py:1545 +#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 +#: part/models.py:3148 part/models.py:3292 part/models.py:3315 +#: part/models.py:3336 part/models.py:3358 part/models.py:3468 +#: part/models.py:3764 part/models.py:3920 part/models.py:4013 +#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 msgid "Part" -msgstr "零件" +msgstr "商品" -#: build/models.py:275 +#: build/models.py:213 msgid "Select part to build" -msgstr "選擇要生產的零件" +msgstr "选择要生产的商品" -#: build/models.py:280 +#: build/models.py:218 msgid "Sales Order Reference" -msgstr "銷售訂單代號" +msgstr "相关销售订单" -#: build/models.py:284 +#: build/models.py:222 msgid "SalesOrder to which this build is allocated" -msgstr "這張生產工單對應的銷售訂單" +msgstr "此次生产匹配的销售订单" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:227 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" -msgstr "來源倉儲地點" +msgstr "来源地点" -#: build/models.py:293 +#: build/models.py:231 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)" +msgstr "此次生产从哪个仓储位置获取库存(留空即可从任何仓储位置取出)" -#: build/models.py:298 +#: build/models.py:236 msgid "Destination Location" -msgstr "目標倉儲地點" +msgstr "目标地点" -#: build/models.py:302 +#: build/models.py:240 msgid "Select location where the completed items will be stored" -msgstr "选择已完成项目库存地点" +msgstr "选择已完成项目仓储地点" -#: build/models.py:306 +#: build/models.py:244 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:309 +#: build/models.py:247 msgid "Number of stock items to build" msgstr "要生产的项目数量" -#: build/models.py:313 +#: build/models.py:251 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:315 +#: build/models.py:253 msgid "Number of stock items which have been completed" -msgstr "已經完成的庫存品數量" +msgstr "已完成的库存项目数量" -#: build/models.py:319 +#: build/models.py:257 msgid "Build Status" -msgstr "生產狀態" +msgstr "生产状态" -#: build/models.py:323 +#: build/models.py:261 msgid "Build status code" -msgstr "生產狀態代碼" +msgstr "生产状态代码" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 +#: stock/models.py:823 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" -msgstr "批号" +msgstr "批量代码" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:274 build/serializers.py:281 msgid "Batch code for this build output" -msgstr "此产出的批号" +msgstr "此生产产出的批量代码" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:277 order/models.py:304 part/models.py:1079 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" -msgstr "建立日期" +msgstr "创建日期" -#: build/models.py:343 +#: build/models.py:281 msgid "Target completion date" -msgstr "目標完成日期" +msgstr "预计完成日期" -#: build/models.py:344 +#: build/models.py:282 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" +msgstr "生产完成的目标日期。生产将在此日期之后逾期。" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:285 order/models.py:500 order/models.py:2041 +#: templates/js/translated/build.js:2245 msgid "Completion Date" -msgstr "完成日期" +msgstr "完成日期:" -#: build/models.py:353 +#: build/models.py:291 msgid "completed by" -msgstr "完成者" +msgstr "完成人" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:299 templates/js/translated/build.js:2205 msgid "Issued by" -msgstr "發布者" +msgstr "发布者" -#: build/models.py:362 +#: build/models.py:300 msgid "User who issued this build order" -msgstr "發布此生產工單的使用者" - -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +msgstr "发布此生产订单的用户" + +#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 msgid "Responsible" -msgstr "負責人" +msgstr "责任人" -#: build/models.py:371 +#: build/models.py:309 msgid "User or group responsible for this build order" -msgstr "負責此生產工單的使用者或群組" +msgstr "构建此订单的用户或组" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:314 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:819 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" -msgstr "外部連結" - -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "外部URL連結" +msgstr "外部链接" -#: build/models.py:381 +#: build/models.py:319 msgid "Build Priority" -msgstr "製造優先度" +msgstr "创建优先级" -#: build/models.py:384 +#: build/models.py:322 msgid "Priority of this build order" -msgstr "此生產工單的優先程度" - -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +msgstr "此构建订单的优先级" + +#: build/models.py:329 common/models.py:129 order/admin.py:18 +#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 +#, fuzzy +#| msgid "Part QR Code" msgid "Project Code" -msgstr "專案代碼" +msgstr "商品二维码" -#: build/models.py:392 +#: build/models.py:330 +#, fuzzy +#| msgid "Priority of this build order" msgid "Project code for this build order" -msgstr "此生產工單隸屬的專案代碼" +msgstr "此构建订单的优先级" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "未能卸载任务以完成生产分配" - -#: build/models.py:673 +#: build/models.py:581 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "生產工單 {build} 已經完成" +msgstr "生产订单 {build} 已完成" -#: build/models.py:679 +#: build/models.py:587 msgid "A build order has been completed" -msgstr "一張生產工單已經完成" +msgstr "生产订单已完成" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:805 build/models.py:880 msgid "No build output specified" -msgstr "未指定产出" +msgstr "未指定生产产出" -#: build/models.py:970 +#: build/models.py:808 msgid "Build output is already completed" -msgstr "产出已完成" +msgstr "生产产出已完成" -#: build/models.py:973 +#: build/models.py:811 msgid "Build output does not match Build Order" -msgstr "产出与生产订单不匹配" +msgstr "生产产出与订单不匹配" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 +#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 +#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 msgid "Quantity must be greater than zero" -msgstr "數量必須大於零" +msgstr "数量必须大于0" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:889 build/serializers.py:228 +#, fuzzy +#| msgid "Quantity must be greater than zero" msgid "Quantity cannot be greater than the output quantity" -msgstr "数量不能大于输出数量" +msgstr "数量必须大于0" -#: build/models.py:1124 build/serializers.py:563 +#: build/models.py:946 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "产出 {serial} 未通过所有必要测试" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "生产订单行项目" +msgstr "" -#: build/models.py:1490 +#: build/models.py:1308 +#, fuzzy +#| msgid "Build Notes" msgid "Build object" -msgstr "生产对象" - -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +msgstr "生产备注" + +#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2516 +#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3162 part/models.py:4035 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 msgid "Quantity" -msgstr "數量" +msgstr "数量" -#: build/models.py:1505 +#: build/models.py:1323 +#, fuzzy +#| msgid "Stock required for build order" msgid "Required quantity for build order" -msgstr "生產工單所需數量" +msgstr "生产订单所需的库存" -#: build/models.py:1585 +#: build/models.py:1403 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" +msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" -#: build/models.py:1594 +#: build/models.py:1412 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "分配的數量({q})不能超過可用的庫存數量({a})" +msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1422 order/models.py:1867 msgid "Stock item is over-allocated" -msgstr "庫存品項超額分配" +msgstr "库存物品分配过度!" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1428 order/models.py:1870 msgid "Allocation quantity must be greater than zero" -msgstr "分配的數量必須大於零" +msgstr "分配数量必须大于0" -#: build/models.py:1616 +#: build/models.py:1434 msgid "Quantity must be 1 for serialized stock" -msgstr "有序號的品項數量必須為1" +msgstr "序列化库存的数量必须是 1" -#: build/models.py:1675 +#: build/models.py:1493 +#, fuzzy +#| msgid "Selected stock item not found in BOM" msgid "Selected stock item does not match BOM line" -msgstr "選擇的庫存品項和BOM的項目不符" +msgstr "在BOM中找不到选定的库存项" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 +#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1742 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 msgid "Stock Item" -msgstr "庫存品項" +msgstr "库存项" -#: build/models.py:1748 +#: build/models.py:1566 msgid "Source stock item" -msgstr "來源庫存項目" +msgstr "源库存项" -#: build/models.py:1761 +#: build/models.py:1579 msgid "Stock quantity to allocate to build" -msgstr "要分配的庫存數量" +msgstr "分配到生产的数量" -#: build/models.py:1769 +#: build/models.py:1587 msgid "Install into" -msgstr "安裝到" +msgstr "安装到" -#: build/models.py:1770 +#: build/models.py:1588 msgid "Destination stock item" -msgstr "目的庫存品項" - -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "零件名称" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "项目编码标签" +msgstr "目标库存项" -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 msgid "Build Output" -msgstr "产出" +msgstr "生产产出" -#: build/serializers.py:184 +#: build/serializers.py:172 msgid "Build output does not match the parent build" -msgstr "产出与之前的生产不匹配" +msgstr "生产产出与对应生产不匹配" -#: build/serializers.py:188 +#: build/serializers.py:176 msgid "Output part does not match BuildOrder part" -msgstr "产出零件与生产订单零件不匹配" +msgstr "产出部件与生产订单部件不匹配" -#: build/serializers.py:192 +#: build/serializers.py:180 msgid "This build output has already been completed" -msgstr "此产出已经完成" +msgstr "此生产产出已经完成" -#: build/serializers.py:203 +#: build/serializers.py:191 msgid "This build output is not fully allocated" -msgstr "此产出尚未完全分配" +msgstr "生产产出未被完成分配" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:211 build/serializers.py:248 msgid "Enter quantity for build output" -msgstr "输入产出数量" +msgstr "输入生产产出数量" -#: build/serializers.py:291 +#: build/serializers.py:269 msgid "Integer quantity required for trackable parts" -msgstr "可追蹤的零件數量必須為整數" +msgstr "对于可追踪的部件,需要整数型数值" -#: build/serializers.py:294 +#: build/serializers.py:272 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" +msgstr "需要整数型数值,因为BOM包含可追踪的部件" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" -msgstr "序號" +msgstr "序列号" -#: build/serializers.py:310 +#: build/serializers.py:288 msgid "Enter serial numbers for build outputs" -msgstr "输出产出的序列号" - -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "地點" +msgstr "输入生产产出的序列号" -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "生产输出的库存地点" - -#: build/serializers.py:330 +#: build/serializers.py:301 msgid "Auto Allocate Serial Numbers" -msgstr "自動分配序號" +msgstr "自动分配序列号" -#: build/serializers.py:331 +#: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" -msgstr "自動為需要項目分配對應的序號" - -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "对于可跟踪的零件,必须提供序列号" +msgstr "自动为所需项分配对应的序列号" -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:337 stock/api.py:995 msgid "The following serial numbers already exist or are invalid" -msgstr "序號已存在或無效" +msgstr "以下序列号已存在或无效" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "必须提供产出清单" +msgstr "必须提供生产产出列表" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 +#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "地点" -#: build/serializers.py:457 +#: build/serializers.py:427 +#, fuzzy +#| msgid "Stock item created" msgid "Stock location for scrapped outputs" -msgstr "废品产出的库存位置" +msgstr "库存项已创建" -#: build/serializers.py:463 +#: build/serializers.py:433 +#, fuzzy +#| msgid "Stock Locations" msgid "Discard Allocations" -msgstr "放棄分配" +msgstr "仓储地点" -#: build/serializers.py:464 +#: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "取消对废品产出的任何库存分配" +msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:439 +#, fuzzy +#| msgid "Location for completed build outputs" msgid "Reason for scrapping build output(s)" -msgstr "废品产出的原因" +msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:529 +#: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "已完成删除的库存地点" +msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:922 +#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "狀態" +msgstr "状态" -#: build/serializers.py:541 +#: build/serializers.py:511 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:542 +#: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "如果库存尚未全部分配,则完成产出" +msgstr "如果库存尚未完成分配,完成产出" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" -msgstr "消费已分配的库存" +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "移除已分配的库存" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" -msgstr "消耗已分配给此生产的任何库存" +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "减去已经分配至此生产的库存" -#: build/serializers.py:661 +#: build/serializers.py:599 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:662 +#: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "删除所有未完成的产出" +msgstr "删除所有未完成的生产产出" -#: build/serializers.py:689 +#: build/serializers.py:627 msgid "Not permitted" -msgstr "不允许" +msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:628 msgid "Accept as consumed by this build order" -msgstr "接受作为此生产订单的消费" +msgstr "接受此构建订单所消耗的内容" -#: build/serializers.py:691 +#: build/serializers.py:629 msgid "Deallocate before completing this build order" -msgstr "完成此生产订单前取消分配" +msgstr "在完成此构建订单前取消分配" -#: build/serializers.py:721 +#: build/serializers.py:651 msgid "Overallocated Stock" msgstr "超出分配的库存" -#: build/serializers.py:723 +#: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "如何处理分配给生产订单的额外库存项" +msgstr "你想如何处理分配给构建订单的额外库存物品" -#: build/serializers.py:733 +#: build/serializers.py:663 msgid "Some stock items have been overallocated" -msgstr "有库存项目已被过度分配" +msgstr "一些库存项已被过度分配" -#: build/serializers.py:738 +#: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "接受未分配" +msgstr "接受未分配的" -#: build/serializers.py:739 +#: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "接受库存项未被完全分配至生产订单" +msgstr "接受库存项未被完成分配至此生产订单" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "所需库存尚未完全分配" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 msgid "Accept Incomplete" -msgstr "接受不完整" +msgstr "接受未完成" -#: build/serializers.py:755 +#: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" -msgstr "允许所需数量的产出未完成" +msgstr "接受所需的生产产出未完成" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" -msgstr "未完成所需生产数量" - -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "生产订单有打开的子生产订单" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "生产订单必须处于生产状态" +msgstr "所需生产数量尚未完成" -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:818 +#: build/serializers.py:734 +#, fuzzy +#| msgid "Build actions" msgid "Build Line" -msgstr "生产行" +msgstr "生产操作" -#: build/serializers.py:828 +#: build/serializers.py:744 msgid "Build output" -msgstr "产出" +msgstr "生产产出" -#: build/serializers.py:836 +#: build/serializers.py:752 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:872 +#: build/serializers.py:788 +#, fuzzy +#| msgid "Delete parameters" msgid "Build Line Item" -msgstr "生产行项目" +msgstr "删除参数" -#: build/serializers.py:886 +#: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" -msgstr "bom_item.part 必须与生产订单零件相同" +msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:817 stock/serializers.py:1065 msgid "Item must be in stock" -msgstr "商品必須有庫存" +msgstr "项目必须在库存中" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:865 order/serializers.py:1233 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "可用量 ({q}) 超出限制" +msgstr "可用量 ({q}) 超出了限制" -#: build/serializers.py:955 +#: build/serializers.py:871 msgid "Build output must be specified for allocation of tracked parts" -msgstr "对于被追踪的零件的分配,必须指定生产产出" +msgstr "对于被追踪的部件的分配,必须指定生产产出" -#: build/serializers.py:962 +#: build/serializers.py:878 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "对于未被追踪的零件,无法指定生产产出" +msgstr "对于未被追踪的部件,无法指定生产产出" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:902 order/serializers.py:1485 msgid "Allocation items must be provided" -msgstr "必须提供分配项目" +msgstr "必须提供分配的项" -#: build/serializers.py:1049 +#: build/serializers.py:965 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" +msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" -#: build/serializers.py:1057 +#: build/serializers.py:973 msgid "Exclude Location" -msgstr "排除位置" +msgstr "排除地点" -#: build/serializers.py:1058 +#: build/serializers.py:974 msgid "Exclude stock items from this selected location" -msgstr "从该选定的库存地点排除库存项" +msgstr "从该选定的仓储地点排除库存项" -#: build/serializers.py:1063 +#: build/serializers.py:979 msgid "Interchangeable Stock" -msgstr "可互換庫存" +msgstr "可互换的库存" -#: build/serializers.py:1064 +#: build/serializers.py:980 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "在多个位置的库存项目可以互换使用" +msgstr "多处地点的库存项可以互换使用" -#: build/serializers.py:1069 +#: build/serializers.py:985 msgid "Substitute Stock" -msgstr "替代品库存" +msgstr "可替换的库存" -#: build/serializers.py:1070 +#: build/serializers.py:986 msgid "Allow allocation of substitute parts" -msgstr "允许分配可替换的零件" +msgstr "允许分配可替换的部件" -#: build/serializers.py:1075 +#: build/serializers.py:991 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1076 +#: build/serializers.py:992 msgid "Allocate optional BOM items to build order" -msgstr "分配可选的物料清单给生产订单" - -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "启动自动分配任务失败" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "供应商零件编号" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "制造商零件编号" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "位置名称" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "构建参考" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "物料清单参考" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "打包" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "零件编号" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "零件的内部零件号" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "零件描述" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "物料清单零件识别号码" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "物料清单零件名称" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "序列号" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "已分配数量" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "可用数量" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "零件类别编号" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "零件类别名称" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "可追踪" +msgstr "分配可选的BOM项目来建立订单" -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "已继承的" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "允许变体" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 +#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 +#: stock/api.py:758 msgid "BOM Item" -msgstr "物料清单项" +msgstr "BOM项" -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" -msgstr "分配库存" +msgstr "" -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:817 part/serializers.py:1489 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 msgid "On Order" -msgstr "已订购" +msgstr "" -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 +#: build/serializers.py:1116 part/serializers.py:1491 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 msgid "In Production" -msgstr "生产中" +msgstr "正在生产" -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "可用的替代品库存" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "可用的变体库存" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "全部可用库存" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "外部库存" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "待定" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "生產" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "被挂起" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "已取消" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "完成" - -#: build/tasks.py:184 +#: build/tasks.py:172 msgid "Stock required for build order" -msgstr "生产订单所需库存" +msgstr "生产订单所需的库存" -#: build/tasks.py:201 +#: build/tasks.py:189 msgid "Overdue Build Order" -msgstr "逾期的生产订单" +msgstr "超时构建顺序" -#: build/tasks.py:206 +#: build/tasks.py:194 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "生产订单 {bo} 现已逾期" +msgstr "生成订单 {bo} 现在已过期" #: build/templates/build/build_base.html:18 +#, fuzzy +#| msgid "Part name" msgid "Part thumbnail" -msgstr "零件缩略图" +msgstr "商品名称" #: build/templates/build/build_base.html:38 #: company/templates/company/supplier_part.html:35 @@ -1764,10 +1792,10 @@ msgstr "零件缩略图" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" -msgstr "条形码操作" +msgstr "" #: build/templates/build/build_base.html:42 #: company/templates/company/supplier_part.html:39 @@ -1776,9 +1804,9 @@ msgstr "条形码操作" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" -msgstr "显示二维码" +msgstr "" #: build/templates/build/build_base.html:45 #: company/templates/company/supplier_part.html:41 @@ -1787,11 +1815,11 @@ msgstr "显示二维码" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" -msgstr "取消关联条形码" +msgstr "" #: build/templates/build/build_base.html:47 #: company/templates/company/supplier_part.html:43 @@ -1800,9 +1828,9 @@ msgstr "取消关联条形码" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" -msgstr "关联条形码" +msgstr "" #: build/templates/build/build_base.html:56 #: order/templates/order/order_base.html:46 @@ -1813,7 +1841,7 @@ msgstr "打印操作" #: build/templates/build/build_base.html:60 msgid "Print build order report" -msgstr "打印生产订单报告" +msgstr "打印构建订单报告" #: build/templates/build/build_base.html:67 msgid "Build actions" @@ -1821,140 +1849,130 @@ msgstr "生产操作" #: build/templates/build/build_base.html:71 msgid "Edit Build" -msgstr "编辑生产操作" +msgstr "编辑生产" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" -msgstr "复制生产操作" +msgid "Cancel Build" +msgstr "取消生产" #: build/templates/build/build_base.html:76 -msgid "Hold Build" -msgstr "挂起生产" +msgid "Duplicate Build" +msgstr "重复构件" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "取消生产操作" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" -msgstr "删除生产操作" - -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "发布生产" +msgstr "删除生产" -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" -msgstr "生产操作完成" +msgstr "生产完成" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" -msgstr "生产操作描述" +msgstr "构建描述" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "没有为此生产订单创建生产产出" +msgstr "针对此生产订单,尚未创建生产产出" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" -msgstr "生产订单已准备好标记为已完成" +msgstr "构建订单已准备好标记为已完成" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "由于仍有未完成的产出,生产订单无法完成" +msgstr "创建订单无法完成,因为未完成的输出" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" -msgstr "未完成所需生产数量" +msgstr "所需生产数量尚未完成" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" -msgstr "库存尚未被完全分配到此生产订单" - -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +msgstr "库存尚未被完全分配到此构建订单" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:297 +#: order/models.py:1294 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "预计日期" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "此次生产的截止日期为 %(target)s" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 msgid "Overdue" msgstr "逾期" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "产出已完成" +msgstr "已完成输出" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 +#: order/models.py:1650 order/models.py:1804 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "销售订单" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "優先等級" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" -msgstr "发布生产订单" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "发布者" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" -msgstr "发布此生产订单?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" +msgstr "优先级" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "删除生产订单" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 +#, fuzzy +#| msgid "Build Order" msgid "Build Order QR Code" -msgstr "生产订单二维码" +msgstr "生产订单" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 +#, fuzzy +#| msgid "Print Build Orders" msgid "Link Barcode to Build Order" -msgstr "将条形码链接到生产订单" +msgstr "打印生产订单" #: build/templates/build/detail.html:15 msgid "Build Details" @@ -1966,48 +1984,48 @@ msgstr "库存来源" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "库存可以从任何可用地点获得。" +msgstr "库存可以从任何可用的地点获得。" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1430 +#: templates/js/translated/purchase_order.js:2190 msgid "Destination" msgstr "目的地" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "未指定目的地" +msgstr "目标位置未指定" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "已分配的零件" +msgstr "已分配的部件" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "队列" +msgstr "批量" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 msgid "Created" msgstr "已创建" #: build/templates/build/detail.html:144 msgid "No target date set" -msgstr "未设置目标日期" +msgstr "无预计日期" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "已完成" @@ -2015,76 +2033,80 @@ msgstr "已完成" msgid "Build not complete" msgstr "生产未完成" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "子生产订单" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" -msgstr "生产订单行项目" +msgid "Allocate Stock to Build" +msgstr "为生产分配库存" #: build/templates/build/detail.html:181 +#, fuzzy +#| msgid "Unallocate stock" msgid "Deallocate stock" -msgstr "取消库存分配" +msgstr "未分配库存" #: build/templates/build/detail.html:182 +#, fuzzy +#| msgid "Unallocate Stock" msgid "Deallocate Stock" -msgstr "取消库存分配" +msgstr "未分配库存" #: build/templates/build/detail.html:184 msgid "Automatically allocate stock to build" -msgstr "自动分配库存以生产" +msgstr "自动分配存货进行生成" #: build/templates/build/detail.html:185 msgid "Auto Allocate" -msgstr "自動分配" +msgstr "自动分配" #: build/templates/build/detail.html:187 msgid "Manually allocate stock to build" -msgstr "手動分配庫存進行生產" +msgstr "手动分配存货进行生成" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "分配庫存" +msgstr "分配库存" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "订单所需零件" +msgstr "订单所需部件" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 msgid "Order Parts" -msgstr "订购零件" +msgstr "订购商品" #: build/templates/build/detail.html:205 +#, fuzzy +#| msgid "Untracked stock has been fully allocated for this Build Order" msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "可用库存已根据此生产订单指定的来源位置进行筛选" +msgstr "未跟踪的库存已完全分配给此生产订单" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" -msgstr "未完成产出" +msgstr "未完成的生产产出" #: build/templates/build/detail.html:219 msgid "Create new build output" -msgstr "创建新的生产产出" +msgstr "创建新构建输出" #: build/templates/build/detail.html:220 msgid "New Build Output" -msgstr "新建生产产出" +msgstr "新建构建输出" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +#, fuzzy +#| msgid "Minimum Stock" msgid "Consumed Stock" -msgstr "已消耗的库存" +msgstr "最低库存" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" -msgstr "已完成的产出" +msgstr "已完成构建输出" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "构建测试统计数据" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +2116,27 @@ msgstr "构建测试统计数据" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "附件" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "生产备注" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "分配完成" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:435 +#, fuzzy +#| msgid "Required stock has not been fully allocated" msgid "All lines have been fully allocated" -msgstr "所有行项目已全部分配" +msgstr "所需库存尚未完全分配" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "新建生产订单" @@ -2120,61 +2144,15 @@ msgstr "新建生产订单" msgid "Build Order Details" msgstr "生产订单详情" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "行项目" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" -msgstr "未完成的产出" - -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "测试统计" - -#: common/api.py:693 -msgid "Is Link" -msgstr "是否链接" - -#: common/api.py:701 -msgid "Is File" -msgstr "是否为文件" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "用户没有权限删除此附件" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "用户没有权限删除此附件" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "无效的货币代码" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "重复的货币代码" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "未提供有效的货币代码" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "暂无插件" +msgstr "未完成输出" #: common/files.py:63 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "Unsupported file format: {ext.upper()}" msgid "Unsupported file format: {fmt}" -msgstr "不支持的文件格式: {fmt}" +msgstr "不支持的文件格式: {ext.uper()}" #: common/files.py:65 msgid "Error reading file (invalid encoding)" @@ -2182,23 +2160,23 @@ msgstr "读取文件时发生错误 (无效编码)" #: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "读取文件时发生错误 (无效格式)" +msgstr "读取文件时发生错误 (无效编码)" #: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "读取文件时发生错误 (尺寸错误)" +msgstr "读取文件时出错(不正确的尺寸)" #: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "读取文件时发生错误 (数据可能已损坏)" +msgstr "读取文件时出错(数据可能已损坏)" #: common/forms.py:12 msgid "File" -msgstr "檔案" +msgstr "文件" #: common/forms.py:12 msgid "Select file to upload" -msgstr "選擇要上傳的檔案" +msgstr "选择要上传的文件" #: common/forms.py:25 msgid "{name.title()} File" @@ -2209,1893 +2187,1796 @@ msgstr "{name.title()} 文件" msgid "Select {name} file to upload" msgstr "选择 {name} 文件上传" -#: common/models.py:86 +#: common/models.py:71 msgid "Updated" -msgstr "已是最新" +msgstr "已更新" -#: common/models.py:87 +#: common/models.py:72 msgid "Timestamp of last update" -msgstr "最后更新时间戳" +msgstr "最后一次更新时间" -#: common/models.py:120 +#: common/models.py:105 msgid "Site URL is locked by configuration" -msgstr "网站 URL 已配置为锁定" +msgstr "" -#: common/models.py:150 +#: common/models.py:130 msgid "Unique project code" -msgstr "唯一项目编码" +msgstr "" -#: common/models.py:157 +#: common/models.py:137 +#, fuzzy +#| msgid "Part description" msgid "Project description" -msgstr "项目描述" +msgstr "商品描述" -#: common/models.py:166 +#: common/models.py:146 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "User or group responsible for this project" -msgstr "负责此项目的用户或群组" +msgstr "负责此订单的用户或群组" -#: common/models.py:783 +#: common/models.py:765 msgid "Settings key (must be unique - case insensitive)" -msgstr "设置键(必须是独特的 - 不区分大小写)" +msgstr "设置键值(必须是唯一的 - 大小写不敏感)" -#: common/models.py:787 +#: common/models.py:769 msgid "Settings value" msgstr "设定值" -#: common/models.py:839 +#: common/models.py:821 msgid "Chosen value is not a valid option" -msgstr "所选值不是一个有效的选项" +msgstr "选择的值不是一个有效的选项" -#: common/models.py:855 +#: common/models.py:837 msgid "Value must be a boolean value" -msgstr "该值必须是布尔值" +msgstr "值必须是布尔量" -#: common/models.py:863 +#: common/models.py:845 msgid "Value must be an integer value" -msgstr "该值必须为整数" +msgstr "值必须为整数" -#: common/models.py:900 +#: common/models.py:882 msgid "Key string must be unique" -msgstr "键字符串必须是唯一的" +msgstr "关键字必须是唯一的" -#: common/models.py:1132 +#: common/models.py:1114 msgid "No group" -msgstr "无分组" +msgstr "无群组" + +#: common/models.py:1157 +msgid "An empty domain is not allowed." +msgstr "不允许空域。" + +#: common/models.py:1159 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "无效的域名: {domain}" + +#: common/models.py:1171 +#, fuzzy +#| msgid "Subcategories" +msgid "No plugin" +msgstr "子类别" -#: common/models.py:1231 +#: common/models.py:1259 msgid "Restart required" msgstr "需要重启" -#: common/models.py:1233 +#: common/models.py:1261 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/models.py:1240 +#: common/models.py:1268 +#, fuzzy +#| msgid "Printing Actions" msgid "Pending migrations" -msgstr "等待迁移" +msgstr "打印操作" -#: common/models.py:1241 +#: common/models.py:1269 msgid "Number of pending database migrations" -msgstr "待处理的数据库迁移数" +msgstr "" -#: common/models.py:1246 +#: common/models.py:1274 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/models.py:1248 +#: common/models.py:1276 msgid "String descriptor for the server instance" -msgstr "服务器实例的字符串描述符" +msgstr "" -#: common/models.py:1252 +#: common/models.py:1280 msgid "Use instance name" -msgstr "使用实例名称" +msgstr "" -#: common/models.py:1253 +#: common/models.py:1281 msgid "Use the instance name in the title-bar" -msgstr "在标题栏中使用实例名称" +msgstr "" -#: common/models.py:1258 +#: common/models.py:1286 msgid "Restrict showing `about`" -msgstr "限制显示 `关于` 信息" +msgstr "" -#: common/models.py:1259 +#: common/models.py:1287 msgid "Show the `about` modal only to superusers" -msgstr "只向超级管理员显示关于信息" +msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1292 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "公司名称" -#: common/models.py:1265 +#: common/models.py:1293 msgid "Internal company name" msgstr "内部公司名称" -#: common/models.py:1269 +#: common/models.py:1297 msgid "Base URL" -msgstr "基本 URL" +msgstr "" -#: common/models.py:1270 +#: common/models.py:1298 msgid "Base URL for server instance" -msgstr "服务器实例的基准 URL" +msgstr "" -#: common/models.py:1276 +#: common/models.py:1304 msgid "Default Currency" -msgstr "默认货币单位" +msgstr "" -#: common/models.py:1277 +#: common/models.py:1305 msgid "Select base currency for pricing calculations" -msgstr "选择价格计算的默认货币" - -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "支持币种" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "支持的货币代码列表" +msgstr "" -#: common/models.py:1290 +#: common/models.py:1311 msgid "Currency Update Interval" -msgstr "货币更新间隔时间" +msgstr "" -#: common/models.py:1292 +#: common/models.py:1313 msgid "How often to update exchange rates (set to zero to disable)" -msgstr "检查更新的频率(设置为零以禁用)" +msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1316 common/models.py:1372 common/models.py:1385 +#: common/models.py:1393 common/models.py:1402 common/models.py:1411 +#: common/models.py:1613 common/models.py:1635 common/models.py:1750 +#: common/models.py:2053 msgid "days" msgstr "天" -#: common/models.py:1299 +#: common/models.py:1320 msgid "Currency Update Plugin" -msgstr "币种更新插件" +msgstr "" -#: common/models.py:1300 +#: common/models.py:1321 msgid "Currency update plugin to use" -msgstr "使用货币更新插件" +msgstr "" -#: common/models.py:1305 +#: common/models.py:1326 msgid "Download from URL" -msgstr "从URL下载" +msgstr "" -#: common/models.py:1307 +#: common/models.py:1328 msgid "Allow download of remote images and files from external URL" -msgstr "允许从外部 URL 下载远程图片和文件" +msgstr "" -#: common/models.py:1313 +#: common/models.py:1334 msgid "Download Size Limit" -msgstr "下载大小限制" +msgstr "" -#: common/models.py:1314 +#: common/models.py:1335 msgid "Maximum allowable download size for remote image" -msgstr "远程图片的最大允许下载大小" +msgstr "" -#: common/models.py:1320 +#: common/models.py:1341 msgid "User-agent used to download from URL" -msgstr "用于从 URL 下载的 User-agent" +msgstr "" -#: common/models.py:1322 +#: common/models.py:1343 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(留空为默认值)" +msgstr "" -#: common/models.py:1327 +#: common/models.py:1348 msgid "Strict URL Validation" -msgstr "严格的 URL 验证" +msgstr "" -#: common/models.py:1328 +#: common/models.py:1349 msgid "Require schema specification when validating URLs" -msgstr "验证 URL 时需要 schema 规范" +msgstr "" -#: common/models.py:1333 +#: common/models.py:1354 msgid "Require confirm" -msgstr "需要确认" +msgstr "" -#: common/models.py:1334 +#: common/models.py:1355 msgid "Require explicit user confirmation for certain action." -msgstr "对某些操作需要用户明确确认。" +msgstr "" -#: common/models.py:1339 +#: common/models.py:1360 msgid "Tree Depth" -msgstr "树深度" +msgstr "" -#: common/models.py:1341 +#: common/models.py:1362 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "树视图的默认树深度。更深的层级可以在需要时延迟加载。" +msgstr "" -#: common/models.py:1347 +#: common/models.py:1368 msgid "Update Check Interval" -msgstr "更新检查间隔" +msgstr "" -#: common/models.py:1348 +#: common/models.py:1369 msgid "How often to check for updates (set to zero to disable)" -msgstr "检查更新的频率(设置为零以禁用)" +msgstr "" -#: common/models.py:1354 +#: common/models.py:1375 msgid "Automatic Backup" -msgstr "自動備份" +msgstr "" -#: common/models.py:1355 +#: common/models.py:1376 msgid "Enable automatic backup of database and media files" -msgstr "啟動資料庫和媒體文件自動備份" +msgstr "" -#: common/models.py:1360 +#: common/models.py:1381 msgid "Auto Backup Interval" -msgstr "自動備份間隔" +msgstr "" -#: common/models.py:1361 +#: common/models.py:1382 msgid "Specify number of days between automated backup events" -msgstr "指定自动备份之间的间隔天数" +msgstr "" -#: common/models.py:1367 +#: common/models.py:1388 msgid "Task Deletion Interval" -msgstr "任务删除间隔" +msgstr "" -#: common/models.py:1369 +#: common/models.py:1390 msgid "Background task results will be deleted after specified number of days" -msgstr "后台任务结果将在指定天数后删除" +msgstr "" -#: common/models.py:1376 +#: common/models.py:1397 msgid "Error Log Deletion Interval" -msgstr "错误日志删除间隔" +msgstr "" -#: common/models.py:1378 +#: common/models.py:1399 msgid "Error logs will be deleted after specified number of days" -msgstr "错误日志将在指定天数后被删除" +msgstr "" -#: common/models.py:1385 +#: common/models.py:1406 msgid "Notification Deletion Interval" -msgstr "通知删除间隔" +msgstr "" -#: common/models.py:1387 +#: common/models.py:1408 msgid "User notifications will be deleted after specified number of days" -msgstr "用户通知将在指定天数后被删除" +msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "条形码支持" +msgstr "" -#: common/models.py:1395 +#: common/models.py:1416 +#, fuzzy +#| msgid "Enable barcode scanner support" msgid "Enable barcode scanner support in the web interface" -msgstr "在网页界面启用条形码扫描器支持" +msgstr "启用条形码扫描支持" -#: common/models.py:1400 +#: common/models.py:1421 msgid "Barcode Input Delay" -msgstr "条形码扫描延迟设置" +msgstr "" -#: common/models.py:1401 +#: common/models.py:1422 msgid "Barcode input processing delay time" -msgstr "条形码输入处理延迟时间" +msgstr "" -#: common/models.py:1407 +#: common/models.py:1428 msgid "Barcode Webcam Support" -msgstr "条码摄像头支持" +msgstr "" -#: common/models.py:1408 +#: common/models.py:1429 msgid "Allow barcode scanning via webcam in browser" -msgstr "允许通过网络摄像头扫描条形码" - -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "条形码显示数据" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "在浏览器中将条形码数据显示为文本" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "条形码生成插件" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "用于内部条形码数据生成的插件" +msgstr "" -#: common/models.py:1425 +#: common/models.py:1434 +#, fuzzy +#| msgid "Part description" msgid "Part Revisions" -msgstr "零件修订" +msgstr "商品描述" -#: common/models.py:1426 +#: common/models.py:1435 +#, fuzzy +#| msgid "Enable internal prices for parts" msgid "Enable revision field for Part" -msgstr "启用零件修订字段" - -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "仅限装配修订版本" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "仅允许对装配零件进行修订" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "允许从装配中删除" +msgstr "启用内部商品价格" -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "允许删除已在装配中使用的零件" - -#: common/models.py:1443 +#: common/models.py:1440 msgid "IPN Regex" -msgstr "IPN 内部零件号" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1441 msgid "Regular expression pattern for matching Part IPN" -msgstr "匹配零件 IPN(内部零件号)的正则表达式模式" +msgstr "" -#: common/models.py:1447 +#: common/models.py:1444 msgid "Allow Duplicate IPN" -msgstr "允许重复的 IPN(内部零件号)" +msgstr "" -#: common/models.py:1448 +#: common/models.py:1445 msgid "Allow multiple parts to share the same IPN" -msgstr "允许多个零件共享相同的 IPN(内部零件号)" +msgstr "" -#: common/models.py:1453 +#: common/models.py:1450 msgid "Allow Editing IPN" -msgstr "允许编辑 IPN(内部零件号)" +msgstr "" -#: common/models.py:1454 +#: common/models.py:1451 msgid "Allow changing the IPN value while editing a part" -msgstr "允许编辑零件时更改内部零件号" +msgstr "" -#: common/models.py:1459 +#: common/models.py:1456 msgid "Copy Part BOM Data" -msgstr "复制零件物料清单数据" +msgstr "" -#: common/models.py:1460 +#: common/models.py:1457 msgid "Copy BOM data by default when duplicating a part" -msgstr "复制零件时默认复制物料清单数据" +msgstr "" -#: common/models.py:1465 +#: common/models.py:1462 msgid "Copy Part Parameter Data" -msgstr "复制零件参数数据" +msgstr "" -#: common/models.py:1466 +#: common/models.py:1463 msgid "Copy parameter data by default when duplicating a part" -msgstr "复制零件时默认复制参数数据" +msgstr "" -#: common/models.py:1471 +#: common/models.py:1468 msgid "Copy Part Test Data" -msgstr "复制零件测试数据" +msgstr "" -#: common/models.py:1472 +#: common/models.py:1469 msgid "Copy test data by default when duplicating a part" -msgstr "复制零件时默认复制测试数据" +msgstr "" -#: common/models.py:1477 +#: common/models.py:1474 msgid "Copy Category Parameter Templates" -msgstr "复制类别参数模板" +msgstr "" -#: common/models.py:1478 +#: common/models.py:1475 msgid "Copy category parameter templates when creating a part" -msgstr "创建零件时复制类别参数模板" +msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1480 part/admin.py:108 part/models.py:3772 +#: report/models.py:182 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "模板" -#: common/models.py:1484 +#: common/models.py:1481 msgid "Parts are templates by default" -msgstr "零件默认为模板" +msgstr "" + +#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "组装" -#: common/models.py:1490 +#: common/models.py:1487 msgid "Parts can be assembled from other components by default" -msgstr "默认情况下,元件可由其他零件组装而成" +msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "组件" -#: common/models.py:1496 +#: common/models.py:1493 msgid "Parts can be used as sub-components by default" -msgstr "默认情况下,零件可用作子部件" +msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1498 part/admin.py:100 part/models.py:1034 msgid "Purchaseable" msgstr "可购买" -#: common/models.py:1502 +#: common/models.py:1499 msgid "Parts are purchaseable by default" -msgstr "默认情况下可购买零件" +msgstr "商品默认可购买" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "可销售" -#: common/models.py:1508 +#: common/models.py:1505 msgid "Parts are salable by default" -msgstr "零件默认为可销售" +msgstr "商品默认可销售" + +#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "可追踪" -#: common/models.py:1514 +#: common/models.py:1511 msgid "Parts are trackable by default" -msgstr "默认情况下可跟踪零件" +msgstr "商品默认可跟踪" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1516 part/admin.py:117 part/models.py:1050 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 msgid "Virtual" -msgstr "虚拟的" +msgstr "虚拟" -#: common/models.py:1520 +#: common/models.py:1517 msgid "Parts are virtual by default" -msgstr "默认情况下,零件是虚拟的" +msgstr "商品默认是虚拟的" -#: common/models.py:1525 +#: common/models.py:1522 msgid "Show Import in Views" -msgstr "在视图中显示导入" +msgstr "视图中显示导入" -#: common/models.py:1526 +#: common/models.py:1523 msgid "Display the import wizard in some part views" -msgstr "在某些零件视图中显示导入向导" +msgstr "在一些商品视图中显示导入向导" -#: common/models.py:1531 +#: common/models.py:1528 msgid "Show related parts" -msgstr "显示相关零件" +msgstr "显示相关商品" -#: common/models.py:1532 +#: common/models.py:1529 msgid "Display related parts for a part" -msgstr "显示零件的相关零件" +msgstr "" -#: common/models.py:1537 +#: common/models.py:1534 msgid "Initial Stock Data" -msgstr "初始库存数据" +msgstr "" -#: common/models.py:1538 +#: common/models.py:1535 msgid "Allow creation of initial stock when adding a new part" -msgstr "允许在添加新零件时创建初始库存" +msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1540 templates/js/translated/part.js:107 msgid "Initial Supplier Data" -msgstr "初始供应商数据" +msgstr "" -#: common/models.py:1545 +#: common/models.py:1542 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "允许在添加新零件时创建初始供应商数据" +msgstr "" -#: common/models.py:1551 +#: common/models.py:1548 msgid "Part Name Display Format" -msgstr "零件名称显示格式" +msgstr "" -#: common/models.py:1552 +#: common/models.py:1549 msgid "Format to display the part name" -msgstr "显示零件名称的格式" +msgstr "" -#: common/models.py:1558 +#: common/models.py:1555 msgid "Part Category Default Icon" -msgstr "零件类别默认图标" +msgstr "" -#: common/models.py:1559 +#: common/models.py:1556 msgid "Part category default icon (empty means no icon)" -msgstr "零件类别默认图标 (空表示没有图标)" +msgstr "" -#: common/models.py:1564 +#: common/models.py:1560 +#, fuzzy +#| msgid "Parameter units" msgid "Enforce Parameter Units" -msgstr "强制参数单位" +msgstr "参数单位" -#: common/models.py:1566 +#: common/models.py:1562 msgid "If units are provided, parameter values must match the specified units" -msgstr "如果提供了单位,参数值必须与指定的单位匹配" +msgstr "" -#: common/models.py:1572 +#: common/models.py:1568 msgid "Minimum Pricing Decimal Places" -msgstr "最小定价小数位数" +msgstr "" -#: common/models.py:1574 +#: common/models.py:1570 msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "呈现定价数据时显示的最小小数位数" +msgstr "" -#: common/models.py:1585 +#: common/models.py:1576 msgid "Maximum Pricing Decimal Places" -msgstr "最大定价小数位数" +msgstr "" -#: common/models.py:1587 +#: common/models.py:1578 msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "呈现定价数据时显示的最大小数位数" +msgstr "" -#: common/models.py:1598 +#: common/models.py:1584 msgid "Use Supplier Pricing" -msgstr "使用供应商定价" +msgstr "" -#: common/models.py:1600 +#: common/models.py:1586 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "将供应商的价批发价纳入总体定价计算中" +msgstr "" -#: common/models.py:1606 +#: common/models.py:1592 msgid "Purchase History Override" -msgstr "购买历史记录覆盖" +msgstr "" -#: common/models.py:1608 +#: common/models.py:1594 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "历史采购订单定价优先于供应商批发价" +msgstr "" -#: common/models.py:1614 +#: common/models.py:1600 msgid "Use Stock Item Pricing" -msgstr "使用库存项定价" +msgstr "" -#: common/models.py:1616 +#: common/models.py:1602 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "使用手动输入的库存数据进行定价计算" +msgstr "" -#: common/models.py:1622 +#: common/models.py:1608 msgid "Stock Item Pricing Age" -msgstr "库存项目定价时间" +msgstr "" -#: common/models.py:1624 +#: common/models.py:1610 msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "从定价计算中排除超过此天数的库存项目" +msgstr "" -#: common/models.py:1631 +#: common/models.py:1617 msgid "Use Variant Pricing" -msgstr "使用变体定价" +msgstr "" -#: common/models.py:1632 +#: common/models.py:1618 msgid "Include variant pricing in overall pricing calculations" -msgstr "在整体定价计算中包括变体定价" +msgstr "" -#: common/models.py:1637 +#: common/models.py:1623 msgid "Active Variants Only" -msgstr "仅限活跃变体" +msgstr "" -#: common/models.py:1639 +#: common/models.py:1625 msgid "Only use active variant parts for calculating variant pricing" -msgstr "仅使用活跃变体零件计算变体价格" +msgstr "" -#: common/models.py:1645 +#: common/models.py:1631 msgid "Pricing Rebuild Interval" -msgstr "价格重建间隔" +msgstr "" -#: common/models.py:1647 +#: common/models.py:1633 msgid "Number of days before part pricing is automatically updated" -msgstr "零件价格自动更新前的天数" +msgstr "" -#: common/models.py:1654 +#: common/models.py:1640 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:1655 +#: common/models.py:1641 msgid "Enable internal prices for parts" -msgstr "启用内部零件价格" +msgstr "启用内部商品价格" -#: common/models.py:1660 +#: common/models.py:1646 msgid "Internal Price Override" -msgstr "覆盖内部价格" +msgstr "" -#: common/models.py:1662 +#: common/models.py:1648 msgid "If available, internal prices override price range calculations" -msgstr "如果有内部价格,内部价格将覆盖价格范围计算" +msgstr "" -#: common/models.py:1668 +#: common/models.py:1654 msgid "Enable label printing" -msgstr "启用标签打印功能" +msgstr "" -#: common/models.py:1669 +#: common/models.py:1655 msgid "Enable label printing from the web interface" -msgstr "启用从网络界面打印标签" +msgstr "" -#: common/models.py:1674 +#: common/models.py:1660 msgid "Label Image DPI" -msgstr "标签图片 DPI" +msgstr "" -#: common/models.py:1676 +#: common/models.py:1662 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率" +msgstr "" -#: common/models.py:1682 +#: common/models.py:1668 msgid "Enable Reports" -msgstr "启用报告" +msgstr "" -#: common/models.py:1683 +#: common/models.py:1669 msgid "Enable generation of reports" -msgstr "启用报告生成" +msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1674 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:1689 +#: common/models.py:1675 msgid "Generate reports in debug mode (HTML output)" -msgstr "以调试模式生成报告(HTML 输出)" +msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:1694 +#: common/models.py:1680 +#, fuzzy +#| msgid "No Reports Found" msgid "Log Report Errors" -msgstr "日志错误报告" +msgstr "没有找到报表" -#: common/models.py:1695 +#: common/models.py:1681 msgid "Log errors which occur when generating reports" -msgstr "记录生成报告时出现的错误" +msgstr "" -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:203 msgid "Page Size" msgstr "页面大小" -#: common/models.py:1701 +#: common/models.py:1687 msgid "Default page size for PDF reports" -msgstr "PDF 报告默认页面大小" +msgstr "PDF 报表默认页面大小" -#: common/models.py:1706 +#: common/models.py:1692 msgid "Enable Test Reports" -msgstr "启用测试报告" +msgstr "" -#: common/models.py:1707 +#: common/models.py:1693 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:1712 +#: common/models.py:1698 msgid "Attach Test Reports" -msgstr "添加测试报告" +msgstr "" -#: common/models.py:1714 +#: common/models.py:1700 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "在打印测试报告时,将测试报告副本附加到相关的库存项" +msgstr "" -#: common/models.py:1720 +#: common/models.py:1706 msgid "Globally Unique Serials" -msgstr "全局唯一序列号" +msgstr "" -#: common/models.py:1721 +#: common/models.py:1707 msgid "Serial numbers for stock items must be globally unique" -msgstr "库存项的序列号必须全局唯一" +msgstr "" -#: common/models.py:1726 +#: common/models.py:1712 msgid "Autofill Serial Numbers" -msgstr "自动填充序列号" +msgstr "" -#: common/models.py:1727 +#: common/models.py:1713 msgid "Autofill serial numbers in forms" -msgstr "在表格中自动填充序列号" +msgstr "" -#: common/models.py:1732 +#: common/models.py:1718 msgid "Delete Depleted Stock" -msgstr "删除已耗尽的库存" +msgstr "" -#: common/models.py:1734 +#: common/models.py:1720 msgid "Determines default behavior when a stock item is depleted" -msgstr "设置库存耗尽时的默认行为" +msgstr "" -#: common/models.py:1740 +#: common/models.py:1726 msgid "Batch Code Template" -msgstr "批号模板" +msgstr "" -#: common/models.py:1742 +#: common/models.py:1728 msgid "Template for generating default batch codes for stock items" -msgstr "为库存项生成默认批号的模板" +msgstr "" -#: common/models.py:1747 +#: common/models.py:1733 msgid "Stock Expiry" -msgstr "库存过期" +msgstr "库存到期" -#: common/models.py:1748 +#: common/models.py:1734 msgid "Enable stock expiry functionality" -msgstr "启用库存过期功能" +msgstr "启用库存到期功能" -#: common/models.py:1753 +#: common/models.py:1739 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:1754 +#: common/models.py:1740 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:1759 +#: common/models.py:1745 msgid "Stock Stale Time" -msgstr "库存过期时间" +msgstr "" -#: common/models.py:1761 +#: common/models.py:1747 msgid "Number of days stock items are considered stale before expiring" -msgstr "库存项在到期前被视为过期的天数" +msgstr "" -#: common/models.py:1768 +#: common/models.py:1754 msgid "Build Expired Stock" -msgstr "生产过期库存" +msgstr "" -#: common/models.py:1769 +#: common/models.py:1755 msgid "Allow building with expired stock" -msgstr "允许用过期的库存生产" +msgstr "" -#: common/models.py:1774 +#: common/models.py:1760 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:1775 +#: common/models.py:1761 msgid "Enable ownership control over stock locations and items" -msgstr "启用库存地点和项目的所有权控制" +msgstr "" -#: common/models.py:1780 +#: common/models.py:1766 msgid "Stock Location Default Icon" -msgstr "库存地点默认图标" +msgstr "" -#: common/models.py:1781 +#: common/models.py:1767 msgid "Stock location default icon (empty means no icon)" -msgstr "库存地点默认图标 (空表示没有图标)" +msgstr "" -#: common/models.py:1786 +#: common/models.py:1771 +#, fuzzy +#| msgid "Select Stock Items" msgid "Show Installed Stock Items" -msgstr "显示已安装的库存项" +msgstr "选择库存项" -#: common/models.py:1787 +#: common/models.py:1772 msgid "Display installed stock items in stock tables" -msgstr "在库存表中显示已安装的库存项" +msgstr "" -#: common/models.py:1792 +#: common/models.py:1777 msgid "Check BOM when installing items" -msgstr "在安装项目时检查物料清单" +msgstr "" -#: common/models.py:1794 +#: common/models.py:1779 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "已安装的库存项目必须存在于上级零件的物料清单中" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "允许超出库存转移" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "允许非库存的库存项目在库存位置之间转移" +msgstr "" -#: common/models.py:1808 +#: common/models.py:1785 msgid "Build Order Reference Pattern" -msgstr "生产订单参考模式" +msgstr "" -#: common/models.py:1810 +#: common/models.py:1787 msgid "Required pattern for generating Build Order reference field" -msgstr "生成生产订单参考字段所需的模式" +msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 +#: common/models.py:1793 common/models.py:1821 common/models.py:1843 +#: common/models.py:1871 +#, fuzzy +#| msgid "Responsible" msgid "Require Responsible Owner" -msgstr "要求负责人" +msgstr "责任人" -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 +#: common/models.py:1794 common/models.py:1822 common/models.py:1844 +#: common/models.py:1872 msgid "A responsible owner must be assigned to each order" -msgstr "必须为每个订单分配一个负责人" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "需要活动零件" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "防止为非活动零件创建生产订单" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "需要锁定零件" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "防止为未锁定的零件创建生产订单" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "需要有效的物料清单" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "除非物料清单已验证,否则禁止创建生产订单" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "需要关闭子订单" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "在所有子订单关闭之前,阻止生产订单的完成" +msgstr "" -#: common/models.py:1850 +#: common/models.py:1799 msgid "Block Until Tests Pass" -msgstr "阻止直到测试通过" +msgstr "" -#: common/models.py:1852 +#: common/models.py:1801 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "在所有必要的测试通过之前,阻止产出完成" +msgstr "" -#: common/models.py:1858 +#: common/models.py:1807 +#, fuzzy +#| msgid "Sales Orders" msgid "Enable Return Orders" -msgstr "启用订单退货" +msgstr "销售订单" -#: common/models.py:1859 +#: common/models.py:1808 msgid "Enable return order functionality in the user interface" -msgstr "在用户界面中启用订单退货功能" +msgstr "" -#: common/models.py:1864 +#: common/models.py:1813 +#, fuzzy +#| msgid "Build Order Reference" msgid "Return Order Reference Pattern" -msgstr "退货订单参考模式" +msgstr "相关生产订单" -#: common/models.py:1866 +#: common/models.py:1815 msgid "Required pattern for generating Return Order reference field" -msgstr "生成退货订单参考字段所需的模式" +msgstr "" -#: common/models.py:1878 +#: common/models.py:1827 +#, fuzzy +#| msgid "Complete Build Order" msgid "Edit Completed Return Orders" -msgstr "编辑已完成的退货订单" +msgstr "生产订单完成" -#: common/models.py:1880 +#: common/models.py:1829 msgid "Allow editing of return orders after they have been completed" -msgstr "允许编辑已完成的退货订单" +msgstr "" -#: common/models.py:1886 +#: common/models.py:1835 msgid "Sales Order Reference Pattern" -msgstr "销售订单参考模式" +msgstr "" -#: common/models.py:1888 +#: common/models.py:1837 msgid "Required pattern for generating Sales Order reference field" -msgstr "生成销售订单参考字段所需参照模式" +msgstr "" -#: common/models.py:1900 +#: common/models.py:1849 msgid "Sales Order Default Shipment" -msgstr "销售订单默认配送方式" +msgstr "" -#: common/models.py:1901 +#: common/models.py:1850 msgid "Enable creation of default shipment with sales orders" -msgstr "启用创建销售订单的默认配送功能" +msgstr "" -#: common/models.py:1906 +#: common/models.py:1855 msgid "Edit Completed Sales Orders" -msgstr "编辑已完成的销售订单" +msgstr "" -#: common/models.py:1908 +#: common/models.py:1857 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "允许在订单配送或完成后编辑销售订单" - -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "标记该订单为已完成?" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态" +msgstr "" -#: common/models.py:1922 +#: common/models.py:1863 msgid "Purchase Order Reference Pattern" -msgstr "采购订单参考模式" +msgstr "" -#: common/models.py:1924 +#: common/models.py:1865 msgid "Required pattern for generating Purchase Order reference field" -msgstr "生成采购订单参考字段所需的模式" +msgstr "" -#: common/models.py:1936 +#: common/models.py:1877 msgid "Edit Completed Purchase Orders" -msgstr "编辑已完成的采购订单" +msgstr "" -#: common/models.py:1938 +#: common/models.py:1879 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "允许在采购订单已配送或完成后编辑订单" +msgstr "" -#: common/models.py:1944 +#: common/models.py:1885 +#, fuzzy +#| msgid "Create Purchase Order" msgid "Auto Complete Purchase Orders" -msgstr "自动完成采购订单" +msgstr "创建采购订单" -#: common/models.py:1946 +#: common/models.py:1887 msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "当收到所有行项目时,自动将采购订单标记为完成" +msgstr "" -#: common/models.py:1953 +#: common/models.py:1894 msgid "Enable password forgot" -msgstr "忘记启用密码" +msgstr "" -#: common/models.py:1954 +#: common/models.py:1895 msgid "Enable password forgot function on the login pages" -msgstr "在登录页面上启用忘记密码功能" +msgstr "" -#: common/models.py:1959 +#: common/models.py:1900 msgid "Enable registration" -msgstr "启用注册" +msgstr "" -#: common/models.py:1960 +#: common/models.py:1901 msgid "Enable self-registration for users on the login pages" -msgstr "在登录页面为用户启用自行注册功能" +msgstr "" -#: common/models.py:1965 +#: common/models.py:1906 msgid "Enable SSO" -msgstr "启用单点登录" +msgstr "" -#: common/models.py:1966 +#: common/models.py:1907 msgid "Enable SSO on the login pages" -msgstr "在登录界面启用单点登录" +msgstr "" -#: common/models.py:1971 +#: common/models.py:1912 msgid "Enable SSO registration" -msgstr "启用单点登录注册" +msgstr "" -#: common/models.py:1973 +#: common/models.py:1914 msgid "Enable self-registration via SSO for users on the login pages" -msgstr "允许登录页面上的用户通过 SSO 进行自我注册" - -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "启用单点登录群组同步" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "启用库存管理系统组和由身份提供者提供的组的同步功能" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "单点登录系统组密钥" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "由身份提供者提供的组声明属性名称" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "单点登录系统组地图" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "从单点登录系统组组到本地库存管理系统组的映射。如果本地组不存在,它将被创建。" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "移除单点登录系统以外的群组" - -#: common/models.py:2005 -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 "" -#: common/models.py:2011 +#: common/models.py:1920 msgid "Email required" -msgstr "需要邮箱地址" +msgstr "" -#: common/models.py:2012 +#: common/models.py:1921 msgid "Require user to supply mail on signup" -msgstr "要求用户在注册时提供邮件" +msgstr "" -#: common/models.py:2017 +#: common/models.py:1926 msgid "Auto-fill SSO users" -msgstr "自动填充单点登录系统用户" +msgstr "" -#: common/models.py:2019 +#: common/models.py:1928 msgid "Automatically fill out user-details from SSO account-data" -msgstr "自动使用单点登录系统账户的数据填写用户详细信息" +msgstr "" -#: common/models.py:2025 +#: common/models.py:1934 msgid "Mail twice" -msgstr "发两次邮件" +msgstr "" -#: common/models.py:2026 +#: common/models.py:1935 msgid "On signup ask users twice for their mail" -msgstr "注册时询问用户他们的电子邮件两次" +msgstr "" -#: common/models.py:2031 +#: common/models.py:1940 msgid "Password twice" -msgstr "两次输入密码" +msgstr "" -#: common/models.py:2032 +#: common/models.py:1941 msgid "On signup ask users twice for their password" -msgstr "当注册时请用户输入密码两次" +msgstr "" -#: common/models.py:2037 +#: common/models.py:1946 msgid "Allowed domains" -msgstr "域名白名单" +msgstr "" -#: common/models.py:2039 +#: common/models.py:1948 msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)" +msgstr "" -#: common/models.py:2045 +#: common/models.py:1954 msgid "Group on signup" -msgstr "注册群组" +msgstr "" -#: common/models.py:2047 -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/models.py:1955 +msgid "Group to which new users are assigned on registration" +msgstr "" -#: common/models.py:2053 +#: common/models.py:1960 msgid "Enforce MFA" -msgstr "强制启用多因素安全认证" +msgstr "" -#: common/models.py:2054 +#: common/models.py:1961 msgid "Users must use multifactor security." -msgstr "用户必须使用多因素安全认证。" +msgstr "" -#: common/models.py:2059 +#: common/models.py:1966 msgid "Check plugins on startup" -msgstr "启动时检查插件" +msgstr "" -#: common/models.py:2061 +#: common/models.py:1968 msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用" +msgstr "" -#: common/models.py:2069 +#: common/models.py:1976 msgid "Check for plugin updates" -msgstr "检查插件更新" +msgstr "" -#: common/models.py:2070 +#: common/models.py:1977 msgid "Enable periodic checks for updates to installed plugins" -msgstr "启用定期检查已安装插件的更新" +msgstr "" -#: common/models.py:2076 +#: common/models.py:1983 msgid "Enable URL integration" -msgstr "启用统一资源定位符集成" +msgstr "" -#: common/models.py:2077 +#: common/models.py:1984 msgid "Enable plugins to add URL routes" -msgstr "启用插件以添加统一资源定位符路由" +msgstr "" -#: common/models.py:2083 +#: common/models.py:1990 msgid "Enable navigation integration" -msgstr "启用导航集成" +msgstr "" -#: common/models.py:2084 +#: common/models.py:1991 msgid "Enable plugins to integrate into navigation" -msgstr "启用插件以集成到导航中" +msgstr "" -#: common/models.py:2090 +#: common/models.py:1997 msgid "Enable app integration" -msgstr "启用应用集成" +msgstr "" -#: common/models.py:2091 +#: common/models.py:1998 msgid "Enable plugins to add apps" -msgstr "启用插件添加应用" +msgstr "" -#: common/models.py:2097 +#: common/models.py:2004 msgid "Enable schedule integration" -msgstr "启用调度集成" +msgstr "" -#: common/models.py:2098 +#: common/models.py:2005 msgid "Enable plugins to run scheduled tasks" -msgstr "启用插件来运行预定任务" +msgstr "" -#: common/models.py:2104 +#: common/models.py:2011 msgid "Enable event integration" -msgstr "启用事件集成" +msgstr "" -#: common/models.py:2105 +#: common/models.py:2012 msgid "Enable plugins to respond to internal events" -msgstr "启用插件响应内部事件" +msgstr "" -#: common/models.py:2111 +#: common/models.py:2018 +#, fuzzy +#| msgid "Sales Orders" msgid "Enable project codes" -msgstr "启用项目编码" +msgstr "销售订单" -#: common/models.py:2112 +#: common/models.py:2019 msgid "Enable project codes for tracking projects" -msgstr "启用项目编码来跟踪项目" +msgstr "" -#: common/models.py:2117 +#: common/models.py:2024 msgid "Stocktake Functionality" -msgstr "盘点功能" +msgstr "" -#: common/models.py:2119 +#: common/models.py:2026 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" -msgstr "启用盘点功能以记录库存水平和计算库存值" +msgstr "" -#: common/models.py:2125 +#: common/models.py:2032 +#, fuzzy +#| msgid "Exclude Location" msgid "Exclude External Locations" -msgstr "排除外部地点" +msgstr "排除地点" -#: common/models.py:2127 +#: common/models.py:2034 +#, fuzzy +#| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "从盘点计算中排除外部地点的库存项" +msgstr "从该选定的仓储地点排除库存项" -#: common/models.py:2133 +#: common/models.py:2040 msgid "Automatic Stocktake Period" -msgstr "自动盘点周期" +msgstr "" -#: common/models.py:2135 +#: common/models.py:2042 msgid "Number of days between automatic stocktake recording (set to zero to disable)" -msgstr "自动盘点记录之间的天数 (设置为零以禁用)" +msgstr "" -#: common/models.py:2141 +#: common/models.py:2048 msgid "Report Deletion Interval" -msgstr "报告删除间隔" +msgstr "" -#: common/models.py:2143 +#: common/models.py:2050 msgid "Stocktake reports will be deleted after specified number of days" -msgstr "盘点报告将在指定天数后删除" +msgstr "" -#: common/models.py:2150 +#: common/models.py:2057 msgid "Display Users full names" -msgstr "显示用户全名" +msgstr "" -#: common/models.py:2151 +#: common/models.py:2058 msgid "Display Users full names instead of usernames" -msgstr "显示用户全名而不是用户名" +msgstr "" -#: common/models.py:2156 +#: common/models.py:2063 msgid "Enable Test Station Data" -msgstr "启用测试站数据" +msgstr "" -#: common/models.py:2157 +#: common/models.py:2064 +#, fuzzy +#| msgid "Enable generation of test reports" msgid "Enable test station data collection for test results" -msgstr "启用测试站数据收集以获取测试结果" +msgstr "启用生成测试报表" -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:2076 common/models.py:2486 msgid "Settings key (must be unique - case insensitive" -msgstr "设置键 (必须是唯一的,不区分大小写" +msgstr "" -#: common/models.py:2212 +#: common/models.py:2119 +#, fuzzy +#| msgid "Build to allocate parts" msgid "Hide inactive parts" -msgstr "隐藏非活动零件" +msgstr "生产以分配部件" -#: common/models.py:2214 +#: common/models.py:2121 msgid "Hide inactive parts in results displayed on the homepage" -msgstr "隐藏主页上显示的结果中的非活动零件" +msgstr "" -#: common/models.py:2220 +#: common/models.py:2127 msgid "Show subscribed parts" -msgstr "显示已订阅的零件" +msgstr "" -#: common/models.py:2221 +#: common/models.py:2128 msgid "Show subscribed parts on the homepage" -msgstr "在主页上显示已订阅的零件" +msgstr "" -#: common/models.py:2226 +#: common/models.py:2133 msgid "Show subscribed categories" -msgstr "显示已订阅的类别" +msgstr "" -#: common/models.py:2227 +#: common/models.py:2134 msgid "Show subscribed part categories on the homepage" -msgstr "在主页上显示已订阅的零件类别" +msgstr "" -#: common/models.py:2232 +#: common/models.py:2139 msgid "Show latest parts" -msgstr "显示最新零件" +msgstr "显示最近商品" -#: common/models.py:2233 +#: common/models.py:2140 msgid "Show latest parts on the homepage" -msgstr "在主页上显示最新零件" +msgstr "在主页上显示最近商品" -#: common/models.py:2238 +#: common/models.py:2145 msgid "Show invalid BOMs" -msgstr "显示无效的物料清单" +msgstr "" -#: common/models.py:2239 +#: common/models.py:2146 msgid "Show BOMs that await validation on the homepage" -msgstr "在主页上显示等待验证的物料清单" +msgstr "" -#: common/models.py:2244 +#: common/models.py:2151 msgid "Show recent stock changes" -msgstr "显示最近的库存变动" +msgstr "" -#: common/models.py:2245 +#: common/models.py:2152 msgid "Show recently changed stock items on the homepage" -msgstr "在主页上显示最近更改的库存项目" +msgstr "" -#: common/models.py:2250 +#: common/models.py:2157 msgid "Show low stock" -msgstr "显示低库存" +msgstr "" -#: common/models.py:2251 +#: common/models.py:2158 msgid "Show low stock items on the homepage" -msgstr "在主页上显示低库存商品" +msgstr "" -#: common/models.py:2256 +#: common/models.py:2163 msgid "Show depleted stock" -msgstr "显示已耗尽的库存" +msgstr "" -#: common/models.py:2257 +#: common/models.py:2164 msgid "Show depleted stock items on the homepage" -msgstr "在主页上显示已耗尽的库存项目" +msgstr "" -#: common/models.py:2262 +#: common/models.py:2169 msgid "Show needed stock" -msgstr "显示所需库存" +msgstr "" -#: common/models.py:2263 +#: common/models.py:2170 msgid "Show stock items needed for builds on the homepage" -msgstr "在主页上显示构建所需的库存项目" +msgstr "" -#: common/models.py:2268 +#: common/models.py:2175 msgid "Show expired stock" -msgstr "显示过期库存" +msgstr "" -#: common/models.py:2269 +#: common/models.py:2176 msgid "Show expired stock items on the homepage" -msgstr "在主页上显示过期的库存项目" +msgstr "" -#: common/models.py:2274 +#: common/models.py:2181 msgid "Show stale stock" -msgstr "显示过期库存" +msgstr "" -#: common/models.py:2275 +#: common/models.py:2182 msgid "Show stale stock items on the homepage" -msgstr "在主页上显示过期库存商品" +msgstr "" -#: common/models.py:2280 +#: common/models.py:2187 msgid "Show pending builds" -msgstr "显示待处理的构建" +msgstr "" -#: common/models.py:2281 +#: common/models.py:2188 msgid "Show pending builds on the homepage" -msgstr "在主页上显示待处理的构建" +msgstr "" -#: common/models.py:2286 +#: common/models.py:2193 msgid "Show overdue builds" -msgstr "显示过期的构建" +msgstr "显示逾期生产" -#: common/models.py:2287 +#: common/models.py:2194 msgid "Show overdue builds on the homepage" -msgstr "在主页上显示过期的构建" +msgstr "在主页上显示逾期的生产" -#: common/models.py:2292 +#: common/models.py:2199 msgid "Show outstanding POs" -msgstr "显示出色的PO" +msgstr "" -#: common/models.py:2293 +#: common/models.py:2200 msgid "Show outstanding POs on the homepage" -msgstr "在主页上显示优秀的PO" +msgstr "" -#: common/models.py:2298 +#: common/models.py:2205 msgid "Show overdue POs" -msgstr "显示过期订单" +msgstr "" -#: common/models.py:2299 +#: common/models.py:2206 msgid "Show overdue POs on the homepage" -msgstr "在主页上显示逾期订单" +msgstr "" -#: common/models.py:2304 +#: common/models.py:2211 msgid "Show outstanding SOs" -msgstr "展示杰出的SO" +msgstr "" -#: common/models.py:2305 +#: common/models.py:2212 msgid "Show outstanding SOs on the homepage" -msgstr "在主页上显示优秀的SO" +msgstr "" -#: common/models.py:2310 +#: common/models.py:2217 msgid "Show overdue SOs" -msgstr "显示过期的SO" +msgstr "" -#: common/models.py:2311 +#: common/models.py:2218 msgid "Show overdue SOs on the homepage" -msgstr "在主页上显示过期的SO" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2223 msgid "Show pending SO shipments" -msgstr "显示待处理的SO发货" +msgstr "" -#: common/models.py:2317 +#: common/models.py:2224 +#, fuzzy +#| msgid "Show latest parts on the homepage" msgid "Show pending SO shipments on the homepage" -msgstr "在主页上显示待处理的SO发货" +msgstr "在主页上显示最近商品" -#: common/models.py:2322 +#: common/models.py:2229 msgid "Show News" -msgstr "显示新闻" +msgstr "" -#: common/models.py:2323 +#: common/models.py:2230 msgid "Show news on the homepage" -msgstr "在主页上显示新闻" +msgstr "" -#: common/models.py:2328 +#: common/models.py:2235 msgid "Inline label display" -msgstr "内联标签显示" +msgstr "内嵌标签显示" -#: common/models.py:2330 +#: common/models.py:2237 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "在浏览器中显示PDF标签,而不是作为文件下载" +msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:2336 +#: common/models.py:2243 msgid "Default label printer" -msgstr "默认标签打印机" +msgstr "" -#: common/models.py:2338 +#: common/models.py:2245 msgid "Configure which label printer should be selected by default" -msgstr "配置默认情况下应选择哪个标签打印机" +msgstr "" -#: common/models.py:2344 +#: common/models.py:2251 msgid "Inline report display" -msgstr "内联报告显示" +msgstr "" -#: common/models.py:2346 +#: common/models.py:2253 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "在浏览器中显示PDF报告,而不是作为文件下载" +msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:2352 +#: common/models.py:2259 msgid "Search Parts" -msgstr "搜索零件" +msgstr "" -#: common/models.py:2353 +#: common/models.py:2260 msgid "Display parts in search preview window" -msgstr "在搜索预览窗口中显示零件" +msgstr "" -#: common/models.py:2358 +#: common/models.py:2265 msgid "Search Supplier Parts" -msgstr "搜索供应商零件" +msgstr "" -#: common/models.py:2359 +#: common/models.py:2266 msgid "Display supplier parts in search preview window" -msgstr "在搜索预览窗口中显示供应商零件" +msgstr "" -#: common/models.py:2364 +#: common/models.py:2271 msgid "Search Manufacturer Parts" -msgstr "搜索制造商零件" +msgstr "" -#: common/models.py:2365 +#: common/models.py:2272 msgid "Display manufacturer parts in search preview window" -msgstr "在搜索预览窗口中显示制造商零件" +msgstr "" -#: common/models.py:2370 +#: common/models.py:2277 msgid "Hide Inactive Parts" -msgstr "隐藏非活动零件" +msgstr "" -#: common/models.py:2371 +#: common/models.py:2278 msgid "Excluded inactive parts from search preview window" -msgstr "从搜索预览窗口中排除非活动零件" +msgstr "" -#: common/models.py:2376 +#: common/models.py:2283 msgid "Search Categories" -msgstr "搜索分类" +msgstr "" -#: common/models.py:2377 +#: common/models.py:2284 msgid "Display part categories in search preview window" -msgstr "在搜索预览窗口中显示零件类别" +msgstr "" -#: common/models.py:2382 +#: common/models.py:2289 msgid "Search Stock" -msgstr "搜索库存" +msgstr "" -#: common/models.py:2383 +#: common/models.py:2290 msgid "Display stock items in search preview window" -msgstr "在搜索预览窗口中显示库存项目" +msgstr "" -#: common/models.py:2388 +#: common/models.py:2295 msgid "Hide Unavailable Stock Items" -msgstr "隐藏不可用的库存项目" +msgstr "" -#: common/models.py:2390 +#: common/models.py:2297 msgid "Exclude stock items which are not available from the search preview window" -msgstr "排除搜索预览窗口中不可用的库存项目" +msgstr "" -#: common/models.py:2396 +#: common/models.py:2303 msgid "Search Locations" -msgstr "搜索地点" +msgstr "" -#: common/models.py:2397 +#: common/models.py:2304 msgid "Display stock locations in search preview window" -msgstr "在搜索预览窗口中显示库存位置" +msgstr "" -#: common/models.py:2402 +#: common/models.py:2309 msgid "Search Companies" -msgstr "搜索公司" +msgstr "" -#: common/models.py:2403 +#: common/models.py:2310 msgid "Display companies in search preview window" -msgstr "在搜索预览窗口中显示公司" +msgstr "" -#: common/models.py:2408 +#: common/models.py:2315 msgid "Search Build Orders" -msgstr "搜索生产订单" +msgstr "" -#: common/models.py:2409 +#: common/models.py:2316 msgid "Display build orders in search preview window" -msgstr "在搜索预览窗口中显示生产订单" +msgstr "" -#: common/models.py:2414 +#: common/models.py:2321 msgid "Search Purchase Orders" -msgstr "搜索采购订单" +msgstr "" -#: common/models.py:2415 +#: common/models.py:2322 msgid "Display purchase orders in search preview window" -msgstr "在搜索预览窗口中显示采购订单" +msgstr "" -#: common/models.py:2420 +#: common/models.py:2327 msgid "Exclude Inactive Purchase Orders" -msgstr "排除未激活的采购订单" +msgstr "" -#: common/models.py:2422 +#: common/models.py:2329 msgid "Exclude inactive purchase orders from search preview window" -msgstr "从搜索预览窗口中排除不活动的采购订单" +msgstr "" -#: common/models.py:2428 +#: common/models.py:2335 msgid "Search Sales Orders" -msgstr "搜索销售订单" +msgstr "" -#: common/models.py:2429 +#: common/models.py:2336 msgid "Display sales orders in search preview window" -msgstr "在搜索预览窗口中显示销售订单" +msgstr "" -#: common/models.py:2434 +#: common/models.py:2341 msgid "Exclude Inactive Sales Orders" -msgstr "排除未激活的销售订单" +msgstr "" -#: common/models.py:2436 +#: common/models.py:2343 msgid "Exclude inactive sales orders from search preview window" -msgstr "从搜索预览窗口中排除不活动的销售订单" +msgstr "" -#: common/models.py:2442 +#: common/models.py:2349 +#, fuzzy +#| msgid "Purchase Orders" msgid "Search Return Orders" -msgstr "搜索退货订单" +msgstr "采购订单" -#: common/models.py:2443 +#: common/models.py:2350 msgid "Display return orders in search preview window" -msgstr "在搜索预览窗口中显示退货订单" +msgstr "" -#: common/models.py:2448 +#: common/models.py:2355 msgid "Exclude Inactive Return Orders" -msgstr "排除未激活的退货订单" +msgstr "" -#: common/models.py:2450 +#: common/models.py:2357 msgid "Exclude inactive return orders from search preview window" -msgstr "从搜索预览窗口中排除不活动的退货订单" +msgstr "" -#: common/models.py:2456 +#: common/models.py:2363 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:2458 +#: common/models.py:2365 msgid "Number of results to show in each section of the search preview window" -msgstr "在搜索预览窗口的每个部分中显示的结果数" +msgstr "" -#: common/models.py:2464 +#: common/models.py:2371 +#, fuzzy +#| msgid "Search" msgid "Regex Search" -msgstr "正则表达式搜索" +msgstr "搜索" -#: common/models.py:2465 +#: common/models.py:2372 msgid "Enable regular expressions in search queries" -msgstr "在搜索查询中启用正则表达式" +msgstr "" -#: common/models.py:2470 +#: common/models.py:2377 msgid "Whole Word Search" -msgstr "整词搜索" +msgstr "" -#: common/models.py:2471 +#: common/models.py:2378 msgid "Search queries return results for whole word matches" -msgstr "搜索查询返回整词匹配的结果" +msgstr "" -#: common/models.py:2476 +#: common/models.py:2383 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:2477 +#: common/models.py:2384 msgid "Display available part quantity in some forms" -msgstr "以某些形式显示可用零件数量" +msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:2482 +#: common/models.py:2389 msgid "Escape Key Closes Forms" -msgstr "Esc键关闭窗体" +msgstr "" -#: common/models.py:2483 +#: common/models.py:2390 msgid "Use the escape key to close modal forms" -msgstr "使用ESC键关闭模态窗体" +msgstr "" -#: common/models.py:2488 +#: common/models.py:2395 msgid "Fixed Navbar" -msgstr "固定导航栏" +msgstr "" -#: common/models.py:2489 +#: common/models.py:2396 msgid "The navbar position is fixed to the top of the screen" -msgstr "导航栏位置固定在屏幕顶部" +msgstr "" -#: common/models.py:2494 +#: common/models.py:2401 msgid "Date Format" -msgstr "时间格式" +msgstr "" -#: common/models.py:2495 +#: common/models.py:2402 msgid "Preferred format for displaying dates" -msgstr "显示时间的首选格式" +msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2415 part/templates/part/detail.html:41 msgid "Part Scheduling" -msgstr "零件调度" +msgstr "" -#: common/models.py:2509 +#: common/models.py:2416 msgid "Display part scheduling information" -msgstr "显示零件排程信息" +msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2421 part/templates/part/detail.html:62 msgid "Part Stocktake" -msgstr "零件盘点" +msgstr "" -#: common/models.py:2516 +#: common/models.py:2423 msgid "Display part stocktake information (if stocktake functionality is enabled)" -msgstr "显示零件盘点信息 (如果启用了盘点功能)" +msgstr "" -#: common/models.py:2522 +#: common/models.py:2429 msgid "Table String Length" -msgstr "表字符串长度" +msgstr "" -#: common/models.py:2524 +#: common/models.py:2431 msgid "Maximum length limit for strings displayed in table views" -msgstr "表视图中显示的字符串的最大长度限制" +msgstr "" + +#: common/models.py:2437 +#, fuzzy +#| msgid "Select Label Template" +msgid "Default part label template" +msgstr "选择标签模板" + +#: common/models.py:2438 +msgid "The part label template to be automatically selected" +msgstr "" -#: common/models.py:2530 +#: common/models.py:2443 +#, fuzzy +#| msgid "stock items selected" +msgid "Default stock item template" +msgstr "已选择库存项" + +#: common/models.py:2445 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2451 +#, fuzzy +#| msgid "No stock location set" +msgid "Default stock location label template" +msgstr "未设置仓储地点" + +#: common/models.py:2453 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2459 +#, fuzzy +#| msgid "No stock location set" +msgid "Default build line label template" +msgstr "未设置仓储地点" + +#: common/models.py:2461 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2467 msgid "Receive error reports" -msgstr "接收错误报告" +msgstr "" -#: common/models.py:2531 +#: common/models.py:2468 msgid "Receive notifications for system errors" -msgstr "接收系统错误通知" +msgstr "" -#: common/models.py:2536 +#: common/models.py:2473 msgid "Last used printing machines" -msgstr "上次使用的打印设备" +msgstr "" -#: common/models.py:2537 +#: common/models.py:2474 msgid "Save the last used printing machines for a user" -msgstr "为用户保存上次使用的打印设备" - -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" -msgstr "使用者" +msgstr "" -#: common/models.py:2580 +#: common/models.py:2517 msgid "Price break quantity" -msgstr "批发价数量" +msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1333 order/models.py:2241 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "价格" -#: common/models.py:2588 +#: common/models.py:2525 msgid "Unit price at specified quantity" -msgstr "指定数量的单位价格" +msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2696 common/models.py:2881 msgid "Endpoint" -msgstr "端点" +msgstr "" -#: common/models.py:2693 +#: common/models.py:2697 msgid "Endpoint at which this webhook is received" -msgstr "接收此网络钩子的端点" +msgstr "" -#: common/models.py:2703 +#: common/models.py:2707 msgid "Name for this webhook" -msgstr "此网络钩子的名称" +msgstr "" -#: common/models.py:2707 +#: common/models.py:2711 company/models.py:160 company/models.py:813 +#: machine/models.py:39 part/admin.py:88 part/models.py:1045 +#: plugin/models.py:56 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2711 msgid "Is this webhook active" -msgstr "网络钩子是否已启用" +msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2727 users/models.py:159 msgid "Token" msgstr "令牌" -#: common/models.py:2724 +#: common/models.py:2728 msgid "Token for access" -msgstr "访问令牌" +msgstr "" -#: common/models.py:2732 +#: common/models.py:2736 msgid "Secret" -msgstr "密钥" +msgstr "" -#: common/models.py:2733 +#: common/models.py:2737 msgid "Shared secret for HMAC" -msgstr "HMAC共享密钥" +msgstr "" -#: common/models.py:2841 +#: common/models.py:2845 msgid "Message ID" -msgstr "消息ID" +msgstr "" -#: common/models.py:2842 +#: common/models.py:2846 msgid "Unique identifier for this message" -msgstr "此邮件的唯一标识符" +msgstr "" -#: common/models.py:2850 +#: common/models.py:2854 msgid "Host" -msgstr "主机" +msgstr "" -#: common/models.py:2851 +#: common/models.py:2855 msgid "Host from which this message was received" -msgstr "接收此消息的主机" +msgstr "" -#: common/models.py:2859 +#: common/models.py:2863 msgid "Header" -msgstr "标题" +msgstr "" -#: common/models.py:2860 +#: common/models.py:2864 msgid "Header of this message" -msgstr "此消息的标题" +msgstr "" -#: common/models.py:2867 +#: common/models.py:2871 msgid "Body" -msgstr "正文" +msgstr "" -#: common/models.py:2868 +#: common/models.py:2872 msgid "Body of this message" -msgstr "此消息的正文" +msgstr "" -#: common/models.py:2878 +#: common/models.py:2882 msgid "Endpoint on which this message was received" -msgstr "接收此消息的终点" +msgstr "" -#: common/models.py:2883 +#: common/models.py:2887 msgid "Worked on" -msgstr "工作于" +msgstr "" -#: common/models.py:2884 +#: common/models.py:2888 msgid "Was the work on this message finished?" -msgstr "这条消息的工作完成了吗?" +msgstr "" -#: common/models.py:3010 +#: common/models.py:3014 msgid "Id" -msgstr "标识" +msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:3016 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" -msgstr "标题" - -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "連結" +msgstr "" -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:3020 templates/js/translated/news.js:60 msgid "Published" -msgstr "已发布" +msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" -msgstr "作者" +msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:3024 templates/js/translated/news.js:52 msgid "Summary" -msgstr "摘要" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Read" -msgstr "阅读" +msgstr "" -#: common/models.py:3023 +#: common/models.py:3027 msgid "Was this news item read?" -msgstr "这条新闻被阅读了吗?" +msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:3044 company/models.py:156 part/models.py:929 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" -msgstr "图像" +msgstr "图片" -#: common/models.py:3040 +#: common/models.py:3044 +#, fuzzy +#| msgid "Image" msgid "Image file" -msgstr "图像文件" - -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "此图像的目标模型类型" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "此图像的目标型号ID" +msgstr "图片" -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "自定义单位" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "单位符号必须唯一" - -#: common/models.py:3114 +#: common/models.py:3086 +#, fuzzy +#| msgid "Must be a valid number" msgid "Unit name must be a valid identifier" -msgstr "单位名称必须是有效的标识符" +msgstr "必须是有效数字" -#: common/models.py:3133 +#: common/models.py:3105 +#, fuzzy +#| msgid "Part name" msgid "Unit name" -msgstr "单位名称" +msgstr "商品名称" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "符号" +msgstr "" -#: common/models.py:3141 +#: common/models.py:3113 +#, fuzzy +#| msgid "Optional Items" msgid "Optional unit symbol" -msgstr "可选单位符号" +msgstr "可选项目" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#, fuzzy +#| msgid "Destination" msgid "Definition" -msgstr "定义" +msgstr "目的地" -#: common/models.py:3148 +#: common/models.py:3121 msgid "Unit definition" -msgstr "单位定义" - -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "附件" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "缺少檔案" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "缺少外部連結" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "選擇附件" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "註解" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "附件评论" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "上传日期" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "上传文件的日期" - -#: common/models.py:3301 -msgid "File size" -msgstr "文件大小" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "文件大小,以字节为单位" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "为附件指定的模型类型无效" +msgstr "" #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" -msgstr "新建{verbose_name}" +msgstr "" #: common/notifications.py:316 msgid "A new order has been created and assigned to you" -msgstr "新订单已创建并分配给您" +msgstr "" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "{verbose_name} 已取消" +msgstr "" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "分配给您的订单已取消" +msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 msgid "Items Received" -msgstr "收到的物品" +msgstr "" #: common/notifications.py:332 msgid "Items have been received against a purchase order" -msgstr "已根据采购订单收到物品" +msgstr "" #: common/notifications.py:339 +#, fuzzy +#| msgid "Received against purchase order" msgid "Items have been received against a return order" -msgstr "已收到退货订单中的物品" +msgstr "收到定购单" #: common/notifications.py:457 msgid "Error raised by plugin" -msgstr "插件引发的错误" +msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:333 msgid "Is Running" -msgstr "正在运行" +msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:339 +#, fuzzy +#| msgid "Pending" msgid "Pending Tasks" -msgstr "等待完成的任务" +msgstr "待定" -#: common/serializers.py:387 +#: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "预定的任务" +msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:351 msgid "Failed Tasks" -msgstr "失败的任务" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Task ID" -msgstr "任务ID" +msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:366 msgid "Unique task ID" -msgstr "唯一任务ID" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 msgid "Lock" -msgstr "锁定" +msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:368 +#, fuzzy +#| msgid "Stock Item" msgid "Lock time" -msgstr "锁定时间" +msgstr "库存项" -#: common/serializers.py:412 +#: common/serializers.py:370 +#, fuzzy +#| msgid "Part name" msgid "Task name" -msgstr "任务名称" +msgstr "商品名称" -#: common/serializers.py:414 +#: common/serializers.py:372 +#, fuzzy +#| msgid "Production" msgid "Function" -msgstr "功能" +msgstr "生产中" -#: common/serializers.py:414 +#: common/serializers.py:372 +#, fuzzy +#| msgid "Part name" msgid "Function name" -msgstr "功能名称" +msgstr "商品名称" -#: common/serializers.py:416 +#: common/serializers.py:374 +#, fuzzy +#| msgid "Attachments" msgid "Arguments" -msgstr "参数" +msgstr "附件" -#: common/serializers.py:416 +#: common/serializers.py:374 msgid "Task arguments" -msgstr "任务参数" +msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:377 +#, fuzzy +#| msgid "Keywords" msgid "Keyword Arguments" -msgstr "关键字参数" +msgstr "关键词" -#: common/serializers.py:419 +#: common/serializers.py:377 msgid "Task keyword arguments" -msgstr "任务关键词参数" - -#: common/serializers.py:529 -msgid "Filename" -msgstr "檔案名稱" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "模型类型" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "用户无权为此模式创建或编辑附件" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "未提供附件型号" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "附件模型类型无效" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "最小位置不能大于最大位置" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "最大名额不能小于最小名额" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "不允许空域。" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "无效的域名: {domain}" +msgstr "" #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 @@ -4114,7 +3995,7 @@ msgstr "匹配字段" #: common/views.py:84 msgid "Match Items" -msgstr "匹配项目" +msgstr "匹配项" #: common/views.py:401 msgid "Fields matching failed" @@ -4122,7 +4003,7 @@ msgstr "字段匹配失败" #: common/views.py:464 msgid "Parts imported" -msgstr "已导入零件" +msgstr "已导入商品" #: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -4133,448 +4014,453 @@ msgstr "已导入零件" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "上一步" +msgstr "" -#: company/api.py:141 +#: company/api.py:164 +#, fuzzy +#| msgid "Print actions" msgid "Part is Active" -msgstr "零件已激活" +msgstr "打印操作" -#: company/api.py:145 +#: company/api.py:168 +#, fuzzy +#| msgid "Manufacturers" msgid "Manufacturer is Active" -msgstr "制造商处于活动状态" +msgstr "制造商" -#: company/api.py:278 +#: company/api.py:317 +#, fuzzy +#| msgid "Supplier Part Pricing" msgid "Supplier Part is Active" -msgstr "供应商零件处于激活状态" +msgstr "供应商商品价格" -#: company/api.py:282 +#: company/api.py:321 +#, fuzzy +#| msgid "Internal Prices" msgid "Internal Part is Active" -msgstr "内部零件已激活" +msgstr "内部价格" -#: company/api.py:286 +#: company/api.py:325 +#, fuzzy +#| msgid "Supplier List" msgid "Supplier is Active" -msgstr "供应商已激活" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "公司" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "公司" +msgstr "供应商列表" -#: company/models.py:117 +#: company/models.py:114 msgid "Company description" msgstr "公司简介" -#: company/models.py:118 +#: company/models.py:115 msgid "Description of the company" msgstr "公司简介" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:120 company/templates/company/company_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" msgstr "网站" -#: company/models.py:123 +#: company/models.py:120 msgid "Company website URL" msgstr "公司网站" -#: company/models.py:128 +#: company/models.py:125 msgid "Phone number" msgstr "电话号码" -#: company/models.py:130 +#: company/models.py:127 msgid "Contact phone number" msgstr "联系电话" -#: company/models.py:137 +#: company/models.py:134 msgid "Contact email address" -msgstr "联系人电子邮箱地址" +msgstr "联系人电子邮件" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "联系人" -#: company/models.py:144 +#: company/models.py:141 msgid "Point of contact" -msgstr "联络点" +msgstr "" -#: company/models.py:150 +#: company/models.py:147 msgid "Link to external company information" -msgstr "外部公司信息链接" +msgstr "链接到外部公司信息" -#: company/models.py:163 +#: company/models.py:160 +#, fuzzy +#| msgid "Does this company manufacture parts?" msgid "Is this company active?" -msgstr "这家公司是否激活?" +msgstr "该公司制造商品吗?" -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:165 +msgid "is customer" msgstr "是客户" -#: company/models.py:169 +#: company/models.py:166 msgid "Do you sell items to this company?" -msgstr "你是否向该公司出售商品?" +msgstr "您是否向该公司出售商品?" -#: company/models.py:174 -msgid "Is supplier" -msgstr "是否为供应商" +#: company/models.py:171 +msgid "is supplier" +msgstr "是供应商" -#: company/models.py:175 +#: company/models.py:172 msgid "Do you purchase items from this company?" -msgstr "你从这家公司买东西吗?" +msgstr "您是否从该公司采购商品?" -#: company/models.py:180 -msgid "Is manufacturer" -msgstr "是制造商吗" +#: company/models.py:177 +msgid "is manufacturer" +msgstr "是制造商" -#: company/models.py:181 +#: company/models.py:178 msgid "Does this company manufacture parts?" -msgstr "这家公司生产零件吗?" +msgstr "该公司制造商品吗?" -#: company/models.py:189 +#: company/models.py:186 msgid "Default currency used for this company" -msgstr "此公司使用的默认货币" - -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "地址" +msgstr "该公司使用的默认货币" -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" -msgstr "地址" +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:776 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "公司" -#: company/models.py:372 +#: company/models.py:383 +#, fuzzy +#| msgid "Delete Company" msgid "Select company" -msgstr "选择公司" +msgstr "删除该公司" -#: company/models.py:377 +#: company/models.py:388 +#, fuzzy +#| msgid "Address" msgid "Address title" -msgstr "地址标题" +msgstr "地址" -#: company/models.py:378 +#: company/models.py:389 msgid "Title describing the address entry" -msgstr "描述地址条目的标题" +msgstr "" -#: company/models.py:384 +#: company/models.py:395 +#, fuzzy +#| msgid "Company address" msgid "Primary address" -msgstr "主要地址" +msgstr "公司地址" -#: company/models.py:385 +#: company/models.py:396 +#, fuzzy +#| msgid "Contact email address" msgid "Set as primary address" -msgstr "设置主要地址" +msgstr "联系人电子邮件" -#: company/models.py:390 templates/js/translated/company.js:914 +#: company/models.py:401 templates/js/translated/company.js:914 #: templates/js/translated/company.js:971 msgid "Line 1" -msgstr "第1行" +msgstr "" -#: company/models.py:391 +#: company/models.py:402 +#, fuzzy +#| msgid "Address" msgid "Address line 1" -msgstr "地址行1" +msgstr "地址" -#: company/models.py:397 templates/js/translated/company.js:915 +#: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 msgid "Line 2" -msgstr "第2行" +msgstr "" -#: company/models.py:398 +#: company/models.py:409 +#, fuzzy +#| msgid "Address" msgid "Address line 2" -msgstr "地址行2" +msgstr "地址" -#: company/models.py:404 company/models.py:405 +#: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 msgid "Postal code" -msgstr "邮政编码" +msgstr "" -#: company/models.py:411 +#: company/models.py:422 msgid "City/Region" -msgstr "城市/地区" +msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Postal code city/region" -msgstr "邮政编码城市/地区" +msgstr "" -#: company/models.py:418 +#: company/models.py:429 msgid "State/Province" -msgstr "省/市/自治区" +msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "State or province" -msgstr "省、自治区或直辖市" +msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:436 templates/js/translated/company.js:1001 msgid "Country" -msgstr "国家/地区" +msgstr "" -#: company/models.py:426 +#: company/models.py:437 +#, fuzzy +#| msgid "Address" msgid "Address country" -msgstr "地址所在国家" +msgstr "地址" -#: company/models.py:432 +#: company/models.py:443 msgid "Courier shipping notes" -msgstr "快递运单" +msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "Notes for shipping courier" -msgstr "运输快递注意事项" +msgstr "" -#: company/models.py:439 +#: company/models.py:450 +#, fuzzy +#| msgid "Internal company name" msgid "Internal shipping notes" -msgstr "内部装运通知单" +msgstr "内部公司名称" -#: company/models.py:440 +#: company/models.py:451 msgid "Shipping notes for internal use" -msgstr "内部使用的装运通知单" - -#: company/models.py:447 -msgid "Link to address information (external)" -msgstr "链接地址信息 (外部)" - -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "制造商零件" +msgstr "" + +#: company/models.py:458 +#, fuzzy +#| msgid "Description (optional)" +msgid "Link to address information (external)" +msgstr "描述 (可选)" -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:791 stock/models.py:751 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" -msgstr "基础零件" +msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:491 company/models.py:793 msgid "Select part" -msgstr "选择零件" +msgstr "选择商品" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 #: templates/js/translated/company.js:1296 #: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/table_filters.js:800 msgid "Manufacturer" msgstr "制造商" -#: company/models.py:499 +#: company/models.py:501 msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 msgid "MPN" -msgstr "制造商零件编号" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "制造商商品编号" -#: company/models.py:513 +#: company/models.py:515 msgid "URL for external manufacturer part link" -msgstr "外部制造商零件链接的URL" +msgstr "" -#: company/models.py:522 +#: company/models.py:523 msgid "Manufacturer part description" -msgstr "制造商零件说明" +msgstr "制造商商品描述" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" -msgstr "制造商零件参数" +#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "制造商商品" -#: company/models.py:594 +#: company/models.py:614 msgid "Parameter name" msgstr "参数名称" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:620 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 msgid "Value" -msgstr "值" +msgstr "数值" -#: company/models.py:601 +#: company/models.py:621 msgid "Parameter value" msgstr "参数值" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:628 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "单位" -#: company/models.py:609 +#: company/models.py:629 msgid "Parameter units" msgstr "参数单位" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "供应商零件" - -#: company/models.py:719 +#: company/models.py:731 msgid "Pack units must be compatible with the base part units" -msgstr "包装单位必须与基础零件单位兼容" +msgstr "" -#: company/models.py:726 +#: company/models.py:738 +#, fuzzy +#| msgid "Quantity must be greater than zero" msgid "Pack units must be greater than zero" -msgstr "包装单位必须大于零" +msgstr "数量必须大于0" -#: company/models.py:740 +#: company/models.py:752 msgid "Linked manufacturer part must reference the same base part" -msgstr "链接的制造商零件必须引用相同的基础零件" +msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:801 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 #: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "供应商" -#: company/models.py:790 +#: company/models.py:802 msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:808 part/serializers.py:510 msgid "Supplier stock keeping unit" -msgstr "供应商库存管理单位" +msgstr "" -#: company/models.py:802 +#: company/models.py:814 +#, fuzzy +#| msgid "Delete supplier part" msgid "Is this supplier part active?" -msgstr "此供应商零件是否处于活动状态?" +msgstr "删除供应商商品" -#: company/models.py:812 +#: company/models.py:824 msgid "Select manufacturer part" -msgstr "选择制造商零件" +msgstr "选择制造商商品" -#: company/models.py:819 +#: company/models.py:831 msgid "URL for external supplier part link" -msgstr "外部供应商零件链接的URL" +msgstr "外部供货商商品链接URL" -#: company/models.py:828 +#: company/models.py:839 msgid "Supplier part description" -msgstr "供应商零件说明" +msgstr "供应商商品描述" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:846 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 msgid "Note" msgstr "备注" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:855 part/models.py:1967 msgid "base cost" -msgstr "基本费用" +msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:856 part/models.py:1968 msgid "Minimum charge (e.g. stocking fee)" -msgstr "最低费用(例如库存费)" +msgstr "最低收费(例如库存费)" + +#: company/models.py:863 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "打包" -#: company/models.py:853 +#: company/models.py:864 msgid "Part packaging" -msgstr "零件打包" +msgstr "商品打包" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 +#: company/models.py:869 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 msgid "Pack Quantity" -msgstr "包装数量" +msgstr "" -#: company/models.py:860 +#: company/models.py:871 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "单包供应的总数量。为单个项目留空。" +msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:890 part/models.py:1974 msgid "multiple" -msgstr "多个" +msgstr "" -#: company/models.py:880 +#: company/models.py:891 msgid "Order multiple" -msgstr "订购多个" +msgstr "" -#: company/models.py:892 +#: company/models.py:903 msgid "Quantity available from supplier" -msgstr "供应商提供的数量" +msgstr "" -#: company/models.py:898 +#: company/models.py:909 msgid "Availability Updated" -msgstr "可用性已更新" +msgstr "" -#: company/models.py:899 +#: company/models.py:910 msgid "Date of last update of availability data" -msgstr "上次更新可用性数据的日期" - -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "供应商批发价" +msgstr "" -#: company/serializers.py:174 +#: company/serializers.py:163 msgid "Default currency used for this supplier" -msgstr "此供应商使用的默认货币" +msgstr "该公司使用的默认货币" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "公司名称" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 +#: company/serializers.py:381 part/admin.py:126 #: part/templates/part/part_base.html:197 #: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 +#: templates/js/translated/table_filters.js:355 msgid "In Stock" -msgstr "有库存" +msgstr "" #: company/templates/company/company_base.html:16 #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" -msgstr "未激活" +msgstr "" #: company/templates/company/company_base.html:27 #: templates/js/translated/purchase_order.js:242 @@ -4583,7 +4469,7 @@ msgstr "创建采购订单" #: company/templates/company/company_base.html:33 msgid "Company actions" -msgstr "公司行为" +msgstr "" #: company/templates/company/company_base.html:38 msgid "Edit company information" @@ -4592,55 +4478,57 @@ msgstr "编辑公司信息" #: company/templates/company/company_base.html:39 #: templates/js/translated/company.js:445 msgid "Edit Company" -msgstr "编辑公司" +msgstr "编辑公司信息" #: company/templates/company/company_base.html:43 msgid "Delete company" -msgstr "删除公司" +msgstr "" #: company/templates/company/company_base.html:44 #: company/templates/company/company_base.html:168 msgid "Delete Company" -msgstr "删除公司" +msgstr "删除该公司" #: company/templates/company/company_base.html:53 #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 +#, fuzzy +#| msgid "Part name" msgid "Part image" -msgstr "零件图像" +msgstr "商品名称" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "上传新图像" +msgstr "上传新图片" #: company/templates/company/company_base.html:64 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "从 URL 下载图像" +msgstr "从 URL 下载图片" #: company/templates/company/company_base.html:66 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "删除图像" +msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:92 order/models.py:910 +#: order/models.py:2008 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:804 +#: stock/models.py:805 stock/serializers.py:1100 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 msgid "Customer" msgstr "客户" @@ -4648,68 +4536,75 @@ msgstr "客户" msgid "Uses default currency" msgstr "使用默认货币" +#: company/templates/company/company_base.html:124 order/models.py:341 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "地址" + #: company/templates/company/company_base.html:131 msgid "Phone" msgstr "电话" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "移除图像" +msgstr "" #: company/templates/company/company_base.html:212 msgid "Remove associated image from this company" -msgstr "从此公司中删除关联的图像" +msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" -msgstr "移除" +msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "上传图像" +msgstr "上传图片" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "下载图像" +msgstr "下载图片" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 #: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 msgid "Supplier Parts" -msgstr "供应商零件" +msgstr "供应商商品" #: company/templates/company/detail.html:19 msgid "Create new supplier part" -msgstr "创建新的供应商零件" +msgstr "创建新的供应商商品" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" -msgstr "新建供应商零件" +msgstr "新建供应商商品" #: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 #: templates/js/translated/search.js:151 msgid "Manufacturer Parts" -msgstr "制造商零件" +msgstr "制造商商品" #: company/templates/company/detail.html:45 msgid "Create new manufacturer part" -msgstr "创建新的制造商零件" +msgstr "新建制造商商品" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" -msgstr "新建制造商零件" +msgstr "新建制造商商品" #: company/templates/company/detail.html:65 msgid "Supplier Stock" -msgstr "供应商库存" +msgstr "供货商库存" #: company/templates/company/detail.html:75 #: company/templates/company/sidebar.html:12 @@ -4717,7 +4612,7 @@ msgstr "供应商库存" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 @@ -4728,7 +4623,7 @@ msgstr "采购订单" #: company/templates/company/detail.html:79 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" -msgstr "创建采购订单" +msgstr "新建采购订单" #: company/templates/company/detail.html:80 #: order/templates/order/purchase_orders.html:18 @@ -4740,18 +4635,18 @@ msgstr "新建采购订单" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 #: users/models.py:209 msgid "Sales Orders" -msgstr "銷售訂單" +msgstr "销售订单" #: company/templates/company/detail.html:105 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "创建新的销售订单" +msgstr "新建销售订单" #: company/templates/company/detail.html:106 #: order/templates/order/sales_orders.html:21 @@ -4760,7 +4655,7 @@ msgstr "新建销售订单" #: company/templates/company/detail.html:126 msgid "Assigned Stock" -msgstr "已分配库存" +msgstr "" #: company/templates/company/detail.html:142 #: company/templates/company/sidebar.html:29 @@ -4770,40 +4665,54 @@ msgstr "已分配库存" #: templates/InvenTree/settings/sidebar.html:61 #: templates/js/translated/search.js:232 templates/navbar.html:65 #: users/models.py:210 +#, fuzzy +#| msgid "Returned" msgid "Return Orders" -msgstr "退货订单" +msgstr "已退回" #: company/templates/company/detail.html:146 #: order/templates/order/return_orders.html:20 +#, fuzzy +#| msgid "Create new sales order" msgid "Create new return order" -msgstr "创建新的退货订单" +msgstr "新建销售订单" #: company/templates/company/detail.html:147 #: order/templates/order/return_orders.html:21 +#, fuzzy +#| msgid "New Build Order" msgid "New Return Order" -msgstr "新建退货订单" +msgstr "新建生产订单" #: company/templates/company/detail.html:168 msgid "Company Notes" -msgstr "公司说明" +msgstr "公司备注" #: company/templates/company/detail.html:183 +#, fuzzy +#| msgid "Company Notes" msgid "Company Contacts" -msgstr "公司联系人" +msgstr "公司备注" #: company/templates/company/detail.html:187 #: company/templates/company/detail.html:188 +#, fuzzy +#| msgid "Contact" msgid "Add Contact" -msgstr "添加联系人" +msgstr "联系人" #: company/templates/company/detail.html:206 +#, fuzzy +#| msgid "Company address" msgid "Company addresses" msgstr "公司地址" #: company/templates/company/detail.html:210 #: company/templates/company/detail.html:211 +#, fuzzy +#| msgid "Address" msgid "Add Address" -msgstr "新增地址" +msgstr "地址" #: company/templates/company/manufacturer_part.html:15 company/views.py:37 #: templates/InvenTree/search.html:180 templates/navbar.html:49 @@ -4812,33 +4721,32 @@ msgstr "制造商" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" -msgstr "订购零件" +msgstr "订购商品" #: company/templates/company/manufacturer_part.html:39 #: templates/js/translated/company.js:1343 msgid "Edit manufacturer part" -msgstr "编辑制造商零件" +msgstr "编辑制造商商品" #: company/templates/company/manufacturer_part.html:43 #: templates/js/translated/company.js:1344 msgid "Delete manufacturer part" -msgstr "删除制造商零件" +msgstr "删除生产商商品" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 order/api.py:454 msgid "Internal Part" -msgstr "内部零件" +msgstr "内部商品" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "没有可用的制造商信息" +msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 +#: part/admin.py:122 part/serializers.py:821 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4847,163 +4755,172 @@ msgstr "供应商" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "参数" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "新建参数" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "制造商零件注释" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "添加参数" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "制造的零件" +msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "已供应零件" +msgstr "" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "供应库存物品" +msgstr "" #: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "已分配库存项目" +msgstr "" #: company/templates/company/sidebar.html:33 +#, fuzzy +#| msgid "Contact" msgid "Contacts" msgstr "联系人" +#: company/templates/company/sidebar.html:35 +#, fuzzy +#| msgid "Address" +msgid "Addresses" +msgstr "地址" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:448 +#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "供应商商品" + #: company/templates/company/supplier_part.html:50 #: templates/js/translated/company.js:1526 msgid "Supplier part actions" -msgstr "供应商零件操作" +msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" -msgstr "订购零件" +msgstr "订购商品" #: company/templates/company/supplier_part.html:60 #: company/templates/company/supplier_part.html:61 msgid "Update Availability" -msgstr "更新可用性" +msgstr "" #: company/templates/company/supplier_part.html:63 #: company/templates/company/supplier_part.html:64 #: templates/js/translated/company.js:294 msgid "Edit Supplier Part" -msgstr "编辑供应商零件" +msgstr "编辑供应商商品" #: company/templates/company/supplier_part.html:68 #: company/templates/company/supplier_part.html:69 #: templates/js/translated/company.js:269 msgid "Duplicate Supplier Part" -msgstr "重复供应商零件" +msgstr "" #: company/templates/company/supplier_part.html:73 msgid "Delete Supplier Part" -msgstr "删除供应商零件" +msgstr "" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "删除供应商零件" +msgstr "" #: company/templates/company/supplier_part.html:133 msgid "No supplier information available" -msgstr "没有可用的供应商信息" +msgstr "" -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 msgid "SKU" -msgstr "库存量单位" +msgstr "" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" -msgstr "供应商零件库存" +msgstr "供货商商品库存" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 msgid "Create new stock item" -msgstr "创建新库存项目" +msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 msgid "New Stock Item" -msgstr "新库存项目" +msgstr "" #: company/templates/company/supplier_part.html:223 msgid "Supplier Part Orders" -msgstr "供应商零件订单" +msgstr "供应商商品订单" #: company/templates/company/supplier_part.html:246 msgid "Pricing Information" -msgstr "定价信息" +msgstr "价格信息" #: company/templates/company/supplier_part.html:251 #: templates/js/translated/company.js:398 #: templates/js/translated/pricing.js:684 msgid "Add Price Break" -msgstr "添加批发价折扣" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "供应商零件注释" +msgstr "" -#: company/templates/company/supplier_part.html:305 +#: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" -msgstr "供应商零件二维码" +msgstr "" -#: company/templates/company/supplier_part.html:316 +#: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" -msgstr "将条形码链接到供应商零件" +msgstr "" -#: company/templates/company/supplier_part.html:388 +#: company/templates/company/supplier_part.html:359 msgid "Update Part Availability" -msgstr "更新零件可用性" +msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 +#: part/serializers.py:820 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 #: users/models.py:206 msgid "Stock Items" msgstr "库存项" #: company/templates/company/supplier_part_sidebar.html:9 msgid "Supplier Part Pricing" -msgstr "供应商零件定价" +msgstr "供应商商品价格" #: company/views.py:32 msgid "New Supplier" -msgstr "新建供应商" +msgstr "新增供应商" #: company/views.py:38 msgid "New Manufacturer" @@ -5012,1142 +4929,996 @@ msgstr "新建制造商" #: company/views.py:43 templates/InvenTree/search.html:210 #: templates/navbar.html:60 msgid "Customers" -msgstr "客户" +msgstr "客户信息" #: company/views.py:44 msgid "New Customer" msgstr "新建客户" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "公司" + #: company/views.py:52 msgid "New Company" msgstr "新建公司信息" -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "放置" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "导出格式无效" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "时间戳" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "要导入的数据文件" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "列" - -#: importer/models.py:84 -msgid "Import status" -msgstr "导入状态" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "字段默认值" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "字段覆盖" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "字段筛选器" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "某些必填字段尚未映射" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "列已映射到数据库字段" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "字段已映射到数据列" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "列映射必须链接到有效的导入会话" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "数据文件中不存在列" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "目标模型中不存在字段" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "所选字段为只读" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "导入会话" - -#: importer/models.py:426 -msgid "Field" -msgstr "字段" - -#: importer/models.py:428 -msgid "Column" -msgstr "列" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "行索引" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "原始行数据" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "数据" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "错误" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "有效" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "不支持的数据文件格式" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "打开数据文件失败" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "数据文件维度无效" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "字段默认值无效" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "无效的字段覆盖" +#: label/api.py:247 +#, fuzzy +#| msgid "Error renaming file" +msgid "Error printing label" +msgstr "重命名文件出错" -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "字段筛选器无效" +#: label/models.py:120 +msgid "Label name" +msgstr "标签名称" -#: importer/serializers.py:178 -msgid "Rows" -msgstr "行" +#: label/models.py:128 +msgid "Label description" +msgstr "标签说明" -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "要接受的行ID列表" +#: label/models.py:136 +msgid "Label" +msgstr "标签" -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "未提供行" +#: label/models.py:137 +msgid "Label template file" +msgstr "标签模板文件" -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "行不属于此会话" +#: label/models.py:143 part/models.py:3494 report/models.py:324 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "已启用" -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "行包含无效数据" +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "标签模板已启用" -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "行已完成" +#: label/models.py:149 +msgid "Width [mm]" +msgstr "宽度 [mm]" -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "正在初始化" +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "标注宽度,以毫米为单位。" -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "映射列" +#: label/models.py:156 +msgid "Height [mm]" +msgstr "高度 [mm]" -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "导入数据" +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "标注高度,以毫米为单位。" -#: importer/status_codes.py:16 -msgid "Processing Data" -msgstr "处理数据中" +#: label/models.py:163 report/models.py:317 +msgid "Filename Pattern" +msgstr "文件名样式" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" -msgstr "数据文件超出最大大小限制" +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" -msgstr "数据文件不包含标头" +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +#, fuzzy +#| msgid "Query filters (comma-separated list of key=value pairs)," +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "查询筛选器 (逗号分隔的键值对列表)" -#: importer/validators.py:29 -msgid "Data file contains too many columns" -msgstr "数据文件包含的列太多" +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:345 report/models.py:496 +#: report/models.py:532 report/models.py:568 report/models.py:750 +msgid "Filters" +msgstr "筛选器" -#: importer/validators.py:32 -msgid "Data file contains too many rows" -msgstr "数据文件包含的行太多" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +#, fuzzy +#| msgid "Part QR Code" +msgid "QR Code" +msgstr "商品二维码" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" -msgstr "值必须是有效的字典对象" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "" -#: machine/machine_types/label_printer.py:215 +#: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "拷贝" +msgstr "" -#: machine/machine_types/label_printer.py:216 +#: machine/machine_types/label_printer.py:218 +#, fuzzy +#| msgid "Number of stock items to build" msgid "Number of copies to print for each label" -msgstr "每个标签要打印的份数" +msgstr "要生产的项目数量" -#: machine/machine_types/label_printer.py:231 +#: machine/machine_types/label_printer.py:233 +#, fuzzy +#| msgid "Connection error" msgid "Connected" -msgstr "已连接" +msgstr "连接错误" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 +#: machine/machine_types/label_printer.py:234 order/api.py:1511 +#: templates/js/translated/sales_order.js:1042 msgid "Unknown" -msgstr "未知" +msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:235 +#, fuzzy +#| msgid "Print Label" msgid "Printing" -msgstr "正在打印" +msgstr "打印标签" -#: machine/machine_types/label_printer.py:234 +#: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "无媒体" - -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" -msgstr "卡纸" +msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 +#, fuzzy +#| msgid "Rejected" msgid "Disconnected" -msgstr "已断开连接" +msgstr "已拒绝" -#: machine/machine_types/label_printer.py:243 +#: machine/machine_types/label_printer.py:244 +#, fuzzy +#| msgid "Label name" msgid "Label Printer" -msgstr "标签打印机" +msgstr "标签名称" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 +#, fuzzy +#| msgid "Allocate selected items" msgid "Directly print labels for various items." -msgstr "直接打印各种物品的标签。" +msgstr "分配选定项目" -#: machine/machine_types/label_printer.py:250 +#: machine/machine_types/label_printer.py:251 +#, fuzzy +#| msgid "Print actions" msgid "Printer Location" -msgstr "打印机位置" +msgstr "打印操作" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" -msgstr "将打印机定位到特定位置" +msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "设备名称" +msgstr "" #: machine/models.py:29 msgid "Machine Type" -msgstr "设备类型" +msgstr "" #: machine/models.py:29 msgid "Type of machine" -msgstr "设备类型" +msgstr "" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "驱动" +msgstr "" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "设备使用的驱动器" +msgstr "" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "可以禁用设备" +msgstr "" #: machine/models.py:95 +#, fuzzy +#| msgid "Available" msgid "Driver available" -msgstr "可用驱动" +msgstr "空闲" #: machine/models.py:100 msgid "No errors" -msgstr "无错误" +msgstr "" #: machine/models.py:105 msgid "Initialized" -msgstr "已初始化" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" #: machine/models.py:117 +#, fuzzy +#| msgid "Build status" msgid "Machine status" -msgstr "设备状态" +msgstr "生产状态" #: machine/models.py:145 msgid "Machine" -msgstr "设备" +msgstr "" #: machine/models.py:151 msgid "Machine Config" -msgstr "设备配置" +msgstr "" #: machine/models.py:156 msgid "Config type" -msgstr "配置类型" +msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 msgid "Total Price" -msgstr "总价格" +msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 +#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" -msgstr "订单状态" - -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" -msgstr "订单参考" - -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" -msgstr "未完成" - -#: order/api.py:132 -msgid "Has Project Code" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 +#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "有定价" +msgstr "" -#: order/api.py:230 +#: order/api.py:236 msgid "No matching purchase order found" -msgstr "未找到匹配的采购订单" +msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 +#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 +#: order/models.py:1535 order/models.py:1649 order/models.py:1803 +#: order/models.py:2207 order/models.py:2258 +#: templates/js/translated/sales_order.js:1488 msgid "Order" -msgstr "订单" +msgstr "" -#: order/api.py:429 order/api.py:784 +#: order/api.py:437 order/api.py:834 +#, fuzzy +#| msgid "Order Code" msgid "Order Complete" -msgstr "订单完成" +msgstr "订单编码" -#: order/api.py:452 +#: order/api.py:458 +#, fuzzy +#| msgid "Pending" msgid "Order Pending" -msgstr "订单待定" +msgstr "待定" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1505 order/models.py:1383 order/models.py:1490 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 msgid "Purchase Order" -msgstr "采购订单" +msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1509 order/models.py:2208 order/models.py:2259 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 +#, fuzzy +#| msgid "Returned" msgid "Return Order" -msgstr "退货订单" +msgstr "已退回" #: order/models.py:90 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "Total price for this order" -msgstr "此订单的总价" +msgstr "负责此订单的用户或群组" #: order/models.py:95 order/serializers.py:71 +#, fuzzy +#| msgid "Currency" msgid "Order Currency" -msgstr "订单货币" +msgstr "货币" #: order/models.py:98 order/serializers.py:72 msgid "Currency for this order (leave blank to use company default)" -msgstr "此订单的货币 (留空以使用公司默认值)" +msgstr "" #: order/models.py:246 +#, fuzzy +#| msgid "Build output does not match the parent build" msgid "Contact does not match selected company" -msgstr "联系人与所选公司不匹配" +msgstr "生产产出与对应生产不匹配" -#: order/models.py:289 +#: order/models.py:278 +#, fuzzy +#| msgid "Description (optional)" msgid "Order description (optional)" -msgstr "订单描述 (可选)" +msgstr "描述 (可选)" -#: order/models.py:298 +#: order/models.py:287 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "Select project code for this order" -msgstr "为此订单选择项目编码" +msgstr "负责此订单的用户或群组" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:291 order/models.py:1288 order/models.py:1702 msgid "Link to external page" -msgstr "链接到外部页面" +msgstr "" -#: order/models.py:310 +#: order/models.py:299 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "订单交付的预期日期。订单将在此日期后过期。" +msgstr "" -#: order/models.py:324 +#: order/models.py:313 msgid "Created By" -msgstr "创建人" +msgstr "" -#: order/models.py:332 +#: order/models.py:321 msgid "User or group responsible for this order" -msgstr "负责此订单的用户或组" +msgstr "负责此订单的用户或群组" -#: order/models.py:343 +#: order/models.py:332 +#, fuzzy +#| msgid "Priority of this build order" msgid "Point of contact for this order" -msgstr "此订单的联系人" +msgstr "此构建订单的优先级" -#: order/models.py:353 +#: order/models.py:342 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "Company address for this order" -msgstr "此订单的公司地址" +msgstr "负责此订单的用户或群组" -#: order/models.py:468 order/models.py:979 +#: order/models.py:443 order/models.py:899 msgid "Order reference" -msgstr "订单参考" +msgstr "" -#: order/models.py:477 +#: order/models.py:451 order/models.py:923 msgid "Purchase order status" -msgstr "采购订单状态" +msgstr "" -#: order/models.py:492 +#: order/models.py:466 msgid "Company from which the items are being ordered" -msgstr "订购物品的公司" +msgstr "订购该商品的公司" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:477 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 msgid "Supplier Reference" -msgstr "供应商参考" +msgstr "" -#: order/models.py:504 +#: order/models.py:478 msgid "Supplier order reference code" -msgstr "供应商订单参考代码" +msgstr "" -#: order/models.py:513 +#: order/models.py:487 msgid "received by" -msgstr "接收人" +msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:493 order/models.py:2034 msgid "Issue Date" -msgstr "签发日期" +msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:494 order/models.py:2035 msgid "Date order was issued" -msgstr "订单发出日期" +msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:501 order/models.py:2042 msgid "Date order was completed" -msgstr "订单完成日期" +msgstr "" -#: order/models.py:571 +#: order/models.py:545 msgid "Part supplier must match PO supplier" -msgstr "零件供应商必须与采购订单供应商匹配" +msgstr "" -#: order/models.py:806 +#: order/models.py:739 msgid "Quantity must be a positive number" -msgstr "数量必须是正数" +msgstr "数量必须大于0" -#: order/models.py:991 +#: order/models.py:911 msgid "Company to which the items are being sold" -msgstr "出售物品的公司" +msgstr "向其出售该商品的公司" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "销售订单状态" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:934 order/models.py:2027 msgid "Customer Reference " -msgstr "客户参考 " +msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:935 order/models.py:2028 msgid "Customer order reference code" -msgstr "客户订单参考代码" +msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:939 order/models.py:1656 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" -msgstr "发货日期" +msgstr "" -#: order/models.py:1028 +#: order/models.py:948 msgid "shipped by" -msgstr "发货人" - -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "订单已完成" +msgstr "" -#: order/models.py:1080 -msgid "Order is already cancelled" -msgstr "订单已取消" +#: order/models.py:999 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "" -#: order/models.py:1084 +#: order/models.py:1004 +#, fuzzy +#| msgid "Build Order is ready to mark as completed" msgid "Only an open order can be marked as complete" -msgstr "只有未结订单才能标记为已完成" +msgstr "构建订单已准备好标记为已完成" -#: order/models.py:1088 +#: order/models.py:1008 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "由于发货不完整,订单无法完成" +msgstr "" -#: order/models.py:1093 +#: order/models.py:1013 msgid "Order cannot be completed as there are incomplete line items" -msgstr "订单无法完成,因为行项目不完整" +msgstr "" -#: order/models.py:1357 +#: order/models.py:1260 msgid "Item quantity" -msgstr "项目数量" +msgstr "" -#: order/models.py:1374 +#: order/models.py:1277 msgid "Line item reference" -msgstr "行项目参考" +msgstr "" -#: order/models.py:1381 +#: order/models.py:1284 msgid "Line item notes" -msgstr "行项目注释" +msgstr "" -#: order/models.py:1393 +#: order/models.py:1296 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)" +msgstr "" -#: order/models.py:1414 +#: order/models.py:1317 +#, fuzzy +#| msgid "Description (optional)" msgid "Line item description (optional)" -msgstr "行项目描述 (可选)" +msgstr "描述 (可选)" -#: order/models.py:1420 +#: order/models.py:1323 msgid "Context" -msgstr "上下文" +msgstr "" -#: order/models.py:1421 +#: order/models.py:1324 msgid "Additional context for this line" -msgstr "此行的附加上下文" +msgstr "" -#: order/models.py:1431 +#: order/models.py:1334 msgid "Unit price" -msgstr "单位价格" - -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "采购订单行项目" +msgstr "" -#: order/models.py:1469 +#: order/models.py:1367 msgid "Supplier part must match supplier" -msgstr "供应商零件必须与供应商匹配" +msgstr "" -#: order/models.py:1476 +#: order/models.py:1374 msgid "deleted" -msgstr "已删除" +msgstr "" -#: order/models.py:1504 +#: order/models.py:1402 msgid "Supplier part" -msgstr "供应商零件" - -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +msgstr "供应商商品" + +#: order/models.py:1409 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 msgid "Received" -msgstr "已接收" +msgstr "" -#: order/models.py:1512 +#: order/models.py:1410 msgid "Number of items received" -msgstr "收到的物品数量" +msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2310 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1521 +#: order/models.py:1419 msgid "Unit purchase price" -msgstr "每单位的采购价格" +msgstr "" -#: order/models.py:1536 +#: order/models.py:1434 msgid "Where does the Purchaser want this item to be stored?" -msgstr "买方希望将此物品存放在哪里?" - -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "采购订单附加行" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "销售订单行项目" +msgstr "" -#: order/models.py:1637 +#: order/models.py:1523 msgid "Virtual part cannot be assigned to a sales order" -msgstr "虚拟零件不能分配给销售订单" +msgstr "" -#: order/models.py:1642 +#: order/models.py:1528 msgid "Only salable parts can be assigned to a sales order" -msgstr "只有可销售的零件才能分配给销售订单" +msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1554 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" -msgstr "售出价格" +msgstr "销售价格" -#: order/models.py:1669 +#: order/models.py:1555 msgid "Unit sale price" -msgstr "单位售出价格" - -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "已配送" +msgstr "" -#: order/models.py:1679 +#: order/models.py:1565 msgid "Shipped quantity" -msgstr "发货数量" - -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "销售订单发货" +msgstr "" -#: order/models.py:1772 +#: order/models.py:1657 msgid "Date of shipment" -msgstr "发货日期" +msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1663 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" -msgstr "送达日期" +msgstr "" -#: order/models.py:1779 +#: order/models.py:1664 msgid "Date of delivery of shipment" -msgstr "装运交货日期" +msgstr "" -#: order/models.py:1787 +#: order/models.py:1672 msgid "Checked By" -msgstr "审核人" +msgstr "" -#: order/models.py:1788 +#: order/models.py:1673 msgid "User who checked this shipment" -msgstr "检查此装运的用户" +msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 +#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 msgid "Shipment" -msgstr "配送" +msgstr "" -#: order/models.py:1796 +#: order/models.py:1681 msgid "Shipment number" -msgstr "配送单号" +msgstr "" -#: order/models.py:1804 +#: order/models.py:1689 msgid "Tracking Number" -msgstr "跟踪单号" +msgstr "" -#: order/models.py:1805 +#: order/models.py:1690 msgid "Shipment tracking information" -msgstr "配送跟踪信息" +msgstr "" -#: order/models.py:1812 +#: order/models.py:1697 msgid "Invoice Number" -msgstr "发票编号" +msgstr "" -#: order/models.py:1813 +#: order/models.py:1698 msgid "Reference number for associated invoice" -msgstr "相关发票的参考号" +msgstr "" -#: order/models.py:1833 +#: order/models.py:1718 msgid "Shipment has already been sent" -msgstr "货物已发出" +msgstr "" -#: order/models.py:1836 +#: order/models.py:1721 msgid "Shipment has no allocated stock items" -msgstr "发货没有分配库存项目" - -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "销售订单加行" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "销售订单分配" +msgstr "" -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1839 order/models.py:1841 msgid "Stock item has not been assigned" -msgstr "库存项目尚未分配" +msgstr "" -#: order/models.py:1973 +#: order/models.py:1848 msgid "Cannot allocate stock item to a line with a different part" -msgstr "无法将库存项目分配给具有不同零件的行" +msgstr "" -#: order/models.py:1976 +#: order/models.py:1851 msgid "Cannot allocate stock to a line without a part" -msgstr "无法将库存分配给没有零件的生产线" +msgstr "" -#: order/models.py:1979 +#: order/models.py:1854 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "分配数量不能超过库存数量" +msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1873 order/serializers.py:1227 msgid "Quantity must be 1 for serialized stock item" -msgstr "序列化库存项目的数量必须为1" +msgstr "" -#: order/models.py:2001 +#: order/models.py:1876 msgid "Sales order does not match shipment" -msgstr "销售订单与发货不匹配" +msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1877 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" -msgstr "发货与销售订单不匹配" +msgstr "" -#: order/models.py:2010 +#: order/models.py:1885 msgid "Line" -msgstr "行" +msgstr "" -#: order/models.py:2019 +#: order/models.py:1894 msgid "Sales order shipment reference" -msgstr "销售订单发货参考" +msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1907 order/models.py:2215 +#: templates/js/translated/return_order.js:722 msgid "Item" -msgstr "项目" +msgstr "" -#: order/models.py:2033 +#: order/models.py:1908 msgid "Select stock item to allocate" -msgstr "选择要分配的库存项目" +msgstr "" -#: order/models.py:2042 +#: order/models.py:1917 msgid "Enter stock allocation quantity" -msgstr "输入库存分配数量" +msgstr "" -#: order/models.py:2136 +#: order/models.py:1997 +#, fuzzy +#| msgid "Build Order Reference" msgid "Return Order reference" -msgstr "退货订单参考" +msgstr "相关生产订单" -#: order/models.py:2148 +#: order/models.py:2009 +#, fuzzy +#| msgid "Company from which the items are being ordered" msgid "Company from which items are being returned" -msgstr "退回物品的公司" +msgstr "订购该商品的公司" -#: order/models.py:2160 +#: order/models.py:2021 msgid "Return order status" -msgstr "退货订单状态" - -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "退货订单行项目" +msgstr "" -#: order/models.py:2376 +#: order/models.py:2200 msgid "Only serialized items can be assigned to a Return Order" -msgstr "只有序列化的项目才能分配给退货订单" +msgstr "" -#: order/models.py:2392 +#: order/models.py:2216 +#, fuzzy +#| msgid "Returned from customer" msgid "Select item to return from customer" -msgstr "选择要从客户处退回的商品" +msgstr "从客户退货" -#: order/models.py:2398 +#: order/models.py:2222 msgid "Received Date" -msgstr "接收日期" +msgstr "" -#: order/models.py:2399 +#: order/models.py:2223 msgid "The date this this return item was received" -msgstr "收到此退货的日期" +msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" -msgstr "结果" +msgstr "" -#: order/models.py:2411 +#: order/models.py:2235 msgid "Outcome for this line item" -msgstr "该行项目的结果" +msgstr "" -#: order/models.py:2418 +#: order/models.py:2242 msgid "Cost associated with return or repair for this line item" -msgstr "与此行项目的退货或维修相关的成本" - -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "退货订单附加行" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "已完成行项目" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "供应商名称" +msgstr "" -#: order/serializers.py:331 +#: order/serializers.py:283 msgid "Order cannot be cancelled" -msgstr "订单不能取消" +msgstr "无法取消订单" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:298 order/serializers.py:1243 msgid "Allow order to be closed with incomplete line items" -msgstr "允许关闭行项目不完整的订单" +msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:308 order/serializers.py:1253 msgid "Order has incomplete line items" -msgstr "订单中的行项目不完整" +msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:436 msgid "Order is not open" -msgstr "订单未打开" +msgstr "" -#: order/serializers.py:527 +#: order/serializers.py:457 +#, fuzzy +#| msgid "Part Pricing" msgid "Auto Pricing" -msgstr "自动定价" +msgstr "商品价格" -#: order/serializers.py:529 +#: order/serializers.py:459 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "根据供应商零件数据自动计算采购价格" +msgstr "" -#: order/serializers.py:539 +#: order/serializers.py:469 msgid "Purchase price currency" -msgstr "购买价格货币" +msgstr "" -#: order/serializers.py:545 +#: order/serializers.py:475 +#, fuzzy +#| msgid "Select Stock Items" msgid "Merge Items" -msgstr "合并项目" +msgstr "选择库存项" -#: order/serializers.py:547 +#: order/serializers.py:477 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "内部零件编号" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "内部零件名称" +msgstr "" -#: order/serializers.py:584 +#: order/serializers.py:495 msgid "Supplier part must be specified" -msgstr "必须指定供应商零件" +msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:498 msgid "Purchase order must be specified" -msgstr "必须指定采购订单" +msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:506 msgid "Supplier must match purchase order" -msgstr "供应商必须匹配采购订单" +msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:507 msgid "Purchase order must match supplier" -msgstr "采购订单必须与供应商匹配" +msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:546 order/serializers.py:1321 msgid "Line Item" -msgstr "行项目" +msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:552 msgid "Line item does not match purchase order" -msgstr "行项目与采购订单不匹配" +msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 msgid "Select destination location for received items" -msgstr "为收到的物品选择目的地位置" +msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" -msgstr "输入入库项目的批号" +msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" -msgstr "输入入库库存项目的序列号" - -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "覆盖传入库存项目的包装资料" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "传入库存项目的附加说明" +msgstr "" -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:597 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:707 +#: order/serializers.py:598 +#, fuzzy +#| msgid "Scan Barcode" msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:723 +#: order/serializers.py:614 msgid "Barcode is already in use" -msgstr "条形码已被使用" +msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:638 msgid "An integer quantity must be provided for trackable parts" -msgstr "必须为可跟踪零件提供整数数量" +msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:686 order/serializers.py:1692 msgid "Line items must be provided" -msgstr "必须提供行项目" +msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:702 msgid "Destination location must be specified" -msgstr "必须指定目标位置" +msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:713 msgid "Supplied barcode values must be unique" -msgstr "提供的条形码值必须是唯一的" +msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1070 msgid "Sale price currency" -msgstr "售出价格货币" +msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1130 msgid "No shipment details provided" -msgstr "未提供装运详细信息" +msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1191 order/serializers.py:1330 msgid "Line item is not associated with this order" -msgstr "行项目与此订单不关联" +msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1210 msgid "Quantity must be positive" -msgstr "数量必须为正" +msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1340 msgid "Enter serial numbers to allocate" -msgstr "输入要分配的序列号" +msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1362 order/serializers.py:1468 msgid "Shipment has already been shipped" -msgstr "货物已发出" +msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1365 order/serializers.py:1471 msgid "Shipment is not associated with this order" -msgstr "发货与此订单无关" +msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1412 msgid "No match found for the following serial numbers" -msgstr "未找到以下序列号的匹配项" +msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1419 msgid "The following serial numbers are already allocated" -msgstr "以下序列号已分配" +msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1646 msgid "Return order line item" -msgstr "退货订单行项目" +msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1652 +#, fuzzy +#| msgid "Build output does not match Build Order" msgid "Line item does not match return order" -msgstr "行项目与退货订单不匹配" +msgstr "生产产出与订单不匹配" -#: order/serializers.py:1761 +#: order/serializers.py:1655 +#, fuzzy +#| msgid "This build output has already been completed" msgid "Line item has already been received" -msgstr "行项目已收到" +msgstr "此生产产出已经完成" -#: order/serializers.py:1790 +#: order/serializers.py:1684 msgid "Items can only be received against orders which are in progress" -msgstr "只能根据正在进行的订单接收物品" +msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1762 +#, fuzzy +#| msgid "Uses default currency" msgid "Line price currency" -msgstr "行价格货币" - -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "丢失" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "已退回" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "正在进行" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "退回" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "維修" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "替換" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "退款" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "拒絕" +msgstr "使用默认货币" #: order/tasks.py:25 msgid "Overdue Purchase Order" -msgstr "逾期采购订单" +msgstr "" #: order/tasks.py:30 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "采购订单 {po} 已逾期" +msgstr "" #: order/tasks.py:75 msgid "Overdue Sales Order" -msgstr "逾期销售订单" +msgstr "" #: order/tasks.py:80 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "销售订单 {so} 已逾期" +msgstr "" #: order/templates/order/order_base.html:51 msgid "Print purchase order report" -msgstr "打印采购订单报告" +msgstr "" #: order/templates/order/order_base.html:53 #: order/templates/order/return_order_base.html:62 #: order/templates/order/sales_order_base.html:62 msgid "Export order to file" -msgstr "将订单导出到文件" +msgstr "" #: order/templates/order/order_base.html:59 #: order/templates/order/return_order_base.html:72 #: order/templates/order/sales_order_base.html:71 msgid "Order actions" -msgstr "订购操作" +msgstr "" #: order/templates/order/order_base.html:64 #: order/templates/order/return_order_base.html:76 #: order/templates/order/sales_order_base.html:75 msgid "Edit order" -msgstr "编辑订单" +msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "再次订购" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" -msgstr "挂起订单" - -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 msgid "Cancel order" msgstr "取消订单" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 +#, fuzzy +#| msgid "Build Order" msgid "Issue Order" -msgstr "发布订单" +msgstr "生产订单" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" -msgstr "标记订单为已完成" +msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" -msgstr "完成订单" +msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 +#, fuzzy +#| msgid "Supplier part" msgid "Supplier part thumbnail" -msgstr "供应商零件缩略图" +msgstr "供应商商品" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" -msgstr "订单描述" +msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" -msgstr "没有可用的供应商信息" +msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" -msgstr "已完成项" +msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" -msgstr "未完成" +msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" -msgstr "已派发" +msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" -msgstr "总计" +msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" -msgstr "无法计算总成本" +msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 +#, fuzzy +#| msgid "Purchase Orders" msgid "Purchase Order QR Code" -msgstr "采购订单二维码" +msgstr "采购订单" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 +#, fuzzy +#| msgid "Create Purchase Order" msgid "Link Barcode to Purchase Order" -msgstr "将条形码链接到采购订单" +msgstr "创建采购订单" #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 #: templates/patterns/wizard/match_fields.html:8 msgid "Missing selections for the following required columns" -msgstr "缺少以下所需列的选择" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:20 #: part/templates/part/import_wizard/ajax_match_fields.html:20 #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "发现重复选项,请参阅下面。修复它们后重新尝试提交" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -6155,7 +5926,7 @@ msgstr "发现重复选项,请参阅下面。修复它们后重新尝试提交 #: part/templates/part/import_wizard/match_references.html:21 #: templates/patterns/wizard/match_fields.html:28 msgid "Submit Selections" -msgstr "提交选项" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:35 #: part/templates/part/import_wizard/ajax_match_fields.html:28 @@ -6169,14 +5940,14 @@ msgstr "文件字段" #: part/templates/part/import_wizard/match_fields.html:42 #: templates/patterns/wizard/match_fields.html:41 msgid "Remove column" -msgstr "删除列" +msgstr "移除列" #: order/templates/order/order_wizard/match_fields.html:60 #: part/templates/part/import_wizard/ajax_match_fields.html:53 #: part/templates/part/import_wizard/match_fields.html:60 #: templates/patterns/wizard/match_fields.html:59 msgid "Duplicate selection" -msgstr "重复选项" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:71 #: order/templates/order/order_wizard/match_parts.html:52 @@ -6184,13 +5955,13 @@ msgstr "重复选项" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 #: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "移除行" @@ -6199,7 +5970,7 @@ msgstr "移除行" #: part/templates/part/import_wizard/ajax_match_references.html:12 #: part/templates/part/import_wizard/match_references.html:12 msgid "Errors exist in the submitted data" -msgstr "提交的数据中存在错误" +msgstr "提交数据中存在错误" #: order/templates/order/order_wizard/match_parts.html:28 #: part/templates/part/import_wizard/ajax_match_references.html:21 @@ -6209,19 +5980,19 @@ msgstr "行" #: order/templates/order/order_wizard/match_parts.html:29 msgid "Select Supplier Part" -msgstr "选择供应商零件" +msgstr "选择供应商商品" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" -msgstr "返回至订单" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "上传采购订单文件" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "订单已经处理。无法上传文件。" +msgstr "" #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -6229,2068 +6000,2003 @@ msgstr "订单已经处理。无法上传文件。" #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "共%(count)s个步骤中的第 %(step)s 步" +msgstr "步骤 %(step)s / %(count)s" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "收到的库存" +msgstr "" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" -msgstr "采购订单项目" +msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "添加行项目" +msgstr "" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "收到行项目" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "附加项" +msgstr "" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "添加附加项" +msgstr "" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "已收到的项目" +msgstr "" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 #: order/templates/order/sales_order_detail.html:139 msgid "Order Notes" -msgstr "订单备注" +msgstr "" #: order/templates/order/return_order_base.html:18 #: order/templates/order/sales_order_base.html:18 msgid "Customer logo thumbnail" -msgstr "客户 logo 缩略图" +msgstr "" #: order/templates/order/return_order_base.html:60 +#, fuzzy +#| msgid "Print build order report" msgid "Print return order report" -msgstr "打印退货订单报告" +msgstr "打印构建订单报告" #: order/templates/order/return_order_base.html:64 #: order/templates/order/sales_order_base.html:64 msgid "Print packing list" -msgstr "打印包装列表" +msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" -msgstr "客户参考" +msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" -msgstr "总成本" +msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 +#, fuzzy +#| msgid "Returned" msgid "Return Order QR Code" -msgstr "退货订单二维码" +msgstr "已退回" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 +#, fuzzy +#| msgid "Create Purchase Order" msgid "Link Barcode to Return Order" -msgstr "将条形码链接到退货订单" +msgstr "创建采购订单" #: order/templates/order/return_order_sidebar.html:5 +#, fuzzy +#| msgid "Build Order Details" msgid "Order Details" -msgstr "订单详情" +msgstr "生产订单详情" #: order/templates/order/sales_order_base.html:60 msgid "Print sales order report" -msgstr "打印销售订单报告" +msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 +#, fuzzy +#| msgid "Match Items" msgid "Ship Items" -msgstr "运送项目" - -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "标记为已发货" +msgstr "匹配项" -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" -msgstr "完成销售订单" +msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" -msgstr "销售订单没有完全分配" +msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" -msgstr "完成配送" +msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 +#, fuzzy +#| msgid "Sales Order" msgid "Sales Order QR Code" -msgstr "销售订单二维码" +msgstr "销售订单" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 +#, fuzzy +#| msgid "New Sales Order" msgid "Link Barcode to Sales Order" -msgstr "将条形码链接到销售订单" +msgstr "新建销售订单" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "销售订单项目" +msgstr "" #: order/templates/order/sales_order_detail.html:67 #: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 msgid "Pending Shipments" -msgstr "待发货" +msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" -msgstr "动作" +msgstr "" #: order/templates/order/sales_order_detail.html:80 msgid "New Shipment" -msgstr "新建配送" +msgstr "" #: order/views.py:120 msgid "Match Supplier Parts" -msgstr "匹配供应商零件" +msgstr "" #: order/views.py:406 msgid "Sales order not found" -msgstr "未找到销售订单" +msgstr "" #: order/views.py:412 msgid "Price not found" -msgstr "未找到价格" +msgstr "" #: order/views.py:415 #, python-brace-format msgid "Updated {part} unit-price to {price}" -msgstr "更新零件{part} 单价到{price}" +msgstr "" #: order/views.py:421 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "更新零件 {part} 单价到 {price} 且更新数量到 {qty}" +msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "商品ID" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 msgid "IPN" -msgstr "内部零件号 IPN" +msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 +#: report/models.py:195 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" -msgstr "版本" +msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "关键词" #: part/admin.py:60 +#, fuzzy +#| msgid "Part name" msgid "Part Image" -msgstr "零件图像" +msgstr "商品名称" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "类别 ID" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" -msgstr "类别名称" +msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" -msgstr "默认位置ID" +msgstr "" #: part/admin.py:76 msgid "Default Supplier ID" -msgstr "默认供应商ID" +msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 msgid "Variant Of" -msgstr "变体" +msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "最低库存" #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "用于" +msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" -msgstr "正在生产" +msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" -msgstr "最低成本" +msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" -msgstr "最高成本" +msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" -msgstr "父类编号" +msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 msgid "Parent Name" -msgstr "父类名称" +msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "类别路径" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" -msgstr "零件" +msgstr "商品" -#: part/admin.py:378 +#: part/admin.py:384 msgid "BOM Level" -msgstr "物料清单级别" +msgstr "" -#: part/admin.py:381 +#: part/admin.py:387 msgid "BOM Item ID" -msgstr "物料清单项目 lD" +msgstr "" -#: part/admin.py:391 +#: part/admin.py:397 msgid "Parent IPN" -msgstr "父类内部零件号" +msgstr "" -#: part/admin.py:405 -msgid "Part Revision" -msgstr "零件修订版本" +#: part/admin.py:408 part/models.py:3923 +msgid "Part IPN" +msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:421 part/serializers.py:1261 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" -msgstr "最低价格" +msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:426 part/serializers.py:1276 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" -msgstr "最高价格" +msgstr "" -#: part/api.py:104 +#: part/api.py:119 msgid "Starred" -msgstr "已加星标" +msgstr "" -#: part/api.py:106 +#: part/api.py:121 msgid "Filter by starred categories" -msgstr "按星标类别筛选" +msgstr "" -#: part/api.py:123 stock/api.py:310 +#: part/api.py:138 stock/api.py:284 msgid "Depth" -msgstr "深度" +msgstr "" -#: part/api.py:123 +#: part/api.py:138 msgid "Filter by category depth" -msgstr "按类别深度筛选" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "顶级" +msgstr "" -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "按顶级类别筛选" +#: part/api.py:156 stock/api.py:302 +msgid "Cascade" +msgstr "" #: part/api.py:158 msgid "Include sub-categories in filtered results" -msgstr "在筛选结果中包含子类别" +msgstr "" -#: part/api.py:179 templates/js/translated/part.js:311 +#: part/api.py:178 +#, fuzzy +#| msgid "parent" msgid "Parent" -msgstr "父类" +msgstr "上级项" -#: part/api.py:181 +#: part/api.py:180 +#, fuzzy +#| msgid "Create new part category" msgid "Filter by parent category" -msgstr "按父类别筛选" +msgstr "新建商品类别" -#: part/api.py:214 +#: part/api.py:213 msgid "Exclude Tree" -msgstr "排除树" +msgstr "" -#: part/api.py:216 +#: part/api.py:215 +#, fuzzy +#| msgid "Exclude stock items from this selected location" msgid "Exclude sub-categories under the specified category" -msgstr "排除指定类别下的子类别" +msgstr "从该选定的仓储地点排除库存项" -#: part/api.py:441 +#: part/api.py:461 +#, fuzzy +#| msgid "Units" msgid "Has Results" -msgstr "有结果" +msgstr "单位" -#: part/api.py:608 +#: part/api.py:628 msgid "Incoming Purchase Order" -msgstr "收到的采购订单" +msgstr "" -#: part/api.py:626 +#: part/api.py:646 msgid "Outgoing Sales Order" -msgstr "外发销售订单" +msgstr "" -#: part/api.py:642 +#: part/api.py:662 msgid "Stock produced by Build Order" -msgstr "建造生产订单产生的库存" +msgstr "" -#: part/api.py:726 +#: part/api.py:746 msgid "Stock required for Build Order" -msgstr "生产订单所需的库存" +msgstr "" -#: part/api.py:874 +#: part/api.py:893 +msgid "Valid" +msgstr "" + +#: part/api.py:894 msgid "Validate entire Bill of Materials" -msgstr "验证整个物料清单" +msgstr "" -#: part/api.py:880 +#: part/api.py:900 msgid "This option must be selected" -msgstr "必须选择此项" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "是修订版本" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "有修订版本" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "物料清单合规" +msgstr "" -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 +#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 +#: part/serializers.py:406 part/serializers.py:1117 +#: part/templates/part/part_base.html:260 stock/api.py:745 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2377 msgid "Category" msgstr "类别" -#: part/api.py:1761 -msgid "Assembly part is testable" -msgstr "" - -#: part/api.py:1770 -msgid "Component part is testable" -msgstr "" - -#: part/api.py:1821 +#: part/api.py:1849 msgid "Uses" -msgstr "使用" +msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" -msgstr "默认位置" +msgstr "默认仓储地点" -#: part/bom.py:179 part/serializers.py:905 +#: part/bom.py:171 part/serializers.py:822 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" -msgstr "库存总量" +msgstr "" #: part/forms.py:49 msgid "Input quantity for price calculation" -msgstr "输入用于价格计算的数量" +msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" -msgstr "零件类别" +msgstr "商品类别" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:83 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" -msgstr "零件类别" +msgstr "商品类别" -#: part/models.py:108 +#: part/models.py:102 msgid "Default location for parts in this category" -msgstr "此类别零件的默认库存地点" +msgstr "此类别商品的默认仓储地点" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" -msgstr "结构性" +msgstr "" -#: part/models.py:115 +#: part/models.py:109 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "零件可能无法直接分配到结构类别,但可以分配到子类别。" +msgstr "" -#: part/models.py:124 +#: part/models.py:118 msgid "Default keywords" -msgstr "默认关键字" +msgstr "" -#: part/models.py:125 +#: part/models.py:119 msgid "Default keywords for parts in this category" -msgstr "此类别零件的默认关键字" +msgstr "此类别商品的默认关键字" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" -msgstr "图标" +msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:126 stock/models.py:149 msgid "Icon (optional)" -msgstr "图标(可选)" +msgstr "" -#: part/models.py:178 +#: part/models.py:148 msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "您不能使这个零件类别结构化,因为有些零件已经分配给了它!" - -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "无法删除这个零件,因为它已被锁定" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "无法删除这个零件,因为它仍然处于活动状态" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "无法删除这个零件,因为它被使用在了装配中" +msgstr "" -#: part/models.py:565 +#: part/models.py:484 msgid "Invalid choice for parent part" -msgstr "无效的上级零件选择" +msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:532 part/models.py:539 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清单 (递归)" - -#: part/models.py:632 -#, python-brace-format -msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清单 (递归)" +msgstr "" -#: part/models.py:695 +#: part/models.py:551 #, python-brace-format -msgid "IPN must match regex pattern {pattern}" -msgstr "内部零件号必须匹配正则表达式 {pattern}" - -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "零件不能是对自身的修订" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "无法对已经是修订版本的零件进行修订" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "必须指定修订代码" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "修订仅对装配零件允许" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "无法对模版零件进行修订" +msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" +msgstr "" -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "上级零件必须指向相同的模版" +#: part/models.py:616 +#, fuzzy, python-brace-format +#| msgid "IPN must match regex pattern {pat}" +msgid "IPN must match regex pattern {pattern}" +msgstr "IPN 必须匹配正则表达式 {pat}" -#: part/models.py:816 +#: part/models.py:696 msgid "Stock item with this serial number already exists" -msgstr "该序列号库存项己存在" +msgstr "" -#: part/models.py:917 +#: part/models.py:801 msgid "Duplicate IPN not allowed in part settings" -msgstr "在零件设置中不允许重复的内部零件号" +msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "重复的零件修订版本已经存在。" - -#: part/models.py:936 +#: part/models.py:811 msgid "Part with this Name, IPN and Revision already exists." -msgstr "有这个名字,内部零件号,和修订版本的零件已经存在" +msgstr "" -#: part/models.py:951 +#: part/models.py:826 msgid "Parts cannot be assigned to structural part categories!" -msgstr "零件不能分配到结构性零件类别!" +msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:855 part/models.py:3922 msgid "Part name" -msgstr "零件名称" +msgstr "商品名称" -#: part/models.py:988 +#: part/models.py:860 msgid "Is Template" -msgstr "是模板" +msgstr "" -#: part/models.py:989 +#: part/models.py:861 msgid "Is this part a template part?" -msgstr "这个零件是一个模版零件吗?" +msgstr "" -#: part/models.py:999 +#: part/models.py:871 msgid "Is this part a variant of another part?" -msgstr "这个零件是另一零件的变体吗?" +msgstr "" -#: part/models.py:1007 +#: part/models.py:879 +#, fuzzy +#| msgid "Description (optional)" msgid "Part description (optional)" -msgstr "零件描述(可选)" +msgstr "描述 (可选)" -#: part/models.py:1015 +#: part/models.py:887 msgid "Part keywords to improve visibility in search results" -msgstr "提高搜索结果可见性的零件关键字" +msgstr "提高搜索结果可见性的关键字" -#: part/models.py:1025 +#: part/models.py:897 msgid "Part category" -msgstr "零件类别" - -#: part/models.py:1040 -msgid "Part revision or version number" -msgstr "零件修订版本或版本号" +msgstr "商品类别" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" -msgstr "这零件是另一零件的修订版本吗?" +#: part/models.py:905 +msgid "Internal Part Number" +msgstr "内部商品编号" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" -msgstr "修订版本" +#: part/models.py:912 +msgid "Part revision or version number" +msgstr "商品版本号" -#: part/models.py:1075 +#: part/models.py:937 msgid "Where is this item normally stored?" -msgstr "该物品通常存放在哪里?" +msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:983 part/templates/part/part_base.html:376 msgid "Default Supplier" -msgstr "默认供应商" +msgstr "" -#: part/models.py:1122 +#: part/models.py:984 msgid "Default supplier part" -msgstr "默认供应商零件" +msgstr "默认供应商商品" -#: part/models.py:1129 +#: part/models.py:991 msgid "Default Expiry" -msgstr "默认到期" +msgstr "" -#: part/models.py:1130 +#: part/models.py:992 msgid "Expiry time (in days) for stock items of this part" -msgstr "此零件库存项的过期时间 (天)" +msgstr "" -#: part/models.py:1139 +#: part/models.py:1001 msgid "Minimum allowed stock level" -msgstr "允许的最小库存量" +msgstr "" -#: part/models.py:1148 +#: part/models.py:1010 msgid "Units of measure for this part" -msgstr "此零件的计量单位" +msgstr "" -#: part/models.py:1155 +#: part/models.py:1017 msgid "Can this part be built from other parts?" -msgstr "这个零件可由其他零件加工而成吗?" +msgstr "" -#: part/models.py:1161 +#: part/models.py:1023 msgid "Can this part be used to build other parts?" -msgstr "这个零件可用于创建其他零件吗?" +msgstr "" -#: part/models.py:1167 +#: part/models.py:1029 msgid "Does this part have tracking for unique items?" -msgstr "此零件是否有唯一物品的追踪功能" - -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1179 +#: part/models.py:1035 msgid "Can this part be purchased from external suppliers?" -msgstr "这个零件可从外部供应商购买吗?" +msgstr "" -#: part/models.py:1185 +#: part/models.py:1041 msgid "Can this part be sold to customers?" -msgstr "此零件可以销售给客户吗?" +msgstr "此商品可以销售给客户吗?" -#: part/models.py:1189 +#: part/models.py:1045 msgid "Is this part active?" -msgstr "这个零件是否已激活?" - -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "已锁定" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "无法编辑锁定的零件" +msgstr "" -#: part/models.py:1201 +#: part/models.py:1051 msgid "Is this a virtual part, such as a software product or license?" -msgstr "这是一个虚拟零件,例如一个软件产品或许可证吗?" +msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:1207 +#: part/models.py:1057 msgid "BOM checksum" -msgstr "物料清单校验和" +msgstr "" -#: part/models.py:1208 +#: part/models.py:1058 msgid "Stored BOM checksum" -msgstr "保存的物料清单校验和" +msgstr "" -#: part/models.py:1216 +#: part/models.py:1066 msgid "BOM checked by" -msgstr "物料清单检查人" +msgstr "" -#: part/models.py:1221 +#: part/models.py:1071 msgid "BOM checked date" -msgstr "物料清单检查日期" +msgstr "" -#: part/models.py:1237 +#: part/models.py:1087 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1247 +#: part/models.py:1097 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "Owner responsible for this part" -msgstr "此零件的负责人" +msgstr "负责此订单的用户或群组" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1102 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" -msgstr "最近库存盘点" +msgstr "" -#: part/models.py:2125 +#: part/models.py:1975 msgid "Sell multiple" -msgstr "出售多个" +msgstr "" -#: part/models.py:3116 +#: part/models.py:2994 msgid "Currency used to cache pricing calculations" -msgstr "用于缓存定价计算的货币" +msgstr "" -#: part/models.py:3132 +#: part/models.py:3010 msgid "Minimum BOM Cost" -msgstr "最低物料清单成本" +msgstr "" -#: part/models.py:3133 +#: part/models.py:3011 msgid "Minimum cost of component parts" -msgstr "元件的最低成本" +msgstr "" -#: part/models.py:3139 +#: part/models.py:3017 msgid "Maximum BOM Cost" -msgstr "物料清单的最高成本" +msgstr "" -#: part/models.py:3140 +#: part/models.py:3018 msgid "Maximum cost of component parts" -msgstr "元件的最高成本" +msgstr "" -#: part/models.py:3146 +#: part/models.py:3024 msgid "Minimum Purchase Cost" -msgstr "最低购买成本" +msgstr "" -#: part/models.py:3147 +#: part/models.py:3025 msgid "Minimum historical purchase cost" -msgstr "最高历史购买成本" +msgstr "" -#: part/models.py:3153 +#: part/models.py:3031 msgid "Maximum Purchase Cost" -msgstr "最大购买成本" +msgstr "" -#: part/models.py:3154 +#: part/models.py:3032 msgid "Maximum historical purchase cost" -msgstr "最高历史购买成本" +msgstr "" -#: part/models.py:3160 +#: part/models.py:3038 msgid "Minimum Internal Price" -msgstr "最低内部价格" +msgstr "" -#: part/models.py:3161 +#: part/models.py:3039 msgid "Minimum cost based on internal price breaks" -msgstr "基于内部批发价的最低成本" +msgstr "" -#: part/models.py:3167 +#: part/models.py:3045 msgid "Maximum Internal Price" -msgstr "最大内部价格" +msgstr "" -#: part/models.py:3168 +#: part/models.py:3046 msgid "Maximum cost based on internal price breaks" -msgstr "基于内部批发价的最高成本" +msgstr "" -#: part/models.py:3174 +#: part/models.py:3052 msgid "Minimum Supplier Price" -msgstr "供应商最低价格" +msgstr "" -#: part/models.py:3175 +#: part/models.py:3053 msgid "Minimum price of part from external suppliers" -msgstr "外部供应商零件的最低价格" +msgstr "" -#: part/models.py:3181 +#: part/models.py:3059 msgid "Maximum Supplier Price" -msgstr "供应商最高价格" +msgstr "" -#: part/models.py:3182 +#: part/models.py:3060 msgid "Maximum price of part from external suppliers" -msgstr "来自外部供应商的商零件的最高价格" +msgstr "" -#: part/models.py:3188 +#: part/models.py:3066 msgid "Minimum Variant Cost" -msgstr "最小变体成本" +msgstr "" -#: part/models.py:3189 +#: part/models.py:3067 msgid "Calculated minimum cost of variant parts" -msgstr "计算出的变体零件的最低成本" +msgstr "" -#: part/models.py:3195 +#: part/models.py:3073 msgid "Maximum Variant Cost" -msgstr "最大变体成本" +msgstr "" -#: part/models.py:3196 +#: part/models.py:3074 msgid "Calculated maximum cost of variant parts" -msgstr "计算出的变体零件的最大成本" +msgstr "" -#: part/models.py:3203 +#: part/models.py:3081 msgid "Override minimum cost" -msgstr "覆盖最低成本" +msgstr "" -#: part/models.py:3210 +#: part/models.py:3088 msgid "Override maximum cost" -msgstr "覆盖最大成本" +msgstr "" -#: part/models.py:3217 +#: part/models.py:3095 msgid "Calculated overall minimum cost" -msgstr "计算总最低成本" +msgstr "" -#: part/models.py:3224 +#: part/models.py:3102 msgid "Calculated overall maximum cost" -msgstr "计算总最大成本" +msgstr "" -#: part/models.py:3230 +#: part/models.py:3108 msgid "Minimum Sale Price" -msgstr "最低售出价格" +msgstr "" -#: part/models.py:3231 +#: part/models.py:3109 msgid "Minimum sale price based on price breaks" -msgstr "基于批发价的最低售出价格" +msgstr "" -#: part/models.py:3237 +#: part/models.py:3115 msgid "Maximum Sale Price" -msgstr "最高售出价格" +msgstr "" -#: part/models.py:3238 +#: part/models.py:3116 msgid "Maximum sale price based on price breaks" -msgstr "基于批发价的最大售出价格" +msgstr "" -#: part/models.py:3244 +#: part/models.py:3122 msgid "Minimum Sale Cost" -msgstr "最低销售成本" +msgstr "" -#: part/models.py:3245 +#: part/models.py:3123 msgid "Minimum historical sale price" -msgstr "历史最低售出价格" +msgstr "" -#: part/models.py:3251 +#: part/models.py:3129 msgid "Maximum Sale Cost" -msgstr "最高销售成本" +msgstr "" -#: part/models.py:3252 +#: part/models.py:3130 msgid "Maximum historical sale price" -msgstr "历史最高售出价格" +msgstr "" -#: part/models.py:3271 +#: part/models.py:3149 msgid "Part for stocktake" -msgstr "用于盘点的零件" +msgstr "" -#: part/models.py:3276 +#: part/models.py:3154 msgid "Item Count" -msgstr "物品数量" +msgstr "" -#: part/models.py:3277 +#: part/models.py:3155 msgid "Number of individual stock entries at time of stocktake" -msgstr "盘点时的个别库存条目数" +msgstr "" -#: part/models.py:3285 +#: part/models.py:3163 msgid "Total available stock at time of stocktake" -msgstr "盘点时可用库存总额" +msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3167 part/models.py:3250 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 msgid "Date" -msgstr "日期" +msgstr "" -#: part/models.py:3290 +#: part/models.py:3168 msgid "Date stocktake was performed" -msgstr "进行盘点的日期" +msgstr "" -#: part/models.py:3298 +#: part/models.py:3176 msgid "Additional notes" -msgstr "附加注释" +msgstr "" -#: part/models.py:3308 +#: part/models.py:3186 msgid "User who performed this stocktake" -msgstr "进行此盘点的用户" +msgstr "" -#: part/models.py:3314 +#: part/models.py:3192 msgid "Minimum Stock Cost" -msgstr "最低库存成本" +msgstr "" -#: part/models.py:3315 +#: part/models.py:3193 msgid "Estimated minimum cost of stock on hand" -msgstr "现有存库存最低成本估算" +msgstr "" -#: part/models.py:3321 +#: part/models.py:3199 msgid "Maximum Stock Cost" -msgstr "最高库存成本" +msgstr "" -#: part/models.py:3322 +#: part/models.py:3200 msgid "Estimated maximum cost of stock on hand" -msgstr "目前库存最高成本估算" +msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" -msgstr "报告" +msgstr "" -#: part/models.py:3379 +#: part/models.py:3257 msgid "Stocktake report file (generated internally)" -msgstr "盘点报告文件(内部生成)" +msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" -msgstr "零件计数" +msgstr "" -#: part/models.py:3385 +#: part/models.py:3263 msgid "Number of parts covered by stocktake" -msgstr "盘点涵盖的零件数量" +msgstr "" -#: part/models.py:3395 +#: part/models.py:3273 msgid "User who requested this stocktake report" -msgstr "请求此盘点报告的用户" - -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "零件售出价格折扣" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "零件测试模板" +msgstr "" -#: part/models.py:3543 +#: part/models.py:3435 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "模板名称无效 - 必须包含至少一个字母或者数字" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "选择必须是唯一的" +msgstr "" -#: part/models.py:3575 +#: part/models.py:3446 msgid "Test templates can only be created for trackable parts" -msgstr "只能为可跟踪的零件创建测试模板" +msgstr "" -#: part/models.py:3586 +#: part/models.py:3457 +#, fuzzy +#| msgid "Attachment with this filename already exists" msgid "Test template with the same key already exists for part" -msgstr "零件已存在具有相同主键的测试模板" +msgstr "使用此文件名的附件已存在" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3474 templates/js/translated/part.js:2879 msgid "Test Name" -msgstr "测试名" +msgstr "" -#: part/models.py:3604 +#: part/models.py:3475 msgid "Enter a name for the test" -msgstr "输入测试的名称" +msgstr "" -#: part/models.py:3610 +#: part/models.py:3481 msgid "Test Key" -msgstr "测试主键" +msgstr "" -#: part/models.py:3611 +#: part/models.py:3482 msgid "Simplified key for the test" -msgstr "简化测试主键" +msgstr "" -#: part/models.py:3618 +#: part/models.py:3489 msgid "Test Description" -msgstr "测试说明" +msgstr "" -#: part/models.py:3619 +#: part/models.py:3490 msgid "Enter description for this test" -msgstr "输入测试的描述" - -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "已启用" +msgstr "" -#: part/models.py:3623 +#: part/models.py:3494 msgid "Is this test enabled?" -msgstr "此测试是否已启用?" +msgstr "" -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3499 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 msgid "Required" -msgstr "必须的" +msgstr "" -#: part/models.py:3629 +#: part/models.py:3500 msgid "Is this test required to pass?" -msgstr "需要此测试才能通过吗?" +msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3505 templates/js/translated/part.js:2916 msgid "Requires Value" -msgstr "需要值" +msgstr "" -#: part/models.py:3635 +#: part/models.py:3506 msgid "Does this test require a value when adding a test result?" -msgstr "添加测试结果时是否需要一个值?" +msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3511 templates/js/translated/part.js:2923 msgid "Requires Attachment" -msgstr "需要附件" +msgstr "" -#: part/models.py:3642 +#: part/models.py:3513 msgid "Does this test require a file attachment when adding a test result?" -msgstr "添加测试结果时是否需要文件附件?" - -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "选项" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "此测试的有效选择 (逗号分隔)" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "零件参数模板" +msgstr "" -#: part/models.py:3708 +#: part/models.py:3560 msgid "Checkbox parameters cannot have units" -msgstr "勾选框参数不能有单位" +msgstr "" -#: part/models.py:3713 +#: part/models.py:3565 msgid "Checkbox parameters cannot have choices" -msgstr "复选框参数不能有选项" +msgstr "" + +#: part/models.py:3585 +#, fuzzy +#| msgid "Key string must be unique" +msgid "Choices must be unique" +msgstr "关键字必须是唯一的" -#: part/models.py:3750 +#: part/models.py:3602 msgid "Parameter template name must be unique" -msgstr "参数模板名称必须是唯一的" +msgstr "" -#: part/models.py:3765 +#: part/models.py:3617 msgid "Parameter Name" -msgstr "参数名称" +msgstr "" -#: part/models.py:3772 +#: part/models.py:3624 msgid "Physical units for this parameter" -msgstr "此参数的物理单位" +msgstr "" -#: part/models.py:3780 +#: part/models.py:3632 msgid "Parameter description" -msgstr "参数说明" +msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3638 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 msgid "Checkbox" -msgstr "勾选框" +msgstr "" -#: part/models.py:3787 +#: part/models.py:3639 msgid "Is this parameter a checkbox?" -msgstr "此参数是否为勾选框?" - -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "此参数的有效选择 (逗号分隔)" +msgstr "" -#: part/models.py:3827 -msgid "Part Parameter" -msgstr "零件参数" +#: part/models.py:3644 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" -msgstr "参数不能被修改 - 零件被锁定" +#: part/models.py:3645 +msgid "Valid choices for this parameter (comma-separated)" +msgstr "" -#: part/models.py:3889 +#: part/models.py:3722 +#, fuzzy +#| msgid "Invalid choice for parent build" msgid "Invalid choice for parameter value" -msgstr "无效的参数值选择" +msgstr "上级生产选项无效" -#: part/models.py:3938 +#: part/models.py:3765 msgid "Parent Part" -msgstr "父零件" +msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3773 part/models.py:3874 part/models.py:3875 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:3952 -msgid "Parameter Value" -msgstr "参数值" +#: part/models.py:3778 +msgid "Data" +msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" -msgstr "零件类别参数模板" +#: part/models.py:3779 +msgid "Parameter Value" +msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "默认值" -#: part/models.py:4062 +#: part/models.py:3882 msgid "Default Parameter Value" -msgstr "默认参数值" +msgstr "" -#: part/models.py:4100 +#: part/models.py:3920 msgid "Part ID or part name" -msgstr "零件ID或零件名称" +msgstr "" -#: part/models.py:4101 +#: part/models.py:3921 msgid "Unique part ID value" -msgstr "唯一零件ID值" +msgstr "" -#: part/models.py:4103 +#: part/models.py:3923 msgid "Part IPN value" -msgstr "零件内部零件号" +msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "Level" -msgstr "级" +msgstr "" -#: part/models.py:4104 +#: part/models.py:3924 msgid "BOM level" -msgstr "物料清单级别" - -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "物料清单项目不能被修改 - 装配已锁定" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "物料清单项目不能修改 - 变体装配已锁定" +msgstr "" -#: part/models.py:4232 +#: part/models.py:4014 msgid "Select parent part" -msgstr "选择父零件" +msgstr "" -#: part/models.py:4242 +#: part/models.py:4024 msgid "Sub part" -msgstr "子零件" +msgstr "" -#: part/models.py:4243 +#: part/models.py:4025 msgid "Select part to be used in BOM" -msgstr "选择要用于物料清单的零件" +msgstr "" -#: part/models.py:4254 +#: part/models.py:4036 msgid "BOM quantity for this BOM item" -msgstr "此物料清单项目的数量" +msgstr "" -#: part/models.py:4260 +#: part/models.py:4042 msgid "This BOM item is optional" -msgstr "此物料清单项目是可选的" +msgstr "" -#: part/models.py:4266 +#: part/models.py:4048 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" +msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:4055 part/templates/part/upload_bom.html:55 msgid "Overage" -msgstr "超量" +msgstr "" -#: part/models.py:4274 +#: part/models.py:4056 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "估计生产物浪费量(绝对值或百分比)" +msgstr "" -#: part/models.py:4281 +#: part/models.py:4063 msgid "BOM item reference" -msgstr "物料清单项目引用" +msgstr "" -#: part/models.py:4289 +#: part/models.py:4071 msgid "BOM item notes" -msgstr "物料清单项目注释" +msgstr "" -#: part/models.py:4295 +#: part/models.py:4077 msgid "Checksum" -msgstr "校验和" +msgstr "" -#: part/models.py:4296 +#: part/models.py:4078 msgid "BOM line checksum" -msgstr "物料清单行校验和" +msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4083 templates/js/translated/table_filters.js:174 msgid "Validated" -msgstr "已验证" +msgstr "" -#: part/models.py:4302 +#: part/models.py:4084 +#, fuzzy +#| msgid "Some stock items have been overallocated" msgid "This BOM item has been validated" -msgstr "此物料清单项目已验证" +msgstr "一些库存项已被过度分配" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4089 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" -msgstr "获取继承的" +msgstr "" -#: part/models.py:4308 +#: part/models.py:4090 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "此物料清单项目是由物料清单继承的变体零件" +msgstr "" + +#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" -#: part/models.py:4314 +#: part/models.py:4096 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "变体零件的库存项可以用于此物料清单项目" +msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4181 stock/models.py:647 msgid "Quantity must be integer value for trackable parts" -msgstr "可追踪零件的数量必须是整数" +msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4191 part/models.py:4193 msgid "Sub part must be specified" -msgstr "必须指定子零件" +msgstr "" -#: part/models.py:4551 +#: part/models.py:4333 msgid "BOM Item Substitute" -msgstr "物料清单项目替代品" +msgstr "" -#: part/models.py:4572 +#: part/models.py:4354 msgid "Substitute part cannot be the same as the master part" -msgstr "替代品零件不能与主零件相同" +msgstr "" -#: part/models.py:4585 +#: part/models.py:4367 msgid "Parent BOM item" -msgstr "上级物料清单项目" +msgstr "" -#: part/models.py:4593 +#: part/models.py:4375 msgid "Substitute part" -msgstr "替代品零件" +msgstr "" -#: part/models.py:4609 +#: part/models.py:4391 msgid "Part 1" -msgstr "零件 1" +msgstr "" -#: part/models.py:4617 +#: part/models.py:4399 msgid "Part 2" -msgstr "零件2" +msgstr "" -#: part/models.py:4618 +#: part/models.py:4400 msgid "Select Related Part" -msgstr "选择相关的零件" +msgstr "" -#: part/models.py:4637 +#: part/models.py:4419 msgid "Part relationship cannot be created between a part and itself" -msgstr "零件关系不能在零件和自身之间创建" +msgstr "" -#: part/models.py:4642 +#: part/models.py:4424 msgid "Duplicate relationship already exists" -msgstr "复制关系已经存在" - -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "上级类别" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "上级零件类别" +msgstr "" -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:197 +#: part/serializers.py:185 msgid "Results" -msgstr "结果" +msgstr "" -#: part/serializers.py:198 +#: part/serializers.py:186 msgid "Number of results recorded against this template" -msgstr "根据该模板记录的结果数量" +msgstr "" -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 msgid "Purchase currency of this stock item" -msgstr "购买此库存项的货币" +msgstr "" -#: part/serializers.py:291 +#: part/serializers.py:273 msgid "Number of parts using this template" -msgstr "使用此模板的零件数" +msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:397 +#, fuzzy +#| msgid "Rejected" msgid "No parts selected" -msgstr "没有选定零件" +msgstr "已拒绝" -#: part/serializers.py:431 +#: part/serializers.py:407 +#, fuzzy +#| msgid "Set category" msgid "Select category" -msgstr "选择类别" +msgstr "设置类别" -#: part/serializers.py:466 +#: part/serializers.py:437 msgid "Original Part" -msgstr "原始零件" +msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:438 msgid "Select original part to duplicate" -msgstr "选择要复制的原始零件" +msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:443 msgid "Copy Image" -msgstr "复制图片" +msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:444 msgid "Copy image from original part" -msgstr "从原零件复制图片" +msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:450 part/templates/part/detail.html:277 msgid "Copy BOM" -msgstr "复制物料清单" +msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:451 msgid "Copy bill of materials from original part" -msgstr "从原始零件复制材料清单" +msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:457 msgid "Copy Parameters" -msgstr "复制参数" +msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:458 msgid "Copy parameter data from original part" -msgstr "从原始零件复制参数数据" +msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:464 +#, fuzzy +#| msgid "Company Notes" msgid "Copy Notes" -msgstr "复制备注" +msgstr "公司备注" -#: part/serializers.py:494 +#: part/serializers.py:465 msgid "Copy notes from original part" -msgstr "从原始零件复制备注" +msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:478 msgid "Initial Stock Quantity" -msgstr "初始化库存数量" +msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:480 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" +msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:487 msgid "Initial Stock Location" -msgstr "初始化库存地点" +msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:488 msgid "Specify initial stock location for this Part" -msgstr "初始化指定此零件的库存地点" +msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:500 msgid "Select supplier (or leave blank to skip)" -msgstr "选择供应商(或为空以跳过)" +msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:516 msgid "Select manufacturer (or leave blank to skip)" -msgstr "选择制造商(或为空)" +msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:526 msgid "Manufacturer part number" -msgstr "制造商零件号" +msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:533 msgid "Selected company is not a valid supplier" -msgstr "所选公司不是一个有效的供应商" +msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:542 msgid "Selected company is not a valid manufacturer" -msgstr "所选公司不是一个有效的制造商" +msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:553 msgid "Manufacturer part matching this MPN already exists" -msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" +msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:560 msgid "Supplier part matching this SKU already exists" -msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" +msgstr "" -#: part/serializers.py:903 -msgid "Revisions" -msgstr "修订" +#: part/serializers.py:823 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "外部链接" -#: part/serializers.py:908 +#: part/serializers.py:825 +#, fuzzy +#| msgid "Unallocate Stock" msgid "Unallocated Stock" -msgstr "未分配的库存" +msgstr "未分配库存" -#: part/serializers.py:911 +#: part/serializers.py:828 +#, fuzzy +#| msgid "Part Stock" msgid "Variant Stock" -msgstr "变体库存" +msgstr "商品库存" -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" -msgstr "重复零件" +msgstr "复制部件" -#: part/serializers.py:942 +#: part/serializers.py:857 msgid "Copy initial data from another Part" -msgstr "从另一个零件复制初始数据" +msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:863 templates/js/translated/part.js:102 msgid "Initial Stock" -msgstr "初始库存" +msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:864 msgid "Create Part with initial stock quantity" -msgstr "创建具有初始库存数量的零件" +msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:870 msgid "Supplier Information" -msgstr "供应商信息" +msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:871 msgid "Add initial supplier information for this part" -msgstr "添加此零件的初始供应商信息" +msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:879 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:965 +#: part/serializers.py:880 msgid "Copy parameter templates from selected part category" -msgstr "从选择的零件复制参数模版" +msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:885 +#, fuzzy +#| msgid "Existing barcode found" msgid "Existing Image" -msgstr "现有的图片" +msgstr "发现现有条码" -#: part/serializers.py:971 +#: part/serializers.py:886 msgid "Filename of an existing part image" -msgstr "现有零件图片的文件名" +msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:903 +#, fuzzy +#| msgid "Part image not found" msgid "Image file does not exist" -msgstr "图片不存在" +msgstr "未找到商品图像" -#: part/serializers.py:1194 +#: part/serializers.py:1109 msgid "Limit stocktake report to a particular part, and any variant parts" -msgstr "限制盘点报告到某个特定零件以及任何变体零件" +msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1119 msgid "Limit stocktake report to a particular part category, and any child categories" -msgstr "限制盘点报告到某个特定零件类别以及任何子类别" +msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1129 msgid "Limit stocktake report to a particular stock location, and any child locations" -msgstr "限制盘点报告到某个特定零件库存地点以及任何子位置" +msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1135 msgid "Exclude External Stock" -msgstr "排除外部库存" +msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1136 +#, fuzzy +#| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations" -msgstr "排除外部位置的库存项" +msgstr "从该选定的仓储地点排除库存项" -#: part/serializers.py:1226 +#: part/serializers.py:1141 msgid "Generate Report" -msgstr "生成报告" +msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1142 msgid "Generate report file containing calculated stocktake data" -msgstr "生成包含计算出来的盘点数据的报告文件" +msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1147 msgid "Update Parts" -msgstr "更新零件" +msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1148 msgid "Update specified parts with calculated stocktake data" -msgstr "使用计算出的盘点数据更新指定零件" +msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1156 msgid "Stocktake functionality is not enabled" -msgstr "盘点功能未启用" +msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1262 msgid "Override calculated value for minimum price" -msgstr "覆盖已计算的最低价格值" +msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1269 +#, fuzzy +#| msgid "Uses default currency" msgid "Minimum price currency" -msgstr "最低价格货币" +msgstr "使用默认货币" -#: part/serializers.py:1362 +#: part/serializers.py:1277 msgid "Override calculated value for maximum price" -msgstr "覆盖已计算的最高价格值" +msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1284 +#, fuzzy +#| msgid "Uses default currency" msgid "Maximum price currency" -msgstr "最高价格货币" +msgstr "使用默认货币" -#: part/serializers.py:1398 +#: part/serializers.py:1313 msgid "Update" -msgstr "更新" +msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1314 msgid "Update pricing for this part" -msgstr "更新这个零件的价格" +msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1337 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" -msgstr "无法将所提供的货币转换为 {default_currency}" +msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1344 msgid "Minimum price must not be greater than maximum price" -msgstr "最低价格不能高于最高价格。" +msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1347 msgid "Maximum price must not be less than minimum price" -msgstr "最高价格不能低于最低价格" - -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "选择父装配" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "元件名称" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "元件内部零件号" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "元件描述" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "选择零部件" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "可以创建" +msgstr "" -#: part/serializers.py:1837 +#: part/serializers.py:1714 msgid "Select part to copy BOM from" -msgstr "选择要复制物料清单的零件" +msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1722 msgid "Remove Existing Data" -msgstr "移除现有数据" +msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1723 msgid "Remove existing BOM items before copying" -msgstr "复制前删除现有的物料清单项目" +msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1728 msgid "Include Inherited" -msgstr "包含继承的" +msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1729 msgid "Include BOM items which are inherited from templated parts" -msgstr "包含从模板零件继承的物料清单项目" +msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1734 msgid "Skip Invalid Rows" -msgstr "跳过无效行" +msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1735 msgid "Enable this option to skip invalid rows" -msgstr "启用此选项以跳过无效行" +msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1740 msgid "Copy Substitute Parts" -msgstr "复制替代品零件" +msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1741 msgid "Copy substitute parts when duplicate BOM items" -msgstr "复制物料清单项目时复制替代品零件" +msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1775 msgid "Clear Existing BOM" -msgstr "清除现有的物料清单" +msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1776 msgid "Delete existing BOM items before uploading" -msgstr "上传前删除现有的物料清单项目" +msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1806 msgid "No part column specified" -msgstr "未指定零件列" +msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1850 msgid "Multiple matching parts found" -msgstr "找到多个匹配的零件。" +msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1853 msgid "No matching part found" -msgstr "没有找到匹配的零件" +msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1856 msgid "Part is not designated as a component" -msgstr "零件未指定为元件" +msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1865 msgid "Quantity not provided" -msgstr "未提供数量" +msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1873 msgid "Invalid quantity" -msgstr "无效的数量" +msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1894 msgid "At least one BOM item is required" -msgstr "至少需要一个物料清单项目" +msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 msgid "Total Quantity" -msgstr "总数量" +msgstr "" #: part/stocktake.py:225 msgid "Total Cost Min" -msgstr "总费用最小值" +msgstr "" #: part/stocktake.py:226 msgid "Total Cost Max" -msgstr "总费用最大值" +msgstr "" #: part/stocktake.py:284 msgid "Stocktake Report Available" -msgstr "库存盘点报告可用" +msgstr "" #: part/stocktake.py:285 msgid "A new stocktake report is available for download" -msgstr "有新的库存盘点报告可供下载" +msgstr "" #: part/tasks.py:37 msgid "Low stock notification" -msgstr "低库存通知" +msgstr "" #: part/tasks.py:39 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "可用的 {part.name}库存已经跌到设置的最低值" +msgstr "" #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." -msgstr "没有权限编辑物料清单" +msgstr "" #: part/templates/part/bom.html:15 +#, fuzzy +#| msgid "Some stock items have been overallocated" msgid "The BOM this part has been changed, and must be validated" -msgstr "此物料清单中的零件已被更改,必须验证" +msgstr "一些库存项已被过度分配" #: part/templates/part/bom.html:17 #, python-format msgid "This BOM was last checked by %(checker)s on %(check_date)s" -msgstr "物料清单最近被%(checker)s于%(check_date)s 修改" +msgstr "" #: part/templates/part/bom.html:21 +#, fuzzy +#| msgid "Some stock items have been overallocated" msgid "This BOM has not been validated." -msgstr "物料清单己失效" +msgstr "一些库存项已被过度分配" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" -msgstr "对此类零件做库存盘点" +msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" -msgstr "您已订阅此类别的通知" +msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" -msgstr "订阅此类别的通知" +msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" -msgstr "类别操作" +msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" -msgstr "编辑类别" +msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" -msgstr "编辑类别" +msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" -msgstr "删除类别" +msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" -msgstr "删除类别" +msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" -msgstr "最高级零件类别" +msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" -msgstr "零件 (包括子类别)" +msgstr "商品 (包括子类别)" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" -msgstr "新建零件" +msgstr "新建商品" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" -msgstr "新零件" +msgstr "新商品" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" -msgstr "零件参数" +msgstr "商品参数" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" -msgstr "新建零件类别" +msgstr "新建商品类别" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" -msgstr "新建类别" +msgstr "" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "导入零件" +msgstr "" #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "制作一个 '%(full_name)s'零件的副本." +msgstr "" #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 msgid "Possible Matching Parts" -msgstr "可能的匹配零件" +msgstr "" #: part/templates/part/copy_part.html:15 #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" -msgstr "新零件可能与这些现有零件重复。" +msgstr "" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "%(full_name)s - %(desc)s (%(match_per)s%% 匹配)" +msgstr "" #: part/templates/part/detail.html:20 msgid "Part Stock" -msgstr "零件库存" +msgstr "商品库存" #: part/templates/part/detail.html:44 msgid "Refresh scheduling data" -msgstr "刷新排产数据" +msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 #: templates/js/translated/tables.js:552 msgid "Refresh" -msgstr "刷新" +msgstr "" #: part/templates/part/detail.html:66 msgid "Add stocktake information" -msgstr "添加盘点信息" +msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2215 users/models.py:204 msgid "Stocktake" -msgstr "库存盘点" +msgstr "" #: part/templates/part/detail.html:83 msgid "Part Test Templates" -msgstr "零件测试模板" +msgstr "" #: part/templates/part/detail.html:88 msgid "Add Test Template" -msgstr "添加测试模板" - -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "零件测试统计" +msgstr "" -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" -msgstr "分配销售订单" +msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" -msgstr "零件备注" +msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" -msgstr "零件变体" +msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" -msgstr "创建零件变体" +msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" -msgstr "新建零件变体" +msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" -msgstr "添加参数" +msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "关联零件" +msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" -msgstr "添加关联" +msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "物料清单" +msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" -msgstr "输出操作" +msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" -msgstr "输出物料清单" +msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" -msgstr "打印物料清单" +msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" -msgstr "物料清单操作" +msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" -msgstr "上传物料清单" +msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" -msgstr "验证物料清单" +msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 #: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" -msgstr "添加物料清单项" +msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" -msgstr "装配" +msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" -msgstr "零件组装" +msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" -msgstr "分配生产订单" +msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" -msgstr "零件供应商" +msgstr "商品供应商" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" -msgstr "零件制造商" +msgstr "商品制造商" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" -msgstr "关联零件" +msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" -msgstr "添加关联零件" +msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" -msgstr "添加测试结果模板" +msgstr "" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 msgid "Insufficient privileges." -msgstr "权限不足" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:8 msgid "Return to Parts" -msgstr "返回零件" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:13 msgid "Import Parts from File" -msgstr "从文件导入零件" +msgstr "从文件导入商品" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" -msgstr "零件导入要求" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:33 msgid "The part import file must contain the required named columns as provided in the " -msgstr "零件导入文件必须包含中提供的所需命名列 " +msgstr "" #: part/templates/part/import_wizard/part_upload.html:33 msgid "Part Import Template" -msgstr "零件导入模板" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:89 msgid "Download Part Import Template" -msgstr "下载零件导入模板" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" -msgstr "格式" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" -msgstr "选择文件格式" +msgstr "" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "零件列表" +msgstr "商品列表" #: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 msgid "You are subscribed to notifications for this part" -msgstr "您已订阅此零件的通知" +msgstr "" #: part/templates/part/part_base.html:33 msgid "Subscribe to notifications for this part" -msgstr "订阅此零件的通知" +msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "打印标签" #: part/templates/part/part_base.html:58 msgid "Show pricing information" -msgstr "显示定价信息" +msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" -msgstr "库存操作" +msgstr "" #: part/templates/part/part_base.html:70 msgid "Count part stock" -msgstr "清点零件库存" +msgstr "清点商品库存" #: part/templates/part/part_base.html:76 msgid "Transfer part stock" -msgstr "转移零件库存" +msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" -msgstr "零件操作" +msgstr "" #: part/templates/part/part_base.html:94 msgid "Duplicate part" -msgstr "重复的零件" +msgstr "重复的商品" #: part/templates/part/part_base.html:97 msgid "Edit part" -msgstr "编辑零件" +msgstr "编辑商品" #: part/templates/part/part_base.html:100 msgid "Delete part" -msgstr "删除零件" +msgstr "删除商品" #: part/templates/part/part_base.html:119 msgid "Part is a template part (variants can be made from this part)" -msgstr "这个零件是一个模板零件 (变体可以从中生成)" +msgstr "" #: part/templates/part/part_base.html:123 msgid "Part can be assembled from other parts" -msgstr "零件可以由其他零件装配" +msgstr "商品可以由其他部件组装" #: part/templates/part/part_base.html:127 msgid "Part can be used in assemblies" -msgstr "零件可以用于装配" +msgstr "商品可以用于组装成品" #: part/templates/part/part_base.html:131 msgid "Part stock is tracked by serial number" -msgstr "零件库存是通过序列号追踪的" +msgstr "" #: part/templates/part/part_base.html:135 msgid "Part can be purchased from external suppliers" -msgstr "零件可以从外部供应商处购买" +msgstr "商品可以从外部供应商处购买" #: part/templates/part/part_base.html:139 msgid "Part can be sold to customers" -msgstr "零件可以销售给客户" +msgstr "商品可以销售给客户" #: part/templates/part/part_base.html:145 +#, fuzzy +#| msgid "Print actions" msgid "Part is not active" -msgstr "零件未激活" +msgstr "打印操作" #: part/templates/part/part_base.html:153 msgid "Part is virtual (not a physical part)" -msgstr "零件是虚拟的(不是实体零件)" +msgstr "商品是虚拟的(不是实体零件)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" -msgstr "显示零件详情" +msgstr "" #: part/templates/part/part_base.html:218 #: stock/templates/stock/item_base.html:388 msgid "Allocated to Build Orders" -msgstr "分配到生产订单" +msgstr "" #: part/templates/part/part_base.html:227 #: stock/templates/stock/item_base.html:381 msgid "Allocated to Sales Orders" -msgstr "分配到销售订单" +msgstr "" + +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" -msgstr "最低库存水平" +msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" -msgstr "价格范围" +msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" -msgstr "最新序列号" +msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" -msgstr "搜索序列号" +msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" -msgstr "零件二维码" +msgstr "商品二维码" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" -msgstr "关联条形码到零件" +msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" -msgstr "计算" +msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" -msgstr "删除与零件关联的图片" +msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" -msgstr "没有找到匹配的图片" +msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" -msgstr "隐藏零件详细信息" +msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 #: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 msgid "Supplier Pricing" -msgstr "供应商价格" +msgstr "" #: part/templates/part/part_pricing.html:26 #: part/templates/part/part_pricing.html:52 #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "单位成本" +msgstr "" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" -msgstr "没有可用的供应商价格" +msgstr "" #: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 #: part/templates/part/prices.html:250 msgid "BOM Pricing" -msgstr "物料清单价格" +msgstr "" #: part/templates/part/part_pricing.html:66 msgid "Unit Purchase Price" -msgstr "单位采购价" +msgstr "" #: part/templates/part/part_pricing.html:72 msgid "Total Purchase Price" -msgstr "采购总价" +msgstr "" #: part/templates/part/part_pricing.html:83 msgid "No BOM pricing available" -msgstr "没有可用的物料清单价格" +msgstr "" #: part/templates/part/part_pricing.html:92 msgid "Internal Price" -msgstr "内部价格" +msgstr "" #: part/templates/part/part_pricing.html:123 msgid "No pricing information is available for this part." -msgstr "此零件无价格信息可用。" +msgstr "此商品无价格信息可用。" #: part/templates/part/part_scheduling.html:14 msgid "Scheduled Quantity" -msgstr "排产数量" +msgstr "" #: part/templates/part/part_sidebar.html:11 msgid "Variants" -msgstr "变体" +msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 msgid "Stock" -msgstr "庫存" +msgstr "库存" #: part/templates/part/part_sidebar.html:30 #: templates/InvenTree/settings/sidebar.html:39 @@ -8299,196 +8005,202 @@ msgstr "定价" #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" -msgstr "排产" +msgstr "" #: part/templates/part/part_sidebar.html:54 msgid "Test Templates" -msgstr "测试模板" +msgstr "" #: part/templates/part/part_thumb.html:11 msgid "Select from existing images" -msgstr "从现存图片选择" +msgstr "" #: part/templates/part/prices.html:11 msgid "Pricing Overview" -msgstr "价格概览" +msgstr "" #: part/templates/part/prices.html:14 msgid "Refresh Part Pricing" -msgstr "更新零件价格" +msgstr "" #: part/templates/part/prices.html:17 +#, fuzzy +#| msgid "Part Pricing" msgid "Override Part Pricing" -msgstr "覆盖零件价格" +msgstr "商品价格" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "编辑" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:247 #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2245 msgid "Last Updated" -msgstr "最近更新" +msgstr "" #: part/templates/part/prices.html:37 part/templates/part/prices.html:127 msgid "Price Category" -msgstr "价格类别" +msgstr "" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "最小值" +msgstr "" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "最大值" +msgstr "" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" -msgstr "内部价格" +msgstr "" #: part/templates/part/prices.html:64 part/templates/part/prices.html:206 msgid "Purchase History" -msgstr "购买历史" +msgstr "" #: part/templates/part/prices.html:98 part/templates/part/prices.html:274 msgid "Variant Pricing" -msgstr "变体价格" +msgstr "" #: part/templates/part/prices.html:106 +#, fuzzy +#| msgid "Print actions" msgid "Pricing Overrides" -msgstr "定价覆盖" +msgstr "打印操作" #: part/templates/part/prices.html:113 msgid "Overall Pricing" -msgstr "总价" +msgstr "" #: part/templates/part/prices.html:149 part/templates/part/prices.html:326 msgid "Sale History" -msgstr "销售历史" +msgstr "" #: part/templates/part/prices.html:157 msgid "Sale price data is not available for this part" -msgstr "该零件的售出价格数据不可用" +msgstr "" #: part/templates/part/prices.html:164 msgid "Price range data is not available for this part." -msgstr "此零件价格范围数据不可用" +msgstr "" #: part/templates/part/prices.html:175 part/templates/part/prices.html:207 #: part/templates/part/prices.html:228 part/templates/part/prices.html:251 #: part/templates/part/prices.html:275 part/templates/part/prices.html:298 #: part/templates/part/prices.html:327 msgid "Jump to overview" -msgstr "跳转到总览图" +msgstr "" #: part/templates/part/prices.html:180 msgid "Add Internal Price Break" -msgstr "添加内部批发价" +msgstr "" #: part/templates/part/prices.html:297 msgid "Sale Pricing" -msgstr "售出价格" +msgstr "" #: part/templates/part/prices.html:303 msgid "Add Sell Price Break" -msgstr "添加售出批发价" +msgstr "" #: part/templates/part/pricing_javascript.html:24 +#, fuzzy +#| msgid "Part Pricing" msgid "Update Pricing" -msgstr "更新价格" +msgstr "商品价格" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 msgid "No Stock" -msgstr "无库存" +msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 msgid "Low Stock" -msgstr "低庫存" +msgstr "" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "返回物料清单" +msgstr "" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "上传材料单" +msgstr "" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "物料清单上传要求" +msgstr "" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "上传 物料清单 文件" +msgstr "" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "提交 物料清单 数据" +msgstr "" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "物料清单 上传要求" +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "物料清单表文件必须包含中提供的所需命名列 " +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "物料清单 上传模板" +msgstr "" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "每个零件必须已经存在于数据库中" +msgstr "每个商品必须已经存在于数据库" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "创建新的零件变体" +msgstr "" #: part/templates/part/variant_part.html:10 msgid "Create a new variant part from this template" -msgstr "从此模板创建一个新的变体零件" +msgstr "" #: part/views.py:111 msgid "Match References" -msgstr "匹配参考" +msgstr "" #: part/views.py:275 #, python-brace-format msgid "Can't import part {new_part.name} because there is no category assigned" -msgstr "无法导入零件 {new_part.name} ,因为没有指定类别" +msgstr "" #: part/views.py:425 msgid "Select Part Image" -msgstr "选择零件图片" +msgstr "选择商品图像" #: part/views.py:448 msgid "Updated part image" -msgstr "更新零件图片" +msgstr "更新商品图像" #: part/views.py:451 msgid "Part image not found" -msgstr "未找到零件图片" +msgstr "未找到商品图像" #: part/views.py:545 msgid "Part Pricing" -msgstr "零件价格" +msgstr "商品价格" -#: plugin/api.py:172 +#: plugin/api.py:168 msgid "Plugin cannot be deleted as it is currently active" -msgstr "插件不能被删除,因为它当前处于激活状态" +msgstr "" #: plugin/base/action/api.py:32 msgid "No action specified" @@ -8498,1940 +8210,1785 @@ msgstr "未指定操作" msgid "No matching action found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "不支持模型" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "找不到模型实例" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 msgid "Barcode matches existing item" -msgstr "条形码匹配现有项目" +msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 +#, fuzzy +#| msgid "No matching action found" msgid "No matching part data found" -msgstr "没有找到匹配的零件数据" +msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 +#, fuzzy +#| msgid "No supplier parts found" msgid "No matching supplier parts found" -msgstr "没有找到匹配的供应商零件" +msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 +#, fuzzy +#| msgid "No supplier parts found" msgid "Multiple matching supplier parts found" -msgstr "找到多个匹配的供应商零件" +msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 +#, fuzzy +#| msgid "Delete supplier part" msgid "Matched supplier part" -msgstr "匹配的供应商零件" +msgstr "删除供应商商品" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 +#, fuzzy +#| msgid "This build output has already been completed" msgid "Item has already been received" -msgstr "项目已被接收" +msgstr "此生产产出已经完成" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 +#, fuzzy +#| msgid "No match found for barcode data" msgid "No match for supplier barcode" -msgstr "供应商条形码没有匹配" +msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 +#, fuzzy +#| msgid "No supplier parts found" msgid "Multiple matching line items found" -msgstr "找到多个匹配的行项目" +msgstr "未找到供应商商品" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 +#, fuzzy +#| msgid "No matching action found" msgid "No matching line item found" -msgstr "未找到匹配的行项目" +msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" -msgstr "条形码与现有的库存项不匹配" +msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 +#, fuzzy +#| msgid "Selected stock item not found in BOM" msgid "Stock item does not match line item" -msgstr "库存项与行项目不匹配" +msgstr "在BOM中找不到选定的库存项" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" -msgstr "可用库存不足" +msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 +#, fuzzy +#| msgid "Stock quantity to allocate to build" msgid "Stock item allocated to sales order" -msgstr "库存项已分配到销售订单" +msgstr "分配到生产的数量" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 +#, fuzzy +#| msgid "No user information" msgid "Not enough information" -msgstr "没有足够的信息" +msgstr "没有用户信息" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" -msgstr "发现多个与条形码匹配的供应商零件" +msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" -msgstr "找到多个匹配的采购订单 '{order}'" +msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" -msgstr "没有找到匹配的采购订单 '{order}'" +msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:206 msgid "Purchase order does not match supplier" -msgstr "采购订单不匹配供应商" +msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:440 msgid "Failed to find pending line item for supplier part" -msgstr "未找到供应商零件待处理行项目" +msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:471 msgid "Further information required to receive line item" -msgstr "需要更多信息以接收行项目" +msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:479 +#, fuzzy +#| msgid "Received against purchase order" msgid "Received purchase order line item" -msgstr "已收到采购订单行项目" +msgstr "收到定购单" #: plugin/base/barcodes/serializers.py:21 +#, fuzzy +#| msgid "Scan Barcode" msgid "Scanned barcode data" -msgstr "已扫描的条形码数据" - -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "要生成条形码的模型名称" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "要生成条形码的模型对象的主键" +msgstr "扫描条形码" -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Purchase Order to allocate items against" -msgstr "根据采购订单以分配项目" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Purchase order is not pending" -msgstr "采购订单未处理" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "PurchaseOrder to receive items against" -msgstr "根据采购订单以接收项目" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 +#, fuzzy +#| msgid "Email backend not configured" msgid "Purchase order has not been placed" -msgstr "采购订单尚未提交" +msgstr "未配置电子邮件后端" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 +#, fuzzy +#| msgid "Location not specified" msgid "Location to receive items into" -msgstr "项目接收地点" +msgstr "未指定仓储地点" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 +#, fuzzy +#| msgid "Create new stock location" msgid "Cannot select a structural location" -msgstr "无法选择一个结构性位置" +msgstr "新建仓储地点" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Sales Order to allocate items against" -msgstr "根据销售订单以分配项目" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Sales order is not pending" -msgstr "销售订单未挂起" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Sales order line item to allocate items against" -msgstr "根据销售订单行项目分配项目" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 +#, fuzzy +#| msgid "Purchase Order Settings" msgid "Sales order shipment to allocate items against" -msgstr "根据销售订单配送分配项目" +msgstr "采购订单设置" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 +#, fuzzy +#| msgid "This build output has already been completed" msgid "Shipment has already been delivered" -msgstr "已交付" +msgstr "此生产产出已经完成" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 +#, fuzzy +#| msgid "Stock quantity to allocate to build" msgid "Quantity to allocate" -msgstr "待分配数" +msgstr "分配到生产的数量" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" -msgstr "标签打印失败" +msgstr "" -#: plugin/base/label/mixins.py:54 +#: plugin/base/label/mixins.py:63 +#, fuzzy +#| msgid "Error renaming file" msgid "Error rendering label to PDF" -msgstr "渲染标签到 PDF 时出错" +msgstr "重命名文件出错" -#: plugin/base/label/mixins.py:68 +#: plugin/base/label/mixins.py:76 +#, fuzzy +#| msgid "Error renaming file" msgid "Error rendering label to HTML" -msgstr "渲染标签到 HTML 时出错" +msgstr "重命名文件出错" -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "没有要打印的项目" +#: plugin/base/label/mixins.py:111 +#, fuzzy +#| msgid "Error renaming file" +msgid "Error rendering label to PNG" +msgstr "重命名文件出错" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" -msgstr "InvenTree 条形码" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" -msgstr "提供条形码本地支持" +msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 msgid "InvenTree contributors" -msgstr "InvenTree 贡献者" - -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "条形码内部格式" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "选择内部条形码格式" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "JSON 条形码 (人类可读)" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "短条形码 (空间优化)" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "短条形码前缀" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "自定义用于短条形码的前缀,可能对有多个InvenTree实例的环境有用。" +msgstr "" #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" -msgstr "Inventree 通知" +msgstr "" #: plugin/builtin/integration/core_notifications.py:36 msgid "Integrated outgoing notification methods" -msgstr "集成的输出通知方法" +msgstr "" #: plugin/builtin/integration/core_notifications.py:41 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "启用电子邮件通知" +msgstr "" #: plugin/builtin/integration/core_notifications.py:42 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "允许发送事件通知邮件" +msgstr "" #: plugin/builtin/integration/core_notifications.py:47 msgid "Enable slack notifications" -msgstr "启用slack通知" +msgstr "" #: plugin/builtin/integration/core_notifications.py:49 msgid "Allow sending of slack channel messages for event notifications" -msgstr "允许发送事件通知的 slack 频道消息" +msgstr "" #: plugin/builtin/integration/core_notifications.py:55 msgid "Slack incoming webhook url" -msgstr "Slack传入Webhook url" +msgstr "" #: plugin/builtin/integration/core_notifications.py:56 msgid "URL that is used to send messages to a slack channel" -msgstr "用于发送消息到slack频道的 URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:164 msgid "Open link" -msgstr "打开链接" +msgstr "" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" -msgstr "InvenTree 货币兑换" +msgstr "" #: plugin/builtin/integration/currency_exchange.py:23 +#, fuzzy +#| msgid "Default currency used for this company" msgid "Default currency exchange integration" -msgstr "默认货币兑换集成" +msgstr "该公司使用的默认货币" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" -msgstr "InvenTree PDF 标签打印机" +msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides native support for printing PDF labels" -msgstr "为打印 PDF 标签提供本机支持" +msgstr "打印标签前必须选择商品" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 +#, fuzzy +#| msgid "Debug Mode" msgid "Debug mode" -msgstr "Debug模式" +msgstr "调试模式" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "启用Debug模式 - 返回原始的 HTML 而不是 PDF" +msgstr "" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "InvenTree 设备标签打印机" +msgstr "" #: plugin/builtin/labels/inventree_machine.py:62 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides support for printing using a machine" -msgstr "提供使用设备打印的支持" +msgstr "打印标签前必须选择商品" -#: plugin/builtin/labels/inventree_machine.py:149 +#: plugin/builtin/labels/inventree_machine.py:150 msgid "last used" -msgstr "最近使用" +msgstr "" -#: plugin/builtin/labels/inventree_machine.py:166 +#: plugin/builtin/labels/inventree_machine.py:167 msgid "Options" msgstr "选项" #: plugin/builtin/labels/label_sheet.py:29 +#, fuzzy +#| msgid "Default page size for PDF reports" msgid "Page size for the label sheet" -msgstr "标签页大小" +msgstr "PDF 报表默认页面大小" #: plugin/builtin/labels/label_sheet.py:34 +#, fuzzy +#| msgid "Label" msgid "Skip Labels" -msgstr "跳过标签" +msgstr "标签" #: plugin/builtin/labels/label_sheet.py:35 msgid "Skip this number of labels when printing label sheets" -msgstr "打印标签页时跳过标签的数量" +msgstr "" #: plugin/builtin/labels/label_sheet.py:41 msgid "Border" -msgstr "边框" +msgstr "" #: plugin/builtin/labels/label_sheet.py:42 msgid "Print a border around each label" -msgstr "打印每个标签的边框" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 msgid "Landscape" -msgstr "横屏模式" +msgstr "" #: plugin/builtin/labels/label_sheet.py:48 msgid "Print the label sheet in landscape mode" -msgstr "在横屏模式下打印标签表" +msgstr "" #: plugin/builtin/labels/label_sheet.py:60 msgid "InvenTree Label Sheet Printer" -msgstr "库存树标签工作表" +msgstr "" #: plugin/builtin/labels/label_sheet.py:61 msgid "Arrays multiple labels onto a single sheet" -msgstr "单张纸上的组合多个标签" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" -msgstr "标签大过页面" +msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" -msgstr "没有生成标签" +msgstr "" #: plugin/builtin/suppliers/digikey.py:16 msgid "Supplier Integration - DigiKey" -msgstr "供应商集成 - DigiKey" +msgstr "" #: plugin/builtin/suppliers/digikey.py:17 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides support for scanning DigiKey barcodes" -msgstr "为扫描 DigiKey 条形码提供支持" +msgstr "打印标签前必须选择商品" #: plugin/builtin/suppliers/digikey.py:26 msgid "The Supplier which acts as 'DigiKey'" -msgstr "作为“DigiKey”的供应商。" +msgstr "" #: plugin/builtin/suppliers/lcsc.py:18 +#, fuzzy +#| msgid "Supplier part description" msgid "Supplier Integration - LCSC" -msgstr "供应商集成 - LCSC" +msgstr "供应商商品描述" #: plugin/builtin/suppliers/lcsc.py:19 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides support for scanning LCSC barcodes" -msgstr "为扫描 LCSC 条形码提供支持" +msgstr "打印标签前必须选择商品" #: plugin/builtin/suppliers/lcsc.py:27 msgid "The Supplier which acts as 'LCSC'" -msgstr "作为“LCSC”的供应商。" +msgstr "" #: plugin/builtin/suppliers/mouser.py:16 msgid "Supplier Integration - Mouser" -msgstr "供应商集成 - Mouser" +msgstr "" #: plugin/builtin/suppliers/mouser.py:17 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides support for scanning Mouser barcodes" -msgstr "为扫描 Mouser条形码提供支持" +msgstr "打印标签前必须选择商品" #: plugin/builtin/suppliers/mouser.py:25 msgid "The Supplier which acts as 'Mouser'" -msgstr "作为“Mouser”的供应商。" +msgstr "" #: plugin/builtin/suppliers/tme.py:18 +#, fuzzy +#| msgid "Supplier part description" msgid "Supplier Integration - TME" -msgstr "供应商集成 - TME" +msgstr "供应商商品描述" #: plugin/builtin/suppliers/tme.py:19 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" msgid "Provides support for scanning TME barcodes" -msgstr "为扫描 TME 条形码提供支持" +msgstr "打印标签前必须选择商品" #: plugin/builtin/suppliers/tme.py:27 msgid "The Supplier which acts as 'TME'" -msgstr "作为‘TME’的供应商" +msgstr "" #: plugin/installer.py:194 plugin/installer.py:282 msgid "Only staff users can administer plugins" -msgstr "只有员工用户可以管理插件" +msgstr "" #: plugin/installer.py:197 msgid "Plugin installation is disabled" -msgstr "插件安装已禁用" +msgstr "" #: plugin/installer.py:248 +#, fuzzy +#| msgid "Installed into assembly" msgid "Installed plugin successfully" -msgstr "插件安装成功" +msgstr "安装到组装中" #: plugin/installer.py:254 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "Installed into assembly" msgid "Installed plugin into {path}" -msgstr "插件安装到 {path}" +msgstr "安装到组装中" #: plugin/installer.py:273 msgid "Plugin was not found in registry" -msgstr "在插件仓库中找不到插件" +msgstr "" #: plugin/installer.py:276 msgid "Plugin is not a packaged plugin" -msgstr "插件不是一个打包的插件" +msgstr "" #: plugin/installer.py:279 +#, fuzzy +#| msgid "Part image not found" msgid "Plugin package name not found" -msgstr "找不到插件包名称" +msgstr "未找到商品图像" #: plugin/installer.py:299 msgid "Plugin uninstalling is disabled" -msgstr "插件卸载已禁用" +msgstr "" #: plugin/installer.py:303 +#, fuzzy +#| msgid "Print actions" msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "插件无法卸载,因为它目前处于激活状态" +msgstr "打印操作" #: plugin/installer.py:316 +#, fuzzy +#| msgid "Installed into assembly" msgid "Uninstalled plugin successfully" -msgstr "插件卸载成功" +msgstr "安装到组装中" -#: plugin/models.py:36 +#: plugin/models.py:30 msgid "Plugin Configuration" -msgstr "插件配置" +msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:31 msgid "Plugin Configurations" -msgstr "插件配置" +msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:34 users/models.py:100 msgid "Key" -msgstr "键" +msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:34 msgid "Key of plugin" -msgstr "插件的键" +msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:42 msgid "PluginName of the plugin" -msgstr "插件名称" +msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 +#: plugin/models.py:49 plugin/serializers.py:90 msgid "Package Name" -msgstr "软件包名" +msgstr "" -#: plugin/models.py:61 +#: plugin/models.py:51 msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "已安装的软件包名字,如果插件是通过 PIP 安装的" +msgstr "" -#: plugin/models.py:66 +#: plugin/models.py:56 msgid "Is the plugin active" -msgstr "插件是否激活" +msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 msgid "Installed" -msgstr "已安装" +msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:156 msgid "Sample plugin" -msgstr "示例插件" +msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:164 msgid "Builtin Plugin" -msgstr "内置插件" +msgstr "" -#: plugin/models.py:182 +#: plugin/models.py:172 +#, fuzzy +#| msgid "Packaging" msgid "Package Plugin" -msgstr "软件包插件" +msgstr "打包" -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "插件" +msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:243 msgid "Method" -msgstr "方法" +msgstr "" #: plugin/plugin.py:270 msgid "No author found" -msgstr "未找到作者" +msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:588 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "插件 '{p}' 与当前 InvenTree 版本{v} 不兼容" +msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:591 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "插件所需最低版本 {v}" +msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:593 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "插件所需最高版本 {v}" +msgstr "" #: plugin/samples/integration/sample.py:52 msgid "Enable PO" -msgstr "启用 采购功能" +msgstr "" #: plugin/samples/integration/sample.py:53 msgid "Enable PO functionality in InvenTree interface" -msgstr "在 InvenTree 界面中启用采购功能" +msgstr "" #: plugin/samples/integration/sample.py:58 msgid "API Key" -msgstr "API密钥" +msgstr "" #: plugin/samples/integration/sample.py:59 msgid "Key required for accessing external API" -msgstr "访问外部 API 所需的密钥" +msgstr "" #: plugin/samples/integration/sample.py:63 msgid "Numerical" -msgstr "数字化" +msgstr "" #: plugin/samples/integration/sample.py:64 msgid "A numerical setting" -msgstr "数值设置" +msgstr "" #: plugin/samples/integration/sample.py:69 msgid "Choice Setting" -msgstr "选择设置" +msgstr "" #: plugin/samples/integration/sample.py:70 msgid "A setting with multiple choices" -msgstr "带有多个选项的设置" +msgstr "" #: plugin/samples/integration/sample_currency_exchange.py:15 msgid "Sample currency exchange plugin" -msgstr "货币兑换插件示例" +msgstr "" #: plugin/samples/integration/sample_currency_exchange.py:18 +#, fuzzy +#| msgid "About InvenTree" msgid "InvenTree Contributors" -msgstr "InvenTree 贡献者" +msgstr "关于 InventTree" #: plugin/serializers.py:81 msgid "Source URL" -msgstr "源URL" +msgstr "" #: plugin/serializers.py:83 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "软件包的来源 - 这可以是自定义注册表或 VCS 路径" +msgstr "" #: plugin/serializers.py:92 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "插件包名称 - 也可以包含版本指示器" +msgstr "" #: plugin/serializers.py:99 #: templates/InvenTree/settings/plugin_settings.html:42 #: templates/js/translated/plugin.js:86 msgid "Version" -msgstr "版本" +msgstr "" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "插件版本说明。新版请留白。" +msgstr "" #: plugin/serializers.py:106 msgid "Confirm plugin installation" -msgstr "确认插件安装" +msgstr "" #: plugin/serializers.py:108 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "这将把这个插件安装到当前实例中。这个实例将进行维护。" +msgstr "" #: plugin/serializers.py:121 msgid "Installation not confirmed" -msgstr "安装尚未确认" +msgstr "" #: plugin/serializers.py:123 msgid "Either packagename of URL must be provided" -msgstr "必须提供软件包名称或者URL" +msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:156 msgid "Full reload" -msgstr "完全重载" +msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:157 msgid "Perform a full reload of the plugin registry" -msgstr "执行插件库的完整重载" +msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:163 msgid "Force reload" -msgstr "强制重载" +msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:165 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "强制重载插件库,即使已经加载" +msgstr "" -#: plugin/serializers.py:177 +#: plugin/serializers.py:172 +#, fuzzy +#| msgid "Select supplier" msgid "Collect plugins" -msgstr "收集插件" +msgstr "选择供应商" -#: plugin/serializers.py:178 +#: plugin/serializers.py:173 msgid "Collect plugins and add them to the registry" -msgstr "收集插件并添加到注册表中" +msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:195 msgid "Activate Plugin" -msgstr "激活插件" +msgstr "" -#: plugin/serializers.py:206 +#: plugin/serializers.py:196 msgid "Activate this plugin" -msgstr "激活此插件" +msgstr "" -#: plugin/serializers.py:226 +#: plugin/serializers.py:219 +#, fuzzy +#| msgid "Delete location" msgid "Delete configuration" -msgstr "删除配置" +msgstr "删除仓储地" -#: plugin/serializers.py:227 +#: plugin/serializers.py:220 msgid "Delete the plugin configuration from the database" -msgstr "从数据库中删除插件配置" +msgstr "" -#: report/api.py:88 +#: report/api.py:158 msgid "No valid objects provided to template" msgstr "没有为模板提供有效对象" -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "项目" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "插件未找到" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "插件未激活" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "插件不支持标签打印" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "无效的标签尺寸" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "没有有效的项目提供到模板" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "打印标签出错" - -#: report/api.py:375 report/api.py:411 +#: report/api.py:197 report/api.py:234 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" -msgstr "模板文件'{template}' 丢失或不存在" +msgstr "" + +#: report/api.py:319 +msgid "Test report" +msgstr "" -#: report/helpers.py:43 +#: report/helpers.py:15 msgid "A4" -msgstr "A4" +msgstr "" -#: report/helpers.py:44 +#: report/helpers.py:16 msgid "A3" -msgstr "A3" +msgstr "" -#: report/helpers.py:45 +#: report/helpers.py:17 msgid "Legal" -msgstr "法律" +msgstr "" -#: report/helpers.py:46 +#: report/helpers.py:18 msgid "Letter" -msgstr "字母" - -#: report/models.py:118 -msgid "Template file with this name already exists" -msgstr "已存在具有此名称的模板" +msgstr "" -#: report/models.py:150 +#: report/models.py:177 msgid "Template name" -msgstr "模版名称" - -#: report/models.py:156 -msgid "Template description" -msgstr "模板说明" - -#: report/models.py:162 -msgid "Revision number (auto-increments)" -msgstr "修订编号 (自动增量)" - -#: report/models.py:202 -msgid "Filename Pattern" -msgstr "文件名样式" - -#: report/models.py:203 -msgid "Pattern for generating filenames" -msgstr "生成文件名模式" - -#: report/models.py:208 -msgid "Template is enabled" -msgstr "模板已启用" - -#: report/models.py:214 -msgid "Target model type for template" -msgstr "模版的目标模型类型" +msgstr "" -#: report/models.py:234 -msgid "Filters" -msgstr "筛选器" +#: report/models.py:183 +msgid "Report template file" +msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "模版查询筛选器 (逗号分隔的键值对列表)" +#: report/models.py:190 +msgid "Report template description" +msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" -msgstr "模板包文件" +#: report/models.py:196 +msgid "Report revision number (auto-increments)" +msgstr "" -#: report/models.py:302 +#: report/models.py:204 +#, fuzzy +#| msgid "Default page size for PDF reports" msgid "Page size for PDF reports" -msgstr "PDF 报告的页面大小" +msgstr "PDF 报表默认页面大小" -#: report/models.py:308 +#: report/models.py:210 msgid "Render report in landscape orientation" -msgstr "横向渲染报告" +msgstr "" -#: report/models.py:367 -msgid "Width [mm]" -msgstr "宽度 [mm]" +#: report/models.py:318 +msgid "Pattern for generating report filenames" +msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" -msgstr "标签宽度,以毫米为单位。" +#: report/models.py:325 +msgid "Report template is enabled" +msgstr "" -#: report/models.py:374 -msgid "Height [mm]" -msgstr "高度 [mm]" +#: report/models.py:347 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" -msgstr "标签高度,以毫米为单位。" +#: report/models.py:354 +msgid "Include Installed Tests" +msgstr "" -#: report/models.py:438 -msgid "Number of items to process" -msgstr "要处理的项目数量" +#: report/models.py:356 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" -msgstr "报告生成完成" +#: report/models.py:424 +msgid "Build Filters" +msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" -msgstr "进度" +#: report/models.py:425 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" -#: report/models.py:448 -msgid "Report generation progress" -msgstr "报告生成进度" +#: report/models.py:464 +msgid "Part Filters" +msgstr "商品过滤器" -#: report/models.py:456 -msgid "Report Template" -msgstr "报告模板" +#: report/models.py:465 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" -#: report/models.py:463 report/models.py:486 -msgid "Output File" -msgstr "输出文件" +#: report/models.py:497 +msgid "Purchase order query filters" +msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" -msgstr "生成输出文件" +#: report/models.py:533 +msgid "Sales order query filters" +msgstr "" -#: report/models.py:475 -msgid "Label output plugin" -msgstr "标签输出插件" +#: report/models.py:569 +msgid "Return order query filters" +msgstr "" -#: report/models.py:479 -msgid "Label Template" -msgstr "标签模板" +#: report/models.py:641 +#, fuzzy +#| msgid "Attachment with this filename already exists" +msgid "Snippet file with this name already exists" +msgstr "使用此文件名的附件已存在" -#: report/models.py:502 +#: report/models.py:648 msgid "Snippet" -msgstr "代码片段" +msgstr "" -#: report/models.py:503 +#: report/models.py:649 msgid "Report snippet file" -msgstr "报告代码片段文件" +msgstr "" -#: report/models.py:510 +#: report/models.py:656 msgid "Snippet file description" -msgstr "代码片段文件描述" +msgstr "" + +#: report/models.py:714 +#, fuzzy +#| msgid "Attachment with this filename already exists" +msgid "Asset file with this name already exists" +msgstr "使用此文件名的附件已存在" -#: report/models.py:528 +#: report/models.py:722 msgid "Asset" -msgstr "资产" +msgstr "" -#: report/models.py:529 +#: report/models.py:723 msgid "Report asset file" -msgstr "报告资产文件" +msgstr "" -#: report/models.py:536 +#: report/models.py:730 msgid "Asset file description" -msgstr "资产文件描述" - -#: report/serializers.py:91 -msgid "Select report template" -msgstr "选择报表模板" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "要包含在报告中的项目主键列表" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "选择标签模板" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "打印插件" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "选择用于标签打印的插件" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "二维码" +msgstr "" -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "二维码" +#: report/models.py:752 +#, fuzzy +#| msgid "Query filters (comma-separated list of key=value pairs)," +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "查询筛选器 (逗号分隔的键值对列表)" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "所需材料" +msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" -msgstr "需要给" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" -msgstr "供应商已删除" +msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" -msgstr "单位价格" +msgstr "单价" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +#, fuzzy +#| msgid "Extra build notes" msgid "Extra Line Items" -msgstr "额外行项目" - -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +msgstr "额外的生产备注" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 msgid "Total" -msgstr "总计" +msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:809 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "序列号" + +#: report/templates/report/inventree_slr_report.html:97 +#, fuzzy +#| msgid "Stock item created" msgid "Stock location items" -msgstr "库存地点项目" +msgstr "库存项已创建" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "库存项测试报告" +msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "测试结果" +msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 msgid "Test" -msgstr "测试" +msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2430 msgid "Result" -msgstr "结果" +msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "通过" +msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" -msgstr "失败" +msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 +#, fuzzy +#| msgid "Restart required" msgid "No result (required)" -msgstr "无结果 (必填)" +msgstr "需要重启" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" -msgstr "没有结果" +msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" -msgstr "已安装的项目" +msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 msgid "Serial" -msgstr "系列" +msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:96 msgid "Asset file does not exist" -msgstr "资产文件不存在" +msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:152 report/templatetags/report.py:217 +#, fuzzy +#| msgid "Part image not found" msgid "Image file not found" -msgstr "找不到图片文件" +msgstr "未找到商品图像" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:242 msgid "part_image tag requires a Part instance" -msgstr "parpart_image 标签需要一个零件实例" +msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:283 msgid "company_image tag requires a Company instance" -msgstr "公司_图片标签需要一个公司实例" +msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:172 msgid "Location ID" -msgstr "位置 ID" +msgstr "" + +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" -msgstr "地点路径" +msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:149 msgid "Stock Item ID" -msgstr "库存项 ID" +msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:168 +#, fuzzy +#| msgid "Status" msgid "Status Code" -msgstr "状态代码" +msgstr "状态" -#: stock/admin.py:179 +#: stock/admin.py:180 msgid "Supplier Part ID" -msgstr "供应商零件 ID" +msgstr "供应商商品ID" -#: stock/admin.py:184 -msgid "Supplier Part SKU" -msgstr "供应商零件库存保管单元" - -#: stock/admin.py:189 +#: stock/admin.py:185 msgid "Supplier ID" -msgstr "供应商 ID" +msgstr "" + +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:196 msgid "Customer ID" -msgstr "客户 ID" +msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:201 stock/models.py:789 #: stock/templates/stock/item_base.html:354 msgid "Installed In" -msgstr "安装于" +msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:206 msgid "Build ID" -msgstr "生产 ID" +msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:216 msgid "Sales Order ID" -msgstr "销售订单 ID" +msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:221 msgid "Purchase Order ID" -msgstr "采购订单 ID" +msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:236 msgid "Review Needed" -msgstr "需要审核" +msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:241 +#, fuzzy +#| msgid "Delete Template" msgid "Delete on Deplete" -msgstr "在消耗品上删除" +msgstr "删除模板" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:256 stock/models.py:883 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2229 users/models.py:124 msgid "Expiry Date" -msgstr "有效期至" +msgstr "" -#: stock/api.py:310 +#: stock/api.py:284 +#, fuzzy +#| msgid "Print Order Reports" msgid "Filter by location depth" -msgstr "按位置深度筛选" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "按顶级位置筛选" +msgstr "打印订单报表" -#: stock/api.py:345 +#: stock/api.py:304 msgid "Include sub-locations in filtered results" -msgstr "在筛选结果中包含子地点" +msgstr "" -#: stock/api.py:367 stock/serializers.py:1186 +#: stock/api.py:325 +#, fuzzy +#| msgid "Print actions" msgid "Parent Location" -msgstr "上级地点" +msgstr "打印操作" -#: stock/api.py:368 +#: stock/api.py:326 +#, fuzzy +#| msgid "Delete location" msgid "Filter by parent location" -msgstr "按上级位置筛选" +msgstr "删除仓储地" -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:579 templates/js/translated/table_filters.js:427 msgid "External Location" -msgstr "外部地点" +msgstr "" -#: stock/api.py:803 +#: stock/api.py:767 +#, fuzzy +#| msgid "Part name" msgid "Part Tree" -msgstr "零件树" +msgstr "商品名称" -#: stock/api.py:833 +#: stock/api.py:797 msgid "Expiry date before" -msgstr "过期日期前" +msgstr "" -#: stock/api.py:837 +#: stock/api.py:801 msgid "Expiry date after" -msgstr "过期日期后" +msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" -msgstr "过期" +msgstr "" -#: stock/api.py:927 +#: stock/api.py:891 msgid "Quantity is required" -msgstr "请先输入数量" +msgstr "" -#: stock/api.py:933 +#: stock/api.py:897 msgid "Valid part must be supplied" -msgstr "必须提供有效的零件" +msgstr "" -#: stock/api.py:964 +#: stock/api.py:928 msgid "The given supplier part does not exist" -msgstr "给定的供应商零件不存在" +msgstr "" -#: stock/api.py:974 +#: stock/api.py:938 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置" +msgstr "" -#: stock/api.py:1005 +#: stock/api.py:969 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "不能为不可跟踪的零件提供序列号" +msgstr "" -#: stock/models.py:64 +#: stock/models.py:63 +#, fuzzy +#| msgid "Stock Location" msgid "Stock Location type" -msgstr "库存地点类型" +msgstr "仓储地点" -#: stock/models.py:65 +#: stock/models.py:64 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock Location types" -msgstr "库存地点类型" +msgstr "仓储地点" -#: stock/models.py:91 +#: stock/models.py:90 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "为所有没有图标的位置设置默认图标(可选)" +msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:125 stock/models.py:771 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" -msgstr "库存地点" +msgstr "仓储地点" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:126 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" -msgstr "库存地点" +msgstr "仓储地点" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:158 stock/models.py:932 #: stock/templates/stock/item_base.html:247 msgid "Owner" -msgstr "所有者" +msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:159 stock/models.py:933 msgid "Select Owner" -msgstr "选择所有者" +msgstr "" -#: stock/models.py:189 +#: stock/models.py:167 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "库存项可能不直接位于结构库存地点,但可能位于其子地点。" +msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 msgid "External" -msgstr "外部" +msgstr "" -#: stock/models.py:197 +#: stock/models.py:175 msgid "This is an external stock location" -msgstr "这是一个外部库存地点" +msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 +#, fuzzy +#| msgid "Location" msgid "Location type" -msgstr "位置类型" +msgstr "地点" -#: stock/models.py:207 +#: stock/models.py:185 +#, fuzzy +#| msgid "Stock item created" msgid "Stock location type of this location" -msgstr "该位置的库存地点类型" +msgstr "库存项已创建" -#: stock/models.py:279 +#: stock/models.py:254 msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "您不能将此库存地点设置为结构性,因为某些库存项已经位于它!" +msgstr "" -#: stock/models.py:664 +#: stock/models.py:626 msgid "Stock items cannot be located into structural stock locations!" -msgstr "库存项不能存放在结构性库存地点!" +msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:653 stock/serializers.py:290 msgid "Stock item cannot be created for virtual parts" -msgstr "无法为虚拟零件创建库存项" +msgstr "" -#: stock/models.py:708 -#, python-brace-format +#: stock/models.py:670 +#, fuzzy, python-brace-format +#| msgid "Part type ('{pf}') must be {pe}" msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "零件类型 ('{self.supplier_part.part}') 必须为 {self.part}" +msgstr "商品类型 ('{pf}') 必须是 {pe}" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:680 stock/models.py:693 msgid "Quantity must be 1 for item with a serial number" -msgstr "有序列号的项目的数量必须是1" +msgstr "" -#: stock/models.py:721 +#: stock/models.py:683 msgid "Serial number cannot be set if quantity greater than 1" -msgstr "如果数量大于1,则不能设置序列号" +msgstr "" -#: stock/models.py:743 +#: stock/models.py:707 msgid "Item cannot belong to itself" -msgstr "项目不能属于其自身" +msgstr "" -#: stock/models.py:748 +#: stock/models.py:712 msgid "Item must have a build reference if is_building=True" -msgstr "如果is_building=True,则项必须具有构建引用" +msgstr "" -#: stock/models.py:761 +#: stock/models.py:725 msgid "Build reference does not point to the same part object" -msgstr "构建引用未指向同一零件对象" +msgstr "" -#: stock/models.py:777 +#: stock/models.py:741 msgid "Parent Stock Item" -msgstr "母库存项目" +msgstr "" -#: stock/models.py:789 +#: stock/models.py:753 msgid "Base part" -msgstr "基础零件" +msgstr "" -#: stock/models.py:799 +#: stock/models.py:763 msgid "Select a matching supplier part for this stock item" -msgstr "为此库存项目选择匹配的供应商零件" +msgstr "" -#: stock/models.py:811 +#: stock/models.py:775 msgid "Where is this stock item located?" -msgstr "这个库存物品在哪里?" +msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:783 stock/serializers.py:1351 msgid "Packaging this stock item is stored in" -msgstr "包装此库存物品存储在" +msgstr "" -#: stock/models.py:830 +#: stock/models.py:794 msgid "Is this item installed in another item?" -msgstr "此项目是否安装在另一个项目中?" +msgstr "" -#: stock/models.py:849 +#: stock/models.py:813 msgid "Serial number for this item" -msgstr "此项目的序列号" +msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:827 stock/serializers.py:1334 msgid "Batch code for this stock item" -msgstr "此库存项的批号" +msgstr "" -#: stock/models.py:868 +#: stock/models.py:832 msgid "Stock Quantity" -msgstr "库存数量" +msgstr "" -#: stock/models.py:878 +#: stock/models.py:842 msgid "Source Build" -msgstr "源代码构建" +msgstr "" -#: stock/models.py:881 +#: stock/models.py:845 msgid "Build for this stock item" -msgstr "为此库存项目构建" +msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#, fuzzy +#| msgid "Issued By" msgid "Consumed By" -msgstr "消费者" +msgstr "发布者" -#: stock/models.py:891 +#: stock/models.py:855 +#, fuzzy +#| msgid "BuildOrder to which this build is allocated" msgid "Build order which consumed this stock item" -msgstr "构建消耗此库存项的生产订单" +msgstr "此次生产匹配的订单" -#: stock/models.py:900 +#: stock/models.py:864 msgid "Source Purchase Order" -msgstr "采购订单来源" +msgstr "" -#: stock/models.py:904 +#: stock/models.py:868 msgid "Purchase order for this stock item" -msgstr "此库存商品的采购订单" +msgstr "" -#: stock/models.py:910 +#: stock/models.py:874 msgid "Destination Sales Order" -msgstr "目的地销售订单" +msgstr "" -#: stock/models.py:921 +#: stock/models.py:885 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "库存物品的到期日。在此日期之后,库存将被视为过期" +msgstr "" -#: stock/models.py:939 +#: stock/models.py:903 msgid "Delete on deplete" -msgstr "耗尽时删除" +msgstr "" -#: stock/models.py:940 +#: stock/models.py:904 msgid "Delete this Stock Item when stock is depleted" -msgstr "当库存耗尽时删除此库存项" +msgstr "" -#: stock/models.py:960 +#: stock/models.py:924 msgid "Single unit purchase price at time of purchase" -msgstr "购买时一个单位的价格" +msgstr "" -#: stock/models.py:991 +#: stock/models.py:955 msgid "Converted to part" -msgstr "转换为零件" +msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1465 msgid "Part is not set as trackable" -msgstr "零件未设置为可跟踪" +msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1471 msgid "Quantity must be integer" -msgstr "数量必须是整数" +msgstr "" -#: stock/models.py:1525 -#, python-brace-format +#: stock/models.py:1479 +#, fuzzy, python-brace-format +#| msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "数量不得超过现有库存量 ({self.quantity})" +msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: stock/models.py:1531 +#: stock/models.py:1485 msgid "Serial numbers must be a list of integers" -msgstr "序列号必须是整数列表" +msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1490 msgid "Quantity does not match serial numbers" -msgstr "数量不匹配序列号" +msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1498 stock/serializers.py:529 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/models.py:1641 +#: stock/models.py:1595 +#, fuzzy +#| msgid "Part image not found" msgid "Test template does not exist" -msgstr "测试模板不存在" +msgstr "未找到商品图像" -#: stock/models.py:1659 +#: stock/models.py:1613 msgid "Stock item has been assigned to a sales order" -msgstr "库存项已分配到销售订单" +msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1617 msgid "Stock item is installed in another item" -msgstr "库存项已安装在另一个项目中" +msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1620 msgid "Stock item contains other items" -msgstr "库存项包含其他项目" +msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1623 msgid "Stock item has been assigned to a customer" -msgstr "库存项已分配给客户" +msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1626 msgid "Stock item is currently in production" -msgstr "库存项目前正在生产" +msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1629 msgid "Serialized stock cannot be merged" -msgstr "序列化的库存不能合并" +msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1636 stock/serializers.py:1240 msgid "Duplicate stock items" -msgstr "复制库存项" +msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1640 msgid "Stock items must refer to the same part" -msgstr "库存项必须指相同零件" +msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1648 msgid "Stock items must refer to the same supplier part" -msgstr "库存项必须是同一供应商的零件" +msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1653 msgid "Stock status codes must match" -msgstr "库存状态码必须匹配" +msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1870 msgid "StockItem cannot be moved as it is not in stock" -msgstr "库存项不能移动,因为它没有库存" - -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "库存项跟踪" +msgstr "" -#: stock/models.py:2376 +#: stock/models.py:2333 msgid "Entry notes" -msgstr "条目注释" - -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "库存项测试结果" +msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2398 msgid "Value must be provided for this test" -msgstr "必须为此测试提供值" +msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2403 msgid "Attachment must be uploaded for this test" -msgstr "测试附件必须上传" - -#: stock/models.py:2459 -msgid "Invalid value for this test" -msgstr "此测试的值无效" +msgstr "" -#: stock/models.py:2544 +#: stock/models.py:2430 msgid "Test result" -msgstr "测试结果" +msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2437 msgid "Test output value" -msgstr "测试输出值" +msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2445 msgid "Test result attachment" -msgstr "测验结果附件" +msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2449 msgid "Test notes" -msgstr "测试备注" +msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 +#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#, fuzzy +#| msgid "Destination" msgid "Test station" -msgstr "测试站" +msgstr "目的地" -#: stock/models.py:2572 +#: stock/models.py:2458 msgid "The identifier of the test station where the test was performed" -msgstr "进行测试的测试站的标识符" +msgstr "" -#: stock/models.py:2578 +#: stock/models.py:2464 msgid "Started" -msgstr "已开始" +msgstr "" -#: stock/models.py:2579 +#: stock/models.py:2465 +#, fuzzy +#| msgid "Timestamp of last update" msgid "The timestamp of the test start" -msgstr "测试开始的时间戳" +msgstr "最后一次更新时间" -#: stock/models.py:2585 +#: stock/models.py:2471 +#, fuzzy +#| msgid "Danish" msgid "Finished" -msgstr "已完成" +msgstr "丹麦语" -#: stock/models.py:2586 +#: stock/models.py:2472 +#, fuzzy +#| msgid "Timestamp of last update" msgid "The timestamp of the test finish" -msgstr "测试结束的时间戳" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "生成批量代码" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "选择生产订单" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "选择要生成批量代码的库存项" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "选择要生成批量代码的位置" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "选择要生成批量代码的零件" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "选择采购订单" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "输入批量代码的数量" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "生成的序列号" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "选择要生成序列号的零件" +msgstr "最后一次更新时间" -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "要生成的序列号的数量" - -#: stock/serializers.py:233 +#: stock/serializers.py:100 +#, fuzzy +#| msgid "User or group responsible for this order" msgid "Test template for this result" -msgstr "此结果的测试模板" +msgstr "负责此订单的用户或群组" -#: stock/serializers.py:254 +#: stock/serializers.py:119 +#, fuzzy +#| msgid "Allocation items must be provided" msgid "Template ID or test name must be provided" -msgstr "必须提供模板 ID 或测试名称" +msgstr "必须提供分配的项" -#: stock/serializers.py:286 +#: stock/serializers.py:151 msgid "The test finished time cannot be earlier than the test started time" -msgstr "测试完成时间不能早于测试开始时间" +msgstr "" -#: stock/serializers.py:323 +#: stock/serializers.py:184 msgid "Serial number is too large" -msgstr "序列号太大" - -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "父项" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "父库存项" +msgstr "" -#: stock/serializers.py:472 +#: stock/serializers.py:282 msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "添加时使用包装尺寸:定义的数量是包装的数量" - -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "已过期" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "子项目" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "跟踪项目" +msgstr "" -#: stock/serializers.py:612 +#: stock/serializers.py:402 msgid "Purchase price of this stock item, per unit or pack" -msgstr "此库存商品的购买价格,单位或包装" - -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "最低价格" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "最高价格" +msgstr "" -#: stock/serializers.py:661 +#: stock/serializers.py:464 msgid "Enter number of stock items to serialize" -msgstr "输入要序列化的库存项目数量" +msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:477 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "数量不得超过现有库存量 ({q})" +msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:484 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:699 +#: stock/serializers.py:502 msgid "Optional note field" -msgstr "可选注释字段" +msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:512 msgid "Serial numbers cannot be assigned to this part" -msgstr "此零件不能分配序列号" +msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:567 msgid "Select stock item to install" -msgstr "选择要安装的库存项目" +msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:574 msgid "Quantity to Install" -msgstr "安装数量" +msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:575 +#, fuzzy +#| msgid "Enter quantity for build output" msgid "Enter the quantity of items to install" -msgstr "输入要安装的项目数量" +msgstr "输入生产产出数量" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 msgid "Add transaction note (optional)" -msgstr "添加交易记录 (可选)" +msgstr "添加交易备注 (可选)" -#: stock/serializers.py:785 +#: stock/serializers.py:588 +#, fuzzy +#| msgid "Quantity must be a positive number" msgid "Quantity to install must be at least 1" -msgstr "安装数量必须至少为1" +msgstr "数量必须大于0" -#: stock/serializers.py:793 +#: stock/serializers.py:596 msgid "Stock item is unavailable" -msgstr "库存项不可用" +msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:607 msgid "Selected part is not in the Bill of Materials" -msgstr "所选零件不在物料清单中" +msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:620 +#, fuzzy +#| msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgid "Quantity to install must not exceed available quantity" -msgstr "安装数量不得超过可用数量" +msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: stock/serializers.py:852 +#: stock/serializers.py:655 msgid "Destination location for uninstalled item" -msgstr "已卸载项目的目标位置" - -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "不支持的统计类型: " +msgstr "" -#: stock/serializers.py:917 +#: stock/serializers.py:690 msgid "Select part to convert stock item into" -msgstr "选择要将库存项目转换为的零件" +msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:703 msgid "Selected part is not a valid option for conversion" -msgstr "所选零件不是有效的转换选项" +msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:720 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "无法转换已分配供应商零件的库存项" +msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:751 msgid "Destination location for returned item" -msgstr "退回物品的目的地位置" +msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:788 +#, fuzzy +#| msgid "Selected stock item not found in BOM" msgid "Select stock items to change status" -msgstr "选择要更改状态的库存项目" +msgstr "在BOM中找不到选定的库存项" -#: stock/serializers.py:1021 +#: stock/serializers.py:794 +#, fuzzy +#| msgid "Stock item created" msgid "No stock items selected" -msgstr "未选择库存商品" +msgstr "库存项已创建" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" -msgstr "转租" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "上级库存地点" +msgstr "" -#: stock/serializers.py:1298 +#: stock/serializers.py:1069 msgid "Part must be salable" -msgstr "零件必须可销售" +msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:1073 msgid "Item is allocated to a sales order" -msgstr "物料已分配到销售订单" +msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:1077 msgid "Item is allocated to a build order" -msgstr "项目被分配到生产订单中" +msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1101 msgid "Customer to assign stock items" -msgstr "客户分配库存项目" +msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1107 msgid "Selected company is not a customer" -msgstr "所选公司不是客户" +msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1115 msgid "Stock assignment notes" -msgstr "库存分配说明" +msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1125 stock/serializers.py:1379 msgid "A list of stock items must be provided" -msgstr "必须提供库存物品清单" +msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1204 msgid "Stock merging notes" -msgstr "库存合并说明" +msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1209 msgid "Allow mismatched suppliers" -msgstr "允许不匹配的供应商" +msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1210 msgid "Allow stock items with different supplier parts to be merged" -msgstr "允许合并具有不同供应商零件的库存项目" +msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1215 msgid "Allow mismatched status" -msgstr "允许不匹配的状态" +msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1216 msgid "Allow stock items with different status codes to be merged" -msgstr "允许合并具有不同状态代码的库存项目" +msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1226 msgid "At least two stock items must be provided" -msgstr "必须提供至少两件库存物品" +msgstr "" -#: stock/serializers.py:1522 +#: stock/serializers.py:1293 +#, fuzzy +#| msgid "Change" msgid "No Change" -msgstr "无更改" +msgstr "更改" -#: stock/serializers.py:1551 +#: stock/serializers.py:1322 msgid "StockItem primary key value" -msgstr "库存项主键值" +msgstr "" -#: stock/serializers.py:1570 +#: stock/serializers.py:1341 +#, fuzzy +#| msgid "Stock item created" msgid "Stock item status code" -msgstr "库存项状态代码" - -#: stock/serializers.py:1598 -msgid "Stock transaction notes" -msgstr "库存交易记录" - -#: stock/status_codes.py:11 -msgid "OK" -msgstr "OK" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "需要关注" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "破损" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "销毁" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "拒绝" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "隔离" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "旧库存跟踪条目" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" msgstr "库存项已创建" -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "已编辑库存项" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "已分配序列号" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "库存计数" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "已手动添加库存" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "已手动删除库存" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "地点已更改" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "库存已更新" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "已安装到装配中" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "已从装配中删除" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "已安装组件项" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "已删除组件项" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "从上级项拆分" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "拆分子项" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "合并的库存项" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "转换为变体" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "已创建生产订单产出" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "生产订单已出产" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "生产订单产出被拒绝" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "被工單消耗的" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "按銷售訂單出貨" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "按採購訂單接收" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "按退貨訂單退回" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "寄送給客戶" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "從客戶端退回" +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" -msgstr "库存跟踪信息" +msgstr "" #: stock/templates/stock/item.html:63 msgid "Child Stock Items" -msgstr "子库存项" +msgstr "" #: stock/templates/stock/item.html:72 msgid "This stock item does not have any child items" -msgstr "此库存商品没有任何子商品" +msgstr "" #: stock/templates/stock/item.html:81 #: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" -msgstr "测试数据" +msgstr "" #: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 msgid "Test Report" -msgstr "测试报告" +msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 msgid "Delete Test Data" -msgstr "删除测试数据" +msgstr "" #: stock/templates/stock/item.html:93 msgid "Add Test Data" -msgstr "添加测试数据" +msgstr "" #: stock/templates/stock/item.html:125 msgid "Stock Item Notes" -msgstr "库存项目备注" +msgstr "" #: stock/templates/stock/item.html:140 msgid "Installed Stock Items" -msgstr "已安装的库存项" +msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 msgid "Install Stock Item" -msgstr "安装库存项" +msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:274 msgid "Delete all test results for this stock item" -msgstr "删除此库存项目的所有测试结果" +msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 msgid "Add Test Result" -msgstr "添加测试结果" +msgstr "" #: stock/templates/stock/item_base.html:33 msgid "Locate stock item" -msgstr "查找库存项目" +msgstr "" #: stock/templates/stock/item_base.html:51 msgid "Scan to Location" -msgstr "扫描到位置" +msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" -msgstr "打印操作" +msgstr "" #: stock/templates/stock/item_base.html:75 msgid "Stock adjustment actions" -msgstr "库存调整操作" +msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 msgid "Count stock" -msgstr "清点库存" +msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1803 msgid "Add stock" -msgstr "增加库存" +msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1812 msgid "Remove stock" -msgstr "移除库存" +msgstr "" #: stock/templates/stock/item_base.html:85 msgid "Serialize stock" -msgstr "序列化库存" +msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 msgid "Transfer stock" -msgstr "转移库存" +msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1884 msgid "Assign to customer" -msgstr "分配给客户" +msgstr "" #: stock/templates/stock/item_base.html:94 msgid "Return to stock" -msgstr "返回库存" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall stock item" -msgstr "卸载库存项目" +msgstr "" #: stock/templates/stock/item_base.html:97 msgid "Uninstall" -msgstr "卸载" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install stock item" -msgstr "安装库存项" +msgstr "" #: stock/templates/stock/item_base.html:101 msgid "Install" -msgstr "安装" +msgstr "" #: stock/templates/stock/item_base.html:115 msgid "Convert to variant" -msgstr "转换为变体" +msgstr "" #: stock/templates/stock/item_base.html:118 msgid "Duplicate stock item" -msgstr "复制库存项目" +msgstr "" #: stock/templates/stock/item_base.html:120 msgid "Edit stock item" -msgstr "编辑库存项" +msgstr "" #: stock/templates/stock/item_base.html:123 msgid "Delete stock item" -msgstr "删除库存项" +msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 msgid "Build" msgstr "生产" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" -msgstr "未设置制造商" +msgstr "" #: stock/templates/stock/item_base.html:251 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "您不在此项目的所有者列表中。此库存项目不可编辑。" +msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" -msgstr "只读" +msgstr "" #: stock/templates/stock/item_base.html:265 +#, fuzzy +#| msgid "Stock item is over-allocated" msgid "This stock item is unavailable" -msgstr "此库存项不可用" +msgstr "库存物品分配过度!" #: stock/templates/stock/item_base.html:271 msgid "This stock item is in production and cannot be edited." @@ -10439,377 +9996,392 @@ msgstr "此库存项目正在生产中,无法编辑。" #: stock/templates/stock/item_base.html:272 msgid "Edit the stock item from the build view." -msgstr "从构建视图中编辑库存项目。" +msgstr "" #: stock/templates/stock/item_base.html:287 msgid "This stock item is allocated to Sales Order" -msgstr "此库存项目已分配给销售订单" +msgstr "" #: stock/templates/stock/item_base.html:295 msgid "This stock item is allocated to Build Order" -msgstr "此库存项目已分配给生产订单" +msgstr "" #: stock/templates/stock/item_base.html:311 msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" -msgstr "此库存商品已序列化。它有一个唯一的序列号,数量无法调整" +msgstr "" #: stock/templates/stock/item_base.html:317 msgid "previous page" -msgstr "上一页" +msgstr "" #: stock/templates/stock/item_base.html:317 msgid "Navigate to previous serial number" -msgstr "导航到上一个序列号" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "next page" -msgstr "下一页" +msgstr "" #: stock/templates/stock/item_base.html:326 msgid "Navigate to next serial number" -msgstr "导航到下一个序列号" +msgstr "" + +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2378 msgid "No location set" -msgstr "未设置位置" +msgstr "未设置仓储地点" #: stock/templates/stock/item_base.html:413 msgid "Tests" -msgstr "测试" +msgstr "" #: stock/templates/stock/item_base.html:419 msgid "This stock item has not passed all required tests" -msgstr "此库存项目未通过所有要求的测试" +msgstr "" #: stock/templates/stock/item_base.html:437 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "此库存项在 %(item.expiry_date)s 过期" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "此库存项在 %(item.expiry_date)s 过期" +msgstr "" #: stock/templates/stock/item_base.html:455 msgid "No stocktake performed" -msgstr "未进行盘点" +msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 +#, fuzzy +#| msgid "Stock Item" msgid "stock item" msgstr "库存项" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" -msgstr "编辑库存状态" +msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" -msgstr "库存项二维码" +msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" -msgstr "将条形码链接到库存项" +msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." -msgstr "选择下面列出的零件变体之一。" +msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "警告" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" -msgstr "此操作不易撤消" +msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" -msgstr "转换库存项目" +msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" -msgstr "返回到库存" +msgstr "" #: stock/templates/stock/item_serialize.html:5 msgid "Create serialized items from this stock item." -msgstr "从该库存项目创建序列化项目。" +msgstr "" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "选择要序列化的数量和唯一的序列号。" +msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" -msgstr "对该库存位置进行盘点" +msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" -msgstr "定位库存位置" +msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" -msgstr "将库存商品扫描到此位置" +msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" -msgstr "扫描库存商品" +msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" -msgstr "将库存集装箱扫描到此位置" +msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" -msgstr "扫描集装箱" +msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 +#, fuzzy +#| msgid "Print Order Reports" msgid "Print Location Report" -msgstr "打印位置报告" +msgstr "打印订单报表" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" -msgstr "位置操作" +msgstr "仓储地操作" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" -msgstr "编辑位置" +msgstr "编辑仓储地" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" -msgstr "删除位置" +msgstr "删除仓储地" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" -msgstr "顶级库存位置" +msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" -msgstr "位置所有者" +msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "您不在此位置的所有者列表中。此库存位置不可编辑。" - -#: stock/templates/stock/location.html:173 -msgid "Location Type" -msgstr "位置类型" +msgstr "您不在此仓储地的所有者列表中,无法编辑此仓储地。" -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" -msgstr "创建新的库存位置" +msgstr "新建仓储地点" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" -msgstr "新建库存地点" +msgstr "新建仓储地点" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 +#, fuzzy +#| msgid "Stock Location" msgid "stock location" -msgstr "库存位置" +msgstr "仓储地点" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" -msgstr "将扫描的库存集装箱放入此位置" +msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" -msgstr "库存地点二维码" +msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" -msgstr "将条形码链接到库存地点" +msgstr "" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." -msgstr "加载中…" +msgstr "" #: stock/templates/stock/stock_sidebar.html:5 msgid "Stock Tracking" -msgstr "库存跟踪" +msgstr "" #: stock/templates/stock/stock_sidebar.html:8 msgid "Allocations" -msgstr "分配" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "权限受限" +msgstr "" #: templates/403.html:15 msgid "You do not have permission to view this page." -msgstr "您没有查看此页面的权限。" +msgstr "" #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "认证失败" +msgstr "" #: templates/403_csrf.html:14 msgid "You have been logged out from InvenTree." -msgstr "您已从InvenTree注销。" +msgstr "" #: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 #: templates/navbar.html:150 msgid "Login" -msgstr "登录" +msgstr "" #: templates/404.html:6 templates/404.html:12 msgid "Page Not Found" -msgstr "找不到页面" +msgstr "" #: templates/404.html:15 msgid "The requested page does not exist" -msgstr "请求的页面不存在" +msgstr "" #: templates/500.html:6 templates/500.html:12 msgid "Internal Server Error" -msgstr "服务器内部错误" +msgstr "" #: templates/500.html:15 #, python-format msgid "The %(inventree_title)s server raised an internal error" -msgstr "%(inventree_title)s 服务器引起一个内部错误" +msgstr "" #: templates/500.html:16 msgid "Refer to the error log in the admin interface for further details" -msgstr "有关更多详细信息,请参阅管理界面中的错误日志" +msgstr "" #: templates/503.html:11 templates/503.html:33 msgid "Site is in Maintenance" -msgstr "网站正在维护中" +msgstr "" #: templates/503.html:39 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "该网站目前正在维护中,应该很快就会重新上线!" +msgstr "" #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "索引" +msgstr "" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" -msgstr "订购零件" +msgstr "" #: templates/InvenTree/index.html:52 msgid "Subscribed Categories" -msgstr "已订阅类别" +msgstr "" #: templates/InvenTree/index.html:62 msgid "Latest Parts" -msgstr "最新零件" +msgstr "最近商品" #: templates/InvenTree/index.html:77 msgid "BOM Waiting Validation" -msgstr "等待验证的物料清单" +msgstr "" #: templates/InvenTree/index.html:106 msgid "Recently Updated" -msgstr "最近更新" +msgstr "" #: templates/InvenTree/index.html:134 msgid "Depleted Stock" -msgstr "库存已耗尽" +msgstr "" #: templates/InvenTree/index.html:148 msgid "Required for Build Orders" -msgstr "生产订单所需" +msgstr "" #: templates/InvenTree/index.html:156 msgid "Expired Stock" -msgstr "过期库存" +msgstr "" #: templates/InvenTree/index.html:172 msgid "Stale Stock" -msgstr "过期库存" +msgstr "" #: templates/InvenTree/index.html:199 msgid "Build Orders In Progress" -msgstr "进行中的生产订单" +msgstr "" #: templates/InvenTree/index.html:210 msgid "Overdue Build Orders" -msgstr "逾期的生产订单" +msgstr "" #: templates/InvenTree/index.html:230 msgid "Outstanding Purchase Orders" -msgstr "未完成的采购订单" +msgstr "" #: templates/InvenTree/index.html:241 msgid "Overdue Purchase Orders" -msgstr "逾期采购订单" +msgstr "" #: templates/InvenTree/index.html:262 msgid "Outstanding Sales Orders" -msgstr "未完成的销售订单" +msgstr "" #: templates/InvenTree/index.html:273 msgid "Overdue Sales Orders" -msgstr "逾期销售订单" +msgstr "" #: templates/InvenTree/index.html:299 msgid "InvenTree News" -msgstr "InvenTree 新闻" +msgstr "" #: templates/InvenTree/index.html:301 msgid "Current News" -msgstr "当前新闻" +msgstr "" #: templates/InvenTree/notifications/history.html:9 msgid "Notification History" -msgstr "通知历史记录" +msgstr "" #: templates/InvenTree/notifications/history.html:13 #: templates/InvenTree/notifications/history.html:14 #: templates/InvenTree/notifications/notifications.html:75 msgid "Delete Notifications" -msgstr "删除通知" +msgstr "" #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" -msgstr "待定通知" +msgstr "" #: templates/InvenTree/notifications/inbox.html:13 #: templates/InvenTree/notifications/inbox.html:14 msgid "Mark all as read" -msgstr "全部标记为已读" +msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 #: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 msgid "Notifications" -msgstr "通知" +msgstr "" #: templates/InvenTree/notifications/notifications.html:38 msgid "No unread notifications found" -msgstr "未找到未读通知" +msgstr "" #: templates/InvenTree/notifications/notifications.html:58 msgid "No notification history found" -msgstr "未找到通知历史记录" +msgstr "" #: templates/InvenTree/notifications/notifications.html:65 msgid "Delete all read notifications" -msgstr "删除所有已读通知" +msgstr "" #: templates/InvenTree/notifications/notifications.html:89 #: templates/js/translated/notification.js:85 msgid "Delete Notification" -msgstr "删除通知" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" -msgstr "收件箱" +msgstr "" #: templates/InvenTree/notifications/sidebar.html:10 msgid "History" -msgstr "历史" +msgstr "" #: templates/InvenTree/search.html:8 msgid "Search Results" -msgstr "搜索结果" +msgstr "" #: templates/InvenTree/settings/barcode.html:8 msgid "Barcode Settings" @@ -10825,7 +10397,7 @@ msgstr "类别设置" #: templates/InvenTree/settings/global.html:8 msgid "Server Settings" -msgstr "服务器设置" +msgstr "" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 @@ -10834,20 +10406,20 @@ msgstr "标签设置" #: templates/InvenTree/settings/login.html:8 msgid "Login Settings" -msgstr "登录设置" +msgstr "" #: templates/InvenTree/settings/login.html:15 msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "尚未配置发送电子邮件。某些登录和注册功能可能无法正常工作!" +msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "注册" +msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" -msgstr "单点登录" +msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 @@ -10856,179 +10428,185 @@ msgstr "设置" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "网址" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "此插件的基本网址是 %(base)s。" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" -msgstr "网址" +msgstr "URL" #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "在新标签页中打开" +msgstr "" #: templates/InvenTree/settings/notifications.html:9 #: templates/InvenTree/settings/user_notifications.html:9 msgid "Notification Settings" -msgstr "通知设置" +msgstr "" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" -msgstr "别名" +msgstr "" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" -msgstr "零件设置" +msgstr "商品设置" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" -msgstr "零件导入" +msgstr "商品导入" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" -msgstr "导入零件" +msgstr "导入商品" #: templates/InvenTree/settings/part_parameters.html:20 msgid "Part Parameter Templates" -msgstr "零件参数模板" +msgstr "商品参数模板" #: templates/InvenTree/settings/part_stocktake.html:7 msgid "Stocktake Settings" -msgstr "盘点设置" +msgstr "" #: templates/InvenTree/settings/part_stocktake.html:25 msgid "Stocktake Reports" -msgstr "盘点报告" +msgstr "" #: templates/InvenTree/settings/physical_units.html:8 #: templates/InvenTree/settings/sidebar.html:35 +#, fuzzy +#| msgid "Invalid value" msgid "Physical Units" -msgstr "物理单位" +msgstr "无效值" #: templates/InvenTree/settings/physical_units.html:12 +#, fuzzy +#| msgid "Contact" msgid "Add Unit" -msgstr "添加单位" +msgstr "联系人" #: templates/InvenTree/settings/plugin.html:9 #: templates/InvenTree/settings/sidebar.html:64 msgid "Plugin Settings" -msgstr "插件设置" +msgstr "" #: templates/InvenTree/settings/plugin.html:15 msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "更改以下设置需要您立即重新启动服务器。在使用过程中不要更改此设置。" +msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:36 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" -msgstr "插件" +msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" -msgstr "安装插件" +msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 #: templates/js/translated/plugin.js:224 +#, fuzzy +#| msgid "Subcategories" msgid "Reload Plugins" -msgstr "重载插件" +msgstr "子类别" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:56 msgid "External plugins are not enabled for this InvenTree installation" -msgstr "此InvenTree安装未启用外部插件" +msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:71 msgid "Plugin Error Stack" -msgstr "插件错误堆栈" +msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:80 msgid "Stage" -msgstr "阶段" +msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:82 #: templates/js/translated/notification.js:76 msgid "Message" -msgstr "信息" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" -msgstr "插件信息" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" -msgstr "未提供版本信息" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:61 msgid "License" -msgstr "许可证" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:70 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "代码信息是从该插件的最新git commit中提取的。它可能不会反映官方版本号或信息,而是反映实际运行的代码。" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:76 msgid "Package information" -msgstr "包装信息" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:82 msgid "Installation method" -msgstr "安装方法" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:85 msgid "This plugin was installed as a package" -msgstr "此插件已作为软件包安装" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:87 msgid "This plugin was found in a local server path" -msgstr "在本地服务器路径中找到此插件" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:93 msgid "Installation path" -msgstr "安装路径" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:496 msgid "Builtin" -msgstr "内置" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:101 msgid "This is a builtin plugin which cannot be disabled" -msgstr "这是一个无法禁用的内置插件" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:500 msgid "Sample" -msgstr "样本" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:108 msgid "This is a sample plugin" -msgstr "这是一个示例插件" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:113 msgid "Commit Author" -msgstr "提交的人" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:117 #: templates/about.html:36 msgid "Commit Date" -msgstr "提交日期" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:121 #: templates/about.html:29 msgid "Commit Hash" -msgstr "提交哈希值" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:125 msgid "Commit Message" -msgstr "提交信息" +msgstr "" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" @@ -11036,38 +10614,44 @@ msgstr "采购订单设置" #: templates/InvenTree/settings/pricing.html:7 msgid "Pricing Settings" -msgstr "定价设置" +msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "汇率" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "立即更新" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "上次更新" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "从不" #: templates/InvenTree/settings/project_codes.html:8 +#, fuzzy +#| msgid "Barcode Settings" msgid "Project Code Settings" -msgstr "项目编码设置" +msgstr "条形码设置" #: templates/InvenTree/settings/project_codes.html:21 #: templates/InvenTree/settings/sidebar.html:33 +#, fuzzy +#| msgid "Part QR Code" msgid "Project Codes" -msgstr "项目编码" +msgstr "商品二维码" #: templates/InvenTree/settings/project_codes.html:25 #: templates/InvenTree/settings/settings_staff_js.html:216 +#, fuzzy +#| msgid "New Parameter" msgid "New Project Code" -msgstr "新项目编码" +msgstr "新建参数" #: templates/InvenTree/settings/report.html:8 #: templates/InvenTree/settings/user_reporting.html:9 @@ -11075,8 +10659,10 @@ msgid "Report Settings" msgstr "报表设置" #: templates/InvenTree/settings/returns.html:7 +#, fuzzy +#| msgid "Build Order Settings" msgid "Return Order Settings" -msgstr "退货订单设置" +msgstr "生产订单设置" #: templates/InvenTree/settings/setting.html:31 msgid "No value set" @@ -11088,117 +10674,143 @@ msgstr "编辑设置" #: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" -msgstr "编辑插件设置" +msgstr "" #: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" -msgstr "编辑通知设置" +msgstr "" #: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" -msgstr "编辑全局设置" +msgstr "" #: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" -msgstr "编辑用户设置" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" -msgstr "汇率" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:424 msgid "Delete" msgstr "删除" #: templates/InvenTree/settings/settings_staff_js.html:95 +#, fuzzy +#| msgid "Edited stock item" msgid "Edit Custom Unit" -msgstr "编辑自定义单位" +msgstr "已编辑库存项" #: templates/InvenTree/settings/settings_staff_js.html:110 +#, fuzzy +#| msgid "Delete Company" msgid "Delete Custom Unit" -msgstr "删除自定义单位" +msgstr "删除该公司" #: templates/InvenTree/settings/settings_staff_js.html:124 +#, fuzzy +#| msgid "New Customer" msgid "New Custom Unit" -msgstr "新建自定义单位" +msgstr "新建客户" #: templates/InvenTree/settings/settings_staff_js.html:140 +#, fuzzy +#| msgid "No parameters found" msgid "No project codes found" -msgstr "未找到项目编码" +msgstr "无指定参数" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2226 msgid "group" -msgstr "组" +msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:175 #: templates/InvenTree/settings/settings_staff_js.html:189 +#, fuzzy +#| msgid "Edit Parameter" msgid "Edit Project Code" -msgstr "编辑项目编码" +msgstr "编辑参数" #: templates/InvenTree/settings/settings_staff_js.html:176 #: templates/InvenTree/settings/settings_staff_js.html:203 +#, fuzzy +#| msgid "Delete Parameter" msgid "Delete Project Code" -msgstr "删除项目编码" +msgstr "删除参数" #: templates/InvenTree/settings/settings_staff_js.html:285 msgid "No category parameter templates found" msgstr "未找到类别参数模板" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "编辑模板" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "删除模板" #: templates/InvenTree/settings/settings_staff_js.html:326 +#, fuzzy +#| msgid "Delete Category Parameter Template" msgid "Edit Category Parameter Template" -msgstr "编辑类别参数模板" +msgstr "删除类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "删除类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "创建类别参数模板" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" -msgstr "创建零件参数模板" +msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 +#, fuzzy +#| msgid "No stock location set" msgid "No stock location types found" -msgstr "未找到库存位置类型" +msgstr "未设置仓储地点" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 +#, fuzzy +#| msgid "Location actions" msgid "Location count" -msgstr "位置计数" +msgstr "仓储地操作" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 +#, fuzzy +#| msgid "Edit location" msgid "Edit Location Type" -msgstr "编辑位置类型" +msgstr "编辑仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 +#, fuzzy +#| msgid "Delete location" msgid "Delete Location type" -msgstr "删除地点类型" +msgstr "删除仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 +#, fuzzy +#| msgid "Delete location" msgid "Delete Location Type" -msgstr "删除地点类型" +msgstr "删除仓储地" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 +#, fuzzy +#| msgid "New Location" msgid "New Location Type" -msgstr "新建位置类型" +msgstr "新建仓储地点" #: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 @@ -11206,19 +10818,21 @@ msgid "User Settings" msgstr "用户设置" #: templates/InvenTree/settings/sidebar.html:9 +#, fuzzy +#| msgid "Account Settings" msgid "Account" -msgstr "账户" +msgstr "帐户设置" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" -msgstr "显示" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "主页" +msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11227,23 +10841,25 @@ msgstr "搜索" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:43 msgid "Reporting" -msgstr "报告" +msgstr "" #: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" -msgstr "全局设置" +msgstr "" #: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 msgid "Server" -msgstr "服务器" +msgstr "" #: templates/InvenTree/settings/sidebar.html:41 +#, fuzzy +#| msgid "Label" msgid "Labels" msgstr "标签" #: templates/InvenTree/settings/sidebar.html:45 msgid "Categories" -msgstr "类别" +msgstr "" #: templates/InvenTree/settings/so.html:7 msgid "Sales Order Settings" @@ -11253,13 +10869,15 @@ msgstr "销售订单设置" msgid "Stock Settings" msgstr "库存设置" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:33 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock Location Types" -msgstr "库存地点类型" +msgstr "仓储地点" #: templates/InvenTree/settings/user.html:13 msgid "Account Settings" -msgstr "账户设置" +msgstr "帐户设置" #: templates/InvenTree/settings/user.html:19 #: templates/account/password_reset_from_key.html:4 @@ -11267,128 +10885,140 @@ msgstr "账户设置" msgid "Change Password" msgstr "更改密码" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "用户名" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "名字" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "姓氏" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" -msgstr "以下电子邮件地址与您的帐户相关联:" +msgstr "" #: templates/InvenTree/settings/user.html:76 msgid "Verified" -msgstr "已验证" +msgstr "" #: templates/InvenTree/settings/user.html:78 msgid "Unverified" -msgstr "未验证" +msgstr "" #: templates/InvenTree/settings/user.html:80 #: templates/js/translated/company.js:957 msgid "Primary" -msgstr "主要的" +msgstr "" #: templates/InvenTree/settings/user.html:86 msgid "Make Primary" -msgstr "设为首选" +msgstr "" #: templates/InvenTree/settings/user.html:87 msgid "Re-send Verification" -msgstr "重新发送验证" +msgstr "" #: templates/InvenTree/settings/user.html:96 msgid "Warning:" -msgstr "警告:" +msgstr "" #: templates/InvenTree/settings/user.html:97 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "您当前没有设置任何电子邮件地址。你真的应该添加一个电子邮件地址,这样你就可以接收通知、重置密码等。" +msgstr "" #: templates/InvenTree/settings/user.html:105 msgid "Add Email Address" -msgstr "添加电子邮件地址" +msgstr "" #: templates/InvenTree/settings/user.html:110 msgid "Add Email" -msgstr "添加电子邮件" +msgstr "" #: templates/InvenTree/settings/user.html:120 msgid "Multifactor" -msgstr "多因素身份验证" +msgstr "" #: templates/InvenTree/settings/user.html:125 msgid "You have these factors available:" -msgstr "您有以下可用因素:" +msgstr "" #: templates/InvenTree/settings/user.html:135 msgid "TOTP" -msgstr "TOTP" +msgstr "" #: templates/InvenTree/settings/user.html:141 msgid "Static" -msgstr "静态的" +msgstr "" #: templates/InvenTree/settings/user.html:150 msgid "Multifactor authentication is not configured for your account" -msgstr "您的帐户未配置多因素身份验证" +msgstr "" #: templates/InvenTree/settings/user.html:157 msgid "Change factors" -msgstr "更改因素" +msgstr "" #: templates/InvenTree/settings/user.html:158 msgid "Setup multifactor" -msgstr "设置多因素" +msgstr "" #: templates/InvenTree/settings/user.html:160 msgid "Remove multifactor" -msgstr "删除多因素" +msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" -msgstr "活跃的会话" +msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" -msgstr "注销活动会话(除了这个会话)" +msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" -msgstr "注销活动会话" +msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" -msgstr "未知" +msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" -msgstr "未知" +msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" -msgstr "IP 地址" +msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" -msgstr "设备" +msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" -msgstr "最后一次活动" +msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" -msgstr "%(time)s 之前 (本会话)" +msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" -msgstr "%(time)s 之前" +msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" -msgstr "您真的要删除所选的电子邮件地址吗?" +msgstr "" #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" -msgstr "显示设置" +msgstr "" #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" @@ -11396,7 +11026,7 @@ msgstr "主题设置" #: templates/InvenTree/settings/user_display.html:39 msgid "Select theme" -msgstr "选择主题" +msgstr "" #: templates/InvenTree/settings/user_display.html:50 msgid "Set Theme" @@ -11408,7 +11038,7 @@ msgstr "语言设置" #: templates/InvenTree/settings/user_display.html:67 msgid "Select language" -msgstr "选择语言" +msgstr "" #: templates/InvenTree/settings/user_display.html:83 #, python-format @@ -11425,19 +11055,19 @@ msgstr "设置语言" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" -msgstr "部分语言尚未翻译完成" +msgstr "" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficient" -msgstr "只显示足够的" +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "and hidden." -msgstr "并隐藏。" +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "Show them too" -msgstr "同时显示" +msgstr "" #: templates/InvenTree/settings/user_display.html:106 msgid "Help the translation efforts!" @@ -11445,11 +11075,11 @@ msgstr "帮助翻译工作!" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "Web应用程序的母语翻译是由社区通过crowdin提供的。欢迎并鼓励捐款。" +msgstr "" #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "InvenTree 翻译项目" +msgstr "" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" @@ -11461,274 +11091,274 @@ msgstr "搜索设置" #: templates/InvenTree/settings/user_sso.html:9 msgid "Single Sign On Accounts" -msgstr "单点登录帐户" +msgstr "" #: templates/InvenTree/settings/user_sso.html:16 msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "您可以使用以下任何第三方帐户登录您的帐户:" +msgstr "" #: templates/InvenTree/settings/user_sso.html:52 msgid "There are no social network accounts connected to this account." -msgstr "没有社交网络帐户连接到此帐户。" +msgstr "" #: templates/InvenTree/settings/user_sso.html:58 +#, fuzzy +#| msgid "Account Settings" msgid "Add SSO Account" -msgstr "添加 SSO 账户" +msgstr "帐户设置" #: templates/InvenTree/settings/user_sso.html:67 msgid "Single Sign On is not enabled for this server" -msgstr "此服务器未启用单点登录" +msgstr "" #: templates/about.html:9 msgid "InvenTree Version" -msgstr "InvenTree 版本" +msgstr "" #: templates/about.html:14 msgid "Development Version" -msgstr "开发版本" +msgstr "" #: templates/about.html:17 msgid "Up to Date" -msgstr "已是最新版本" +msgstr "" #: templates/about.html:19 msgid "Update Available" -msgstr "有可用更新" +msgstr "" #: templates/about.html:43 msgid "Commit Branch" -msgstr "提交分支" +msgstr "" #: templates/about.html:49 msgid "InvenTree Documentation" -msgstr "InvenTree 文档" +msgstr "" #: templates/about.html:54 msgid "API Version" -msgstr "API 版本" +msgstr "" #: templates/about.html:59 msgid "Python Version" -msgstr "Python 版本" +msgstr "" #: templates/about.html:64 msgid "Django Version" -msgstr "Django 版本" +msgstr "" #: templates/about.html:69 msgid "View Code on GitHub" -msgstr "在 GitHub 上查看代码" +msgstr "" #: templates/about.html:74 msgid "Credits" -msgstr "致谢" +msgstr "" #: templates/about.html:79 msgid "Mobile App" -msgstr "手机 App" +msgstr "" #: templates/about.html:84 msgid "Submit Bug Report" -msgstr "提交Bug报告" +msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" -msgstr "复制到剪贴板" +msgstr "" #: templates/about.html:91 msgid "copy version information" -msgstr "复制版本信息" +msgstr "" #: templates/account/base.html:66 templates/navbar.html:17 +#, fuzzy +#| msgid "About InvenTree" msgid "InvenTree logo" -msgstr "InvenTree 徽标" +msgstr "关于 InventTree" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:9 msgid "Confirm Email Address" -msgstr "确认邮件地址" +msgstr "" #: templates/account/email_confirm.html:15 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "请确认%(email)s 是用户 %(user_display)s 的电子邮件地址。" +msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 msgid "Confirm" msgstr "确认" #: templates/account/email_confirm.html:29 #, python-format msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "此电子邮件确认链接已过期或无效。请 发布一个新的电子邮件确认请求 request。" +msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" -msgstr "登录" +msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" -msgstr "还不是用户?" +msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" -msgstr "注册" +msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" -msgstr "忘记密码?" +msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" -msgstr "或用以下方式登录" +msgstr "" #: templates/account/logout.html:5 templates/account/logout.html:8 #: templates/account/logout.html:20 msgid "Sign Out" -msgstr "注销" +msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "确定要退出账户吗?" +msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "返回网站" +msgstr "" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "密码重置" +msgstr "" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "忘记了密码?请在下面输入您的电子邮件地址, 我们将向您发送一封电子邮件, 允许您重置密码。" +msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "重置我的密码" +msgstr "" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "此功能当前已禁用。请联系管理员。" +msgstr "" #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "错误的令牌" +msgstr "" #: templates/account/password_reset_from_key.html:11 #, python-format msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "密码重置链接无效, 可能是因为它已被使用。 请发送一个密码重置reset的请求。" +msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "更改密码" +msgstr "" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." -msgstr "您的密码现在已更改。" +msgstr "" #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "已经有账户了?那么请 登陆。" +msgstr "" #: templates/account/signup.html:28 msgid "Use a SSO-provider for signup" -msgstr "使用SSO提供商注册" +msgstr "" #: templates/account/signup_closed.html:5 #: templates/account/signup_closed.html:8 msgid "Sign Up Closed" -msgstr "注册关闭" +msgstr "" #: templates/account/signup_closed.html:10 msgid "Sign up is currently closed." -msgstr "注册功能目前已禁用。" +msgstr "" #: templates/account/signup_closed.html:15 #: templates/socialaccount/authentication_error.html:19 #: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 msgid "Return to login page" -msgstr "返回登录页面" +msgstr "" #: templates/admin_button.html:8 msgid "View in administration panel" -msgstr "在管理面板中查看" +msgstr "" #: templates/allauth_2fa/authenticate.html:5 msgid "Two-Factor Authentication" -msgstr "双因素身份验证" +msgstr "" #: templates/allauth_2fa/authenticate.html:13 msgid "Authenticate" -msgstr "验证账户" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:6 msgid "Two-Factor Authentication Backup Tokens" -msgstr "双因素身份验证备份令牌" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:17 msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "已生成备份令牌,但出于安全原因,此处未显示。按下面的按钮生成新的。" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:20 msgid "No backup tokens are available. Press the button below to generate some." -msgstr "没有可用的备份令牌。按下面的按钮生成一些。" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:28 msgid "Generate Tokens" -msgstr "生成令牌" +msgstr "" #: templates/allauth_2fa/remove.html:6 msgid "Disable Two-Factor Authentication" -msgstr "禁用双因素身份验证" +msgstr "" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "您确定吗?" +msgstr "" #: templates/allauth_2fa/remove.html:17 msgid "Disable 2FA" -msgstr "禁用二元身份验证" +msgstr "" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "设置双因素身份验证" +msgstr "" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "第一步" +msgstr "" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "用您选择的令牌生成器扫描下面的二维码(例如Google Authenticator)。" - -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "密钥: " +msgstr "" -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "第二步" +msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "输入应用程序生成的令牌:" +msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" -msgstr "验证" +msgstr "" #: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 msgid "Add Link" -msgstr "添加链接" +msgstr "" #: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 msgid "Add Attachment" @@ -11736,27 +11366,27 @@ msgstr "添加附件" #: templates/barcode_data.html:5 msgid "Barcode Identifier" -msgstr "条形码验证器" +msgstr "" #: templates/base.html:103 msgid "Server Restart Required" -msgstr "需要重新启动服务器" +msgstr "" #: templates/base.html:106 msgid "A configuration option has been changed which requires a server restart" -msgstr "配置选项已更改,需要重新启动服务器" +msgstr "" #: templates/base.html:106 templates/base.html:116 msgid "Contact your system administrator for further information" -msgstr "有关详细信息,请与系统管理员联系" +msgstr "" #: templates/base.html:113 msgid "Pending Database Migrations" -msgstr "待处理的数据库迁移" +msgstr "" #: templates/base.html:116 msgid "There are pending database migrations which require attention" -msgstr "有一些待处理的数据库迁移需要注意" +msgstr "" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -11767,155 +11397,161 @@ msgstr "有一些待处理的数据库迁移需要注意" #: templates/email/purchase_order_received.html:9 #: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" -msgstr "点击以下链接查看此订单" +msgstr "" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "以下生产订单需要库存" +msgstr "" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "生产订单 %(build)s - 生产… %(quantity)s x %(part)s" +msgstr "" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "点击以下链接查看此生产订单" +msgstr "" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "以下零件所需库存不足" +msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" -msgstr "所需数量" +msgstr "" #: templates/email/build_order_required_stock.html:38 #: templates/email/low_stock_notification.html:30 msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "您收到此邮件是因为您订阅了此零件的通知 " +msgstr "" #: templates/email/low_stock_notification.html:9 msgid "Click on the following link to view this part" -msgstr "点击以下链接查看此零件" +msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" -msgstr "最小数量" +msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" -msgstr "无响应" +msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" -msgstr "InvenTree服务器没有响应" +msgstr "" #: templates/js/translated/api.js:232 msgid "Error 400: Bad request" -msgstr "错误 400: 无效请求" +msgstr "" #: templates/js/translated/api.js:233 msgid "API request returned error code 400" -msgstr "API请求返回错误代码400" +msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" -msgstr "错误401:未通过身份验证" +msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" -msgstr "未提供身份验证凭据" +msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" -msgstr "错误403:权限被拒绝" +msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" -msgstr "您没有访问此功能所需的权限" +msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" -msgstr "错误404:找不到资源" +msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" -msgstr "在服务器上找不到请求的资源" +msgstr "" #: templates/js/translated/api.js:252 msgid "Error 405: Method Not Allowed" -msgstr "错误405:不允许使用该方法" +msgstr "" #: templates/js/translated/api.js:253 msgid "HTTP method not allowed at URL" -msgstr "URL处不允许使用HTTP方法" +msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" -msgstr "错误408:超时" +msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" -msgstr "向服务器请求数据时连接超时" +msgstr "" #: templates/js/translated/api.js:261 msgid "Error 503: Service Unavailable" -msgstr "错误503:服务不可用" +msgstr "" #: templates/js/translated/api.js:262 +#, fuzzy +#| msgid "Stock item is over-allocated" msgid "The server is currently unavailable" -msgstr "服务器当前不可用" +msgstr "库存物品分配过度!" #: templates/js/translated/api.js:265 msgid "Unhandled Error Code" -msgstr "未处理的错误代码" +msgstr "" #: templates/js/translated/api.js:266 msgid "Error code" -msgstr "错误代码" +msgstr "" #: templates/js/translated/attachment.js:114 msgid "All selected attachments will be deleted" -msgstr "所有选定的附件都将被删除" +msgstr "" #: templates/js/translated/attachment.js:129 msgid "Delete Attachments" -msgstr "删除附件" +msgstr "" #: templates/js/translated/attachment.js:205 +#, fuzzy +#| msgid "Delete parameters" msgid "Delete attachments" -msgstr "删除附件" +msgstr "删除参数" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 +#, fuzzy +#| msgid "Attachments" msgid "Attachment actions" -msgstr "附件操作" +msgstr "附件" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" -msgstr "未找到附件" +msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "编辑附件" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" -msgstr "上传日期" +msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" -msgstr "编辑附件" +msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" -msgstr "删除附件" +msgstr "" #: templates/js/translated/barcode.js:43 msgid "Scan barcode data here using barcode scanner" -msgstr "使用条形码扫描仪在此处扫描条形码数据" +msgstr "" #: templates/js/translated/barcode.js:45 msgid "Enter barcode data" @@ -11923,138 +11559,138 @@ msgstr "输入条形码数据" #: templates/js/translated/barcode.js:59 msgid "Scan barcode using connected webcam" -msgstr "使用连接的网络摄像头扫描条形码" +msgstr "" #: templates/js/translated/barcode.js:138 msgid "Enter optional notes for stock transfer" -msgstr "输入库存转移的可选注释" +msgstr "" #: templates/js/translated/barcode.js:139 msgid "Enter notes" -msgstr "添加备注" +msgstr "" #: templates/js/translated/barcode.js:188 msgid "Server error" -msgstr "服务器错误" +msgstr "" #: templates/js/translated/barcode.js:217 msgid "Unknown response from server" -msgstr "来自服务器的未知响应" +msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" -msgstr "服务器响应无效" +msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" -msgstr "扫描条形码数据" +msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "扫描条形码" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" -msgstr "响应中没有网址" +msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" -msgstr "这将删除关联条形码的链接" +msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" -msgstr "取消链接" +msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" -msgstr "移除库存项" +msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" -msgstr "将库存商品扫描到位置" +msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" -msgstr "扫描库存商品条形码以登记到此位置" +msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" -msgstr "登记" +msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" -msgstr "未提供条形码" +msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" -msgstr "库存项已扫描" +msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" -msgstr "库存项已在此位置" +msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" -msgstr "已添加库存项" +msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" -msgstr "条形码与有效库存项目不匹配" +msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" -msgstr "将库存集装箱扫描到指定位置" +msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" -msgstr "扫描库存集装箱条形码以登记到此位置" +msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" -msgstr "条形码与有效库存位置不匹配" +msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" -msgstr "检查到位置" +msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" -msgstr "条形码与有效位置不匹配" +msgstr "" #: templates/js/translated/bom.js:78 msgid "Create BOM Item" -msgstr "创建物料清单项目" +msgstr "" #: templates/js/translated/bom.js:132 msgid "Display row data" -msgstr "显示行数据" +msgstr "" #: templates/js/translated/bom.js:188 msgid "Row Data" -msgstr "行数据" +msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 #: templates/js/translated/purchase_order.js:797 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" -msgstr "关闭" +msgstr "" #: templates/js/translated/bom.js:306 msgid "Download BOM Template" -msgstr "下载物料清单模板" +msgstr "" #: templates/js/translated/bom.js:351 msgid "Multi Level BOM" -msgstr "多级物料清单" +msgstr "" #: templates/js/translated/bom.js:352 msgid "Include BOM data for subassemblies" -msgstr "包括子装配体物料清单数据" +msgstr "" #: templates/js/translated/bom.js:357 msgid "Levels" @@ -12062,15 +11698,15 @@ msgstr "等级" #: templates/js/translated/bom.js:358 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "选择要导出的物料清单的最大级别 (0 = 所有级别)" +msgstr "" #: templates/js/translated/bom.js:365 msgid "Include Alternative Parts" -msgstr "包含替代零件" +msgstr "" #: templates/js/translated/bom.js:366 msgid "Include alternative parts in exported BOM" -msgstr "在导出的物料清单中包含替代零件" +msgstr "" #: templates/js/translated/bom.js:371 msgid "Include Parameter Data" @@ -12078,7 +11714,7 @@ msgstr "包含参数数据" #: templates/js/translated/bom.js:372 msgid "Include part parameter data in exported BOM" -msgstr "在导出的物料清单中包含零件参数" +msgstr "" #: templates/js/translated/bom.js:377 msgid "Include Stock Data" @@ -12086,7 +11722,7 @@ msgstr "包括库存数据" #: templates/js/translated/bom.js:378 msgid "Include part stock data in exported BOM" -msgstr "在导出的物料清单中包含零件库存数据" +msgstr "在导出 BOM 中包括库存数据" #: templates/js/translated/bom.js:383 msgid "Include Manufacturer Data" @@ -12094,7 +11730,7 @@ msgstr "包括制造商数据" #: templates/js/translated/bom.js:384 msgid "Include part manufacturer data in exported BOM" -msgstr "在导出的物料清单中包含零件制造商数据" +msgstr "在导出 BOM 中包含制造商数据" #: templates/js/translated/bom.js:389 msgid "Include Supplier Data" @@ -12102,539 +11738,561 @@ msgstr "包含供应商数据" #: templates/js/translated/bom.js:390 msgid "Include part supplier data in exported BOM" -msgstr "在导出的物料清单中包含零件供应商数据" +msgstr "在导出 BOM 中包含供应商数据" #: templates/js/translated/bom.js:395 msgid "Include Pricing Data" -msgstr "包含价格数据" +msgstr "" #: templates/js/translated/bom.js:396 msgid "Include part pricing data in exported BOM" -msgstr "在导出的物料清单中包含零件价格数据" +msgstr "" #: templates/js/translated/bom.js:591 msgid "Remove substitute part" -msgstr "移除替代品零件" +msgstr "" #: templates/js/translated/bom.js:645 msgid "Select and add a new substitute part using the input below" -msgstr "使用下面的输入选择并添加新的替代品零件" +msgstr "" #: templates/js/translated/bom.js:656 msgid "Are you sure you wish to remove this substitute part link?" -msgstr "您确定要删除此替代品零件链接吗?" +msgstr "" #: templates/js/translated/bom.js:662 msgid "Remove Substitute Part" -msgstr "移除替代品零件" +msgstr "" #: templates/js/translated/bom.js:701 msgid "Add Substitute" -msgstr "添加替代品" +msgstr "" #: templates/js/translated/bom.js:702 msgid "Edit BOM Item Substitutes" -msgstr "编辑物料清单项替代品" +msgstr "" #: templates/js/translated/bom.js:764 msgid "All selected BOM items will be deleted" -msgstr "所有选定的物料清单项目都将被删除" +msgstr "" #: templates/js/translated/bom.js:780 msgid "Delete selected BOM items?" -msgstr "删除选中的物料清单项目吗?" +msgstr "" #: templates/js/translated/bom.js:826 +#, fuzzy +#| msgid "Delete parameters" msgid "Delete items" -msgstr "删除项目" +msgstr "删除参数" #: templates/js/translated/bom.js:936 msgid "Load BOM for subassembly" -msgstr "为子组件加载物料清单" +msgstr "" #: templates/js/translated/bom.js:946 msgid "Substitutes Available" -msgstr "替代品可用" +msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" -msgstr "已允许变体库存" +msgstr "" #: templates/js/translated/bom.js:1014 msgid "Substitutes" -msgstr "替代品" +msgstr "" #: templates/js/translated/bom.js:1139 msgid "BOM pricing is complete" -msgstr "物料清单定价已完成" +msgstr "" #: templates/js/translated/bom.js:1144 msgid "BOM pricing is incomplete" -msgstr "物料清单定价未完成" +msgstr "" #: templates/js/translated/bom.js:1151 msgid "No pricing available" -msgstr "无可用价格" +msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" msgid "External stock" -msgstr "外部库存" +msgstr "外部链接" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" -msgstr "无可用库存" +msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" -msgstr "包括变体和替代品库存" +msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" -msgstr "包括变体库存" +msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" -msgstr "包括替代品库存" +msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" -msgstr "消耗品" +msgstr "" #: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" -msgstr "验证物料清单项目" +msgstr "" #: templates/js/translated/bom.js:1287 msgid "This line has been validated" -msgstr "此行已验证" +msgstr "" #: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" -msgstr "编辑替代品零件" +msgstr "" #: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" -msgstr "编辑物料清单项目" +msgstr "" #: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" -msgstr "删除物料清单项目" +msgstr "" #: templates/js/translated/bom.js:1313 msgid "View BOM" -msgstr "查看物料清单" +msgstr "" #: templates/js/translated/bom.js:1397 msgid "No BOM items found" -msgstr "未找到物料清单项目" +msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" -msgstr "必须零件" +msgstr "" #: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" -msgstr "从上级物料清单继承" +msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" -msgstr "编辑生产订单" +msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" -msgstr "创建生产订单" +msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" -msgstr "取消生产订单" +msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" -msgstr "您确定要取消此生成吗?" +msgstr "是否确定取消生产?" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" -msgstr "库存项目已分配到此生产订单" +msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" -msgstr "此生产订单还有未完成的产出" +msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" -msgstr "生产订单已准备好标记为已完成" +msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "由于产出不完整,无法完成此生产订单" +msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "生产订单未完成" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" -msgstr "完成生产订单" +msgstr "生产订单完成" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" -msgstr "下一个可用序列号" +msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" -msgstr "最新序列号" +msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" -msgstr "物料清单包含可跟踪的零件" +msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" -msgstr "必须单独生成生产输出" +msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" -msgstr "可跟踪零件可以指定序列号" +msgstr "可追踪商品可以指定序列号" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "输入序列号来生成多个单一生产输出" +msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" -msgstr "创建生产输出" +msgstr "创建创建生产产出" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" -msgstr "分配库存项到此生产输出" +msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 +#, fuzzy +#| msgid "Manually allocate stock to build" msgid "Deallocate stock from build output" -msgstr "从生产输出中取消分配库存" +msgstr "手动分配存货进行生成" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" -msgstr "完成生产输出" +msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 +#, fuzzy +#| msgid "Build output" msgid "Scrap build output" -msgstr "报废生产输出" +msgstr "生产产出" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" -msgstr "删除生产输出" +msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 +#, fuzzy +#| msgid "Are you sure you wish to cancel this build?" msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "您确定要取消分配此版本中选定的库存项目吗?" +msgstr "是否确定取消生产?" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 +#, fuzzy +#| msgid "Select Stock Items" msgid "Deallocate Stock Items" -msgstr "取消分配库存项目" +msgstr "选择库存项" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" -msgstr "选择生产输出" +msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" -msgstr "必须选择至少一个生产输出" +msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 +#, fuzzy +#| msgid "Delete any build outputs which have not been completed" msgid "Selected build outputs will be marked as complete" -msgstr "选择的生产输出将被标记为完成" +msgstr "删除所有未完成的生产产出" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" -msgstr "输出" +msgstr "" #: templates/js/translated/build.js:630 msgid "Complete Build Outputs" -msgstr "完成生产输出" +msgstr "" #: templates/js/translated/build.js:727 +#, fuzzy +#| msgid "Delete any build outputs which have not been completed" msgid "Selected build outputs will be marked as scrapped" -msgstr "选择的生产输出将被标记为已报废" +msgstr "删除所有未完成的生产产出" #: templates/js/translated/build.js:729 +#, fuzzy +#| msgid "Delete any build outputs which have not been completed" msgid "Scrapped output are marked as rejected" -msgstr "报废的输出被标记为拒收" +msgstr "删除所有未完成的生产产出" #: templates/js/translated/build.js:730 +#, fuzzy +#| msgid "Stock item is over-allocated" msgid "Allocated stock items will no longer be available" -msgstr "已分配的库存物品将不再可用" +msgstr "库存物品分配过度!" #: templates/js/translated/build.js:731 msgid "The completion status of the build order will not be adjusted" -msgstr "生产订单的完成状态将不会调整" +msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 +#, fuzzy +#| msgid "Create Build Output" msgid "Scrap Build Outputs" -msgstr "报废生产输出" +msgstr "创建创建生产产出" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" msgid "Selected build outputs will be deleted" -msgstr "选定的生产输出将被删除" +msgstr "删除所有选定的供应商商品" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 +#, fuzzy +#| msgid "Build output is already completed" msgid "Build output data will be permanently deleted" -msgstr "生产输出数据将被永久删除" +msgstr "生产产出已完成" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" msgid "Allocated stock items will be returned to stock" -msgstr "已分配的库存物品将退回库存" +msgstr "删除所有选定的供应商商品" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" -msgstr "删除生产输出" - -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "删除分配" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "删除库存分配" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "未分配库存" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "库存项" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "编辑库存分配" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "删除构建分配" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "编辑构建分配" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" -msgstr "删除构建分配" +msgstr "" -#: templates/js/translated/build.js:1133 +#: templates/js/translated/build.js:960 msgid "No build order allocations found" -msgstr "未找到生产订单分配" +msgstr "" + +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#, fuzzy +#| msgid "Allocated Parts" +msgid "Allocated Quantity" +msgstr "已分配的部件" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" -msgstr "未指定位置" +msgstr "未指定仓储地点" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "已完成输出" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 +#, fuzzy +#| msgid "Complete outputs" msgid "Scrap outputs" -msgstr "报废输出" +msgstr "已完成输出" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "删除输出" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 +#, fuzzy +#| msgid "Build output" msgid "build output" -msgstr "生产输出" +msgstr "生产产出" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 +#, fuzzy +#| msgid "Build output" msgid "build outputs" -msgstr "生产输出" +msgstr "生产产出" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 +#, fuzzy +#| msgid "Build actions" msgid "Build output actions" -msgstr "生产输出操作" +msgstr "生产操作" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1294 msgid "No active build outputs found" -msgstr "未找到激活的生产输出" +msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1387 +#, fuzzy +#| msgid "Allocated Parts" msgid "Allocated Lines" -msgstr "已分配行" +msgstr "已分配的部件" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1401 msgid "Required Tests" -msgstr "需要的测试" +msgstr "" -#: templates/js/translated/build.js:1749 +#: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" -msgstr "选择零件" +msgstr "选择商品" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" -msgstr "您必须选择至少一个要分配的零件" +msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" -msgstr "指定库存分配数量" +msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1714 msgid "All Parts Allocated" -msgstr "所有零件已分配" +msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" -msgstr "所有选定的零件均已完全分配" +msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" -msgstr "选择源位置 (留空以从所有位置取出)" +msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" -msgstr "分配库存项目给生产订单" +msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" -msgstr "没有匹配的库存位置" +msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" -msgstr "没有匹配的库存项" +msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" -msgstr "自动库存分配" +msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "根据提供的指导方针,库存物品将自动分配给此生产订单" +msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" -msgstr "如果指定了位置,则仅从该位置分配库存" +msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "如果认为库存可以互换,则将从找到的第一个位置进行分配" +msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "如果允许使用替代品,则将在找不到主要零件库存的情况下使用" +msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" -msgstr "分配库存物品" +msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2080 msgid "No builds matching query" -msgstr "没有与查询匹配的构建" +msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 msgid "Select" -msgstr "选择" +msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2129 msgid "Build order is overdue" -msgstr "生产订单已逾期" +msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" -msgstr "编辑库存分配" +msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" -msgstr "删除库存分配" +msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2403 msgid "Edit Allocation" -msgstr "编辑分配" +msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2415 msgid "Remove Allocation" -msgstr "删除分配" +msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2456 +#, fuzzy +#| msgid "Build actions" msgid "build line" -msgstr "生产行" +msgstr "生产操作" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2457 +#, fuzzy +#| msgid "Build actions" msgid "build lines" -msgstr "生产行" +msgstr "生产操作" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2475 +#, fuzzy +#| msgid "Subcategories" msgid "No build lines found" -msgstr "未找到生产行" +msgstr "子类别" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" -msgstr "可追踪零件" +msgstr "可追溯商品" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "获取已继承的" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2540 +#, fuzzy +#| msgid "Quantity" msgid "Unit Quantity" -msgstr "单位数量" +msgstr "数量" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" -msgstr "充足的库存" +msgstr "" -#: templates/js/translated/build.js:2837 +#: templates/js/translated/build.js:2647 +#, fuzzy +#| msgid "Minimum Stock" msgid "Consumable Item" -msgstr "消耗品" +msgstr "最低库存" -#: templates/js/translated/build.js:2844 +#: templates/js/translated/build.js:2652 +#, fuzzy +#| msgid "Stock Item" msgid "Tracked item" -msgstr "跟踪项目" - -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" -msgstr "根据单个构建输出分配跟踪项目" +msgstr "库存项" -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" -msgstr "生产库存" +msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 msgid "Order stock" -msgstr "订单库存" +msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" -msgstr "分配库存" +msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2672 +#, fuzzy +#| msgid "Confirm stock allocation" msgid "Remove stock allocation" -msgstr "移除库存分配" +msgstr "确认库存分配" #: templates/js/translated/company.js:98 msgid "Add Manufacturer" @@ -12643,11 +12301,11 @@ msgstr "添加制造商" #: templates/js/translated/company.js:111 #: templates/js/translated/company.js:213 msgid "Add Manufacturer Part" -msgstr "添加制造商零件" +msgstr "添加制造商商品" #: templates/js/translated/company.js:132 msgid "Edit Manufacturer Part" -msgstr "编辑制造商零件" +msgstr "编辑制造商商品" #: templates/js/translated/company.js:201 #: templates/js/translated/purchase_order.js:93 @@ -12657,2292 +12315,2455 @@ msgstr "添加供应商" #: templates/js/translated/company.js:243 #: templates/js/translated/purchase_order.js:318 msgid "Add Supplier Part" -msgstr "添加供应商零件" +msgstr "添加供应商商品" #: templates/js/translated/company.js:344 msgid "All selected supplier parts will be deleted" -msgstr "所有选中的供应商零件将被删除" +msgstr "删除所有选定的供应商商品" #: templates/js/translated/company.js:360 msgid "Delete Supplier Parts" -msgstr "删除供应商零件" +msgstr "" #: templates/js/translated/company.js:466 msgid "Add new Company" -msgstr "添加新公司" +msgstr "增加新的公司信息" #: templates/js/translated/company.js:546 msgid "Parts Supplied" -msgstr "零件已提供" +msgstr "" #: templates/js/translated/company.js:555 msgid "Parts Manufactured" -msgstr "零件已制造" +msgstr "" #: templates/js/translated/company.js:570 msgid "No company information found" msgstr "未找到该公司信息" #: templates/js/translated/company.js:619 +#, fuzzy +#| msgid "Create new part" msgid "Create New Contact" -msgstr "创建新的联系人" +msgstr "新建商品" #: templates/js/translated/company.js:635 #: templates/js/translated/company.js:758 +#, fuzzy +#| msgid "Contact" msgid "Edit Contact" -msgstr "编辑联系人" +msgstr "联系人" #: templates/js/translated/company.js:672 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" msgid "All selected contacts will be deleted" -msgstr "所有选定的联系人都将被删除" +msgstr "删除所有选定的供应商商品" #: templates/js/translated/company.js:678 #: templates/js/translated/company.js:742 msgid "Role" -msgstr "职位" +msgstr "" #: templates/js/translated/company.js:686 +#, fuzzy +#| msgid "Delete outputs" msgid "Delete Contacts" -msgstr "删除联系人" +msgstr "删除输出" #: templates/js/translated/company.js:717 +#, fuzzy +#| msgid "No matching action found" msgid "No contacts found" -msgstr "未找到联系人" +msgstr "未找到指定操作" #: templates/js/translated/company.js:730 +#, fuzzy +#| msgid "Phone number" msgid "Phone Number" msgstr "电话号码" #: templates/js/translated/company.js:736 +#, fuzzy +#| msgid "Address" msgid "Email Address" -msgstr "电子邮件地址" +msgstr "地址" #: templates/js/translated/company.js:762 +#, fuzzy +#| msgid "Delete part" msgid "Delete Contact" -msgstr "删除联系人" +msgstr "删除商品" #: templates/js/translated/company.js:859 +#, fuzzy +#| msgid "Create new part" msgid "Create New Address" -msgstr "创建新地址" +msgstr "新建商品" #: templates/js/translated/company.js:874 #: templates/js/translated/company.js:1035 +#, fuzzy +#| msgid "Address" msgid "Edit Address" -msgstr "编辑地址" +msgstr "地址" #: templates/js/translated/company.js:909 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" msgid "All selected addresses will be deleted" -msgstr "所有选中的地址将被删除" +msgstr "删除所有选定的供应商商品" #: templates/js/translated/company.js:923 +#, fuzzy +#| msgid "Delete parameters" msgid "Delete Addresses" -msgstr "删除地址" +msgstr "删除参数" #: templates/js/translated/company.js:950 +#, fuzzy +#| msgid "No parameters found" msgid "No addresses found" -msgstr "未找到地址" +msgstr "无指定参数" #: templates/js/translated/company.js:989 +#, fuzzy +#| msgid "Install into" msgid "Postal city" -msgstr "邮政编码" +msgstr "安装到" #: templates/js/translated/company.js:995 msgid "State/province" -msgstr "省/市/自治区" +msgstr "" #: templates/js/translated/company.js:1007 msgid "Courier notes" -msgstr "快递单" +msgstr "" #: templates/js/translated/company.js:1013 +#, fuzzy +#| msgid "Internal Prices" msgid "Internal notes" -msgstr "内部备注" +msgstr "内部价格" #: templates/js/translated/company.js:1039 +#, fuzzy +#| msgid "Delete parts" msgid "Delete Address" -msgstr "删除地址" +msgstr "删除商品" #: templates/js/translated/company.js:1112 msgid "All selected manufacturer parts will be deleted" -msgstr "所有选定的制造商零件都将被删除" +msgstr "" #: templates/js/translated/company.js:1127 msgid "Delete Manufacturer Parts" -msgstr "删除制造商零件" +msgstr "删除制造商商品" #: templates/js/translated/company.js:1161 msgid "All selected parameters will be deleted" -msgstr "所有选定的参数都将被删除" +msgstr "" #: templates/js/translated/company.js:1175 msgid "Delete Parameters" msgstr "删除参数" #: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 msgid "Order parts" -msgstr "订购零件" +msgstr "订购商品" #: templates/js/translated/company.js:1208 msgid "Delete manufacturer parts" -msgstr "删除制造商零件" +msgstr "删除制造商商品" #: templates/js/translated/company.js:1240 +#, fuzzy +#| msgid "Manufacturer part description" msgid "Manufacturer part actions" -msgstr "制造商零件操作" +msgstr "制造商商品描述" #: templates/js/translated/company.js:1259 msgid "No manufacturer parts found" -msgstr "未找到制造商零件" +msgstr "" #: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" -msgstr "模板零件" +msgstr "" #: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" -msgstr "装配零件" +msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 msgid "No parameters found" -msgstr "未找到参数" +msgstr "无指定参数" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "删除参数" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "删除参数" #: templates/js/translated/company.js:1496 msgid "Delete supplier parts" -msgstr "删除供应商零件" +msgstr "删除供应商商品" #: templates/js/translated/company.js:1546 msgid "No supplier parts found" -msgstr "未找到供应商零件" +msgstr "未找到供应商商品" #: templates/js/translated/company.js:1664 +#, fuzzy +#| msgid "Units" msgid "Base Units" -msgstr "基础单位" +msgstr "单位" #: templates/js/translated/company.js:1694 msgid "Availability" -msgstr "可用性" +msgstr "" #: templates/js/translated/company.js:1725 msgid "Edit supplier part" -msgstr "编辑供应商零件" +msgstr "编辑供应商商品" #: templates/js/translated/company.js:1726 msgid "Delete supplier part" -msgstr "删除供应商零件" +msgstr "删除供应商商品" #: templates/js/translated/company.js:1779 #: templates/js/translated/pricing.js:694 msgid "Delete Price Break" -msgstr "删除批发价" +msgstr "" #: templates/js/translated/company.js:1789 #: templates/js/translated/pricing.js:712 msgid "Edit Price Break" -msgstr "编辑批发价" +msgstr "" #: templates/js/translated/company.js:1804 msgid "No price break information found" -msgstr "找不到批发价信息" +msgstr "" #: templates/js/translated/company.js:1833 msgid "Last updated" -msgstr "最近更新" +msgstr "" #: templates/js/translated/company.js:1840 msgid "Edit price break" -msgstr "编辑批发价" +msgstr "" #: templates/js/translated/company.js:1841 msgid "Delete price break" -msgstr "删除批发价" +msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" -msgstr "真" +msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" -msgstr "假" +msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" -msgstr "选择筛选器" +msgstr "选择筛选项" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "打印标签" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 +#, fuzzy +#| msgid "Print Order Reports" msgid "Print Reports" -msgstr "打印报告" +msgstr "打印订单报表" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 +#, fuzzy +#| msgid "Download Image" msgid "Download table data" -msgstr "下载表格数据" +msgstr "下载图片" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" -msgstr "重新加载表格数据" +msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" -msgstr "添加新筛选器" +msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" -msgstr "清除所有筛选条件" +msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" -msgstr "创建筛选条件" +msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" -msgstr "禁止操作" +msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:380 msgid "Create operation not allowed" -msgstr "不允许创建操作" +msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:395 msgid "Update operation not allowed" -msgstr "不允许更新操作" +msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:409 msgid "Delete operation not allowed" -msgstr "不允许删除操作" +msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:423 msgid "View operation not allowed" -msgstr "不允许查看操作" +msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:800 msgid "Keep this form open" -msgstr "保持此表单打开" +msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:903 msgid "Enter a valid number" -msgstr "输入有效数字" +msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" -msgstr "存在表单错误" +msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1971 msgid "No results found" -msgstr "未找到结果" +msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" -msgstr "搜索中" +msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2489 msgid "Clear input" -msgstr "清空输入" +msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "File Column" -msgstr "文件列" +msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3091 msgid "Field Name" -msgstr "字段名称" +msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3103 msgid "Select Columns" -msgstr "选择列" +msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" -msgstr "是" +msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" -msgstr "否" +msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" -msgstr "真" +msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" -msgstr "假" +msgstr "" #: templates/js/translated/index.js:104 +#, fuzzy +#| msgid "Stock required for build order" msgid "No parts required for builds" -msgstr "生产时无需零件" +msgstr "生产订单所需的库存" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#, fuzzy +#| msgid "Select Stock Items" msgid "Select Items" -msgstr "选择项目" +msgstr "选择库存项" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 +#, fuzzy +#| msgid "Stock item(s) must be selected before printing labels" msgid "No items selected for printing" -msgstr "未选择要打印的项目" +msgstr "打印标签前必须选择库存项目" + +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "未找到标签" + +#: templates/js/translated/label.js:73 +#, fuzzy +#| msgid "No labels found which match the selected part(s)" +msgid "No label templates found which match the selected items" +msgstr "没有找到与所选商品相匹配的标签" + +#: templates/js/translated/label.js:97 +#, fuzzy +#| msgid "Rejected" +msgid "selected" +msgstr "已拒绝" + +#: templates/js/translated/label.js:133 +#, fuzzy +#| msgid "Print actions" +msgid "Printing Options" +msgstr "打印操作" + +#: templates/js/translated/label.js:148 +#, fuzzy +#| msgid "Print labels" +msgid "Print label" +msgstr "打印标签" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "打印标签" + +#: templates/js/translated/label.js:149 +#, fuzzy +#| msgid "Print Label" +msgid "Print" +msgstr "打印标签" + +#: templates/js/translated/label.js:155 +#, fuzzy +#| msgid "Select Label Template" +msgid "Select label template" +msgstr "选择标签模板" + +#: templates/js/translated/label.js:168 +#, fuzzy +#| msgid "Select supplier" +msgid "Select plugin" +msgstr "选择供应商" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" -msgstr "标签已发送到打印机" +msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "取消" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" -msgstr "提交" +msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" -msgstr "表单标题" +msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." -msgstr "等待服务器..." +msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" -msgstr "显示错误信息" +msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" -msgstr "接受" +msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" -msgstr "正在加载数据" +msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" -msgstr "来自服务器的响应无效" +msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" -msgstr "服务器响应中缺少表单数据" +msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" -msgstr "发布表单数据时出错" +msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" -msgstr "JSON 响应缺少表单数据" +msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" -msgstr "错误 400: 无效请求" +msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" -msgstr "服务器返回错误代码 400" +msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" -msgstr "请求表单数据时出错" +msgstr "" #: templates/js/translated/news.js:33 msgid "No news found" -msgstr "未找到新闻" +msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" -msgstr "ID" +msgstr "" #: templates/js/translated/notification.js:52 msgid "Age" -msgstr "年龄" +msgstr "" #: templates/js/translated/notification.js:65 msgid "Notification" -msgstr "通知" +msgstr "" #: templates/js/translated/notification.js:224 msgid "Mark as unread" -msgstr "标记为未读" +msgstr "" #: templates/js/translated/notification.js:228 msgid "Mark as read" -msgstr "标记为已读" +msgstr "" #: templates/js/translated/notification.js:254 msgid "No unread notifications" -msgstr "无未读通知" +msgstr "" #: templates/js/translated/notification.js:296 templates/notifications.html:12 msgid "Notifications will load here" -msgstr "通知将在此处加载" - -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "挂起订单" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "您确定要挂起此订单吗?" +msgstr "" -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" -msgstr "添加额外行项目" +msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" -msgstr "导出订单" +msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" -msgstr "复制行" +msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" -msgstr "编辑行" +msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" -msgstr "删除行" +msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 msgid "No line items found" -msgstr "没有找到行项目" +msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" -msgstr "复制行" +msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" -msgstr "编辑行" +msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" -msgstr "删除行" +msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" -msgstr "零件属性" +msgstr "商品属性" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" -msgstr "零件创建选项" +msgstr "商品创建选项" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" -msgstr "零件复制选项" +msgstr "商品重复选项" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" -msgstr "增加零件类别" +msgstr "增加商品类别" + +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" -msgstr "图标(可选) - 浏览所有可用图标" +msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" -msgstr "创建零件类别" +msgstr "创建商品类别" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 +#, fuzzy +#| msgid "Create new part category" msgid "Create new category after this one" -msgstr "在此类别之后创建新类别" +msgstr "新建商品类别" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 +#, fuzzy +#| msgid "Part category" msgid "Part category created" -msgstr "零件类别已创建" +msgstr "商品类别" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" -msgstr "编辑零件类别" +msgstr "编辑商品类别" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" -msgstr "您确定要删除此零件类别吗?" +msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" -msgstr "移动到父类别" +msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" -msgstr "删除零件类别" +msgstr "删除商品类别" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" -msgstr "对此类别中零件的操作" +msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" -msgstr "针对子类别采取的操作" +msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "创建零件" +msgstr "创建商品" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "在此零件之后创建另一个零件" +msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "零件创建成功" +msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "编辑零件" +msgstr "编辑商品" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "已编辑零件" +msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" -msgstr "创建零件变体" +msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" -msgstr "激活的零件" +msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" -msgstr "无法删除零件,因为它当前处于活动状态" +msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" -msgstr "删除此零件无法撤销" +msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" -msgstr "此零件的任何库存项目都将被删除" +msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" -msgstr "此零件将从任何物料清单中删除" +msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "此零件的所有制造商和供应商信息都将被删除" +msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" -msgstr "删除零件" +msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" -msgstr "您已订阅此项目的通知" +msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" -msgstr "您已订阅此项目的通知" +msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" -msgstr "订阅此项目的通知" +msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" -msgstr "您已取消订阅此项目的通知" +msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" -msgstr "验证物料清单将标记每个行项目为有效" +msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" -msgstr "验证物料清单" +msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" -msgstr "已验证物料清单" +msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" -msgstr "复制物料清单" +msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 msgid "Low stock" -msgstr "低库存" +msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" -msgstr "无可用库存" +msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" -msgstr "需求" +msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" -msgstr "单位" +msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" -msgstr "虚拟零件" +msgstr "虚拟商品" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" -msgstr "订阅的零件" +msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" -msgstr "可销售的零件" +msgstr "可销售商品" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." -msgstr "计划生成新的盘点报告。" +msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." -msgstr "一旦完成,盘点报告将可供下载。" +msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" -msgstr "生成盘点报告" +msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" -msgstr "计划盘点报告" +msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" -msgstr "没有可用的盘点信息" +msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" -msgstr "编辑盘点条目" +msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" -msgstr "删除盘点条目" +msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" -msgstr "未找到变体" +msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" -msgstr "未找到零件参数模板" +msgstr "未找到商品参数模板" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" -msgstr "编辑零件参数模板" +msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" -msgstr "引用此模板的任何参数也将被删除" +msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" -msgstr "删除零件参数模板" +msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 msgid "No purchase orders found" -msgstr "未发现采购订单" +msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" -msgstr "此行项目已逾期" +msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" -msgstr "收到行项目" +msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" -msgstr "删除零件关系" +msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" -msgstr "删除零件关系" +msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" -msgstr "找不到零件" +msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" -msgstr "为所选零件设置零件类别" +msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" -msgstr "设置零件类别" +msgstr "设置商品类别" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "设置类别" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 +#, fuzzy +#| msgid "Edit part" msgid "part" -msgstr "零件" +msgstr "编辑商品" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 +#, fuzzy +#| msgid "Parts" msgid "parts" -msgstr "零件" +msgstr "商品" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" -msgstr "无类别" +msgstr "没有分类" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 msgid "Display as list" -msgstr "按列表显示" +msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" -msgstr "按网格显示" +msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 +#, fuzzy +#| msgid "Subcategories" msgid "No subcategories found" -msgstr "未找到子类别" +msgstr "子类别" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 msgid "Display as tree" -msgstr "树状显示" +msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" -msgstr "加载子类别" +msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" -msgstr "已订阅类别" +msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" -msgstr "没有与查询匹配的测试模板" +msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" -msgstr "结果" +msgstr "" -#: templates/js/translated/part.js:2955 -msgid "Edit test template" -msgstr "编辑测试模板" +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" +msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" -msgstr "删除测试模板" +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" +msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" -msgstr "此测试是为父零件定义的" +msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" -msgstr "编辑测试结果模板" +msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" -msgstr "删除测试结果模板" +msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" -msgstr "无指定日期" +msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" -msgstr "指定日期已过" +msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3059 msgid "Speculative" -msgstr "可指定的" +msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" -msgstr "此零件没有可用的计划信息" +msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" -msgstr "获取此零件的计划信息时出错" +msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" -msgstr "计划库存量" +msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" -msgstr "最大数量" +msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" -msgstr "最低库存水平" +msgstr "" #: templates/js/translated/plugin.js:46 +#, fuzzy +#| msgid "Subcategories" msgid "No plugins found" -msgstr "未发现插件" +msgstr "子类别" #: templates/js/translated/plugin.js:58 +#, fuzzy +#| msgid "Print actions" msgid "This plugin is no longer installed" -msgstr "此插件已不再安装" +msgstr "打印操作" #: templates/js/translated/plugin.js:60 msgid "This plugin is active" -msgstr "此插件处于活动状态" +msgstr "" #: templates/js/translated/plugin.js:62 +#, fuzzy +#| msgid "Print actions" msgid "This plugin is installed but not active" -msgstr "此插件已安装但未处于活动状态" +msgstr "打印操作" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "禁用插件" +msgstr "" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 +#, fuzzy +#| msgid "Enabled" msgid "Enable Plugin" -msgstr "启用插件" +msgstr "已启用" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "插件已安装" +msgstr "" #: templates/js/translated/plugin.js:177 +#, fuzzy +#| msgid "Are you sure you want to delete this stock location?" msgid "Are you sure you want to enable this plugin?" -msgstr "您确定要启用此插件吗?" +msgstr "确实要删除此仓储地点吗?" #: templates/js/translated/plugin.js:181 +#, fuzzy +#| msgid "Are you sure you want to delete this stock location?" msgid "Are you sure you want to disable this plugin?" -msgstr "您确定要禁用此插件吗?" +msgstr "确实要删除此仓储地点吗?" #: templates/js/translated/plugin.js:189 +#, fuzzy +#| msgid "Enabled" msgid "Enable" -msgstr "启用" +msgstr "已启用" #: templates/js/translated/plugin.js:189 +#, fuzzy +#| msgid "Available" msgid "Disable" -msgstr "禁用" +msgstr "空闲" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "插件已更新" +msgstr "" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" -msgstr "获取货币数据出错" +msgstr "" #: templates/js/translated/pricing.js:321 msgid "No BOM data available" -msgstr "没有可用的物料清单数据" +msgstr "" #: templates/js/translated/pricing.js:463 msgid "No supplier pricing data available" -msgstr "没有可用的供应商价格" +msgstr "" #: templates/js/translated/pricing.js:572 msgid "No price break data available" -msgstr "没有可用的批发价数据" +msgstr "" #: templates/js/translated/pricing.js:755 msgid "No purchase history data available" -msgstr "没有可用的购买历史数据" +msgstr "" #: templates/js/translated/pricing.js:791 msgid "Purchase Price History" -msgstr "购买价格历史记录" +msgstr "" #: templates/js/translated/pricing.js:894 msgid "No sales history data available" -msgstr "无可用销售历史数据" +msgstr "" #: templates/js/translated/pricing.js:916 msgid "Sale Price History" -msgstr "售出价格历史记录" +msgstr "" #: templates/js/translated/pricing.js:1005 msgid "No variant data available" -msgstr "无可用的变体数据" +msgstr "" #: templates/js/translated/pricing.js:1045 msgid "Variant Part" -msgstr "变体零件" +msgstr "" #: templates/js/translated/purchase_order.js:169 msgid "Select purchase order to duplicate" -msgstr "选择要复制的采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:176 msgid "Duplicate Line Items" -msgstr "复制行项目" +msgstr "" #: templates/js/translated/purchase_order.js:177 msgid "Duplicate all line items from the selected order" -msgstr "复制所选订单中的所有行项目" +msgstr "" #: templates/js/translated/purchase_order.js:184 msgid "Duplicate Extra Lines" -msgstr "复制额外行" +msgstr "" #: templates/js/translated/purchase_order.js:185 msgid "Duplicate extra line items from the selected order" -msgstr "从所选订单中复制额外的行项目" +msgstr "" #: templates/js/translated/purchase_order.js:206 msgid "Edit Purchase Order" -msgstr "编辑采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:223 msgid "Duplication Options" -msgstr "复制选项" +msgstr "" #: templates/js/translated/purchase_order.js:431 msgid "Complete Purchase Order" -msgstr "完成采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" -msgstr "标记该订单为已完成?" +msgstr "" #: templates/js/translated/purchase_order.js:454 msgid "All line items have been received" -msgstr "已收到所有行项目" +msgstr "" #: templates/js/translated/purchase_order.js:459 msgid "This order has line items which have not been marked as received." -msgstr "此订单中有未标记为已收到的行项目。" +msgstr "" #: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "完成此订单意味着订单和行项目将不再可编辑。" +msgstr "" #: templates/js/translated/purchase_order.js:483 msgid "Cancel Purchase Order" -msgstr "取消采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:488 msgid "Are you sure you wish to cancel this purchase order?" -msgstr "您确定要取消此采购订单吗?" +msgstr "" #: templates/js/translated/purchase_order.js:494 msgid "This purchase order can not be cancelled" -msgstr "此采购订单不能取消" +msgstr "" #: templates/js/translated/purchase_order.js:515 #: templates/js/translated/return_order.js:164 msgid "After placing this order, line items will no longer be editable." -msgstr "下此订单后,行项目将不再可编辑。" +msgstr "" #: templates/js/translated/purchase_order.js:520 msgid "Issue Purchase Order" -msgstr "发布采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:612 msgid "At least one purchaseable part must be selected" -msgstr "必须至少选择一个可购买的零件" +msgstr "" #: templates/js/translated/purchase_order.js:637 msgid "Quantity to order" -msgstr "订购数量" +msgstr "" #: templates/js/translated/purchase_order.js:646 msgid "New supplier part" -msgstr "新建供应商零件" +msgstr "" #: templates/js/translated/purchase_order.js:664 msgid "New purchase order" -msgstr "新建采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:705 msgid "Add to purchase order" -msgstr "添加到采购订单中" +msgstr "" #: templates/js/translated/purchase_order.js:755 msgid "Merge" -msgstr "合并" +msgstr "" #: templates/js/translated/purchase_order.js:859 msgid "No matching supplier parts" -msgstr "没有匹配的供应商零件" +msgstr "" #: templates/js/translated/purchase_order.js:878 msgid "No matching purchase orders" -msgstr "没有匹配的采购订单" +msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/return_order.js:491 msgid "Select Line Items" -msgstr "选择行项目" +msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" -msgstr "必须至少选择一行项目" +msgstr "" #: templates/js/translated/purchase_order.js:1104 msgid "Received Quantity" -msgstr "接收数量" +msgstr "" #: templates/js/translated/purchase_order.js:1115 msgid "Quantity to receive" -msgstr "待接收数量" - -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "指定进货库存项的包装" +msgstr "" -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" -msgstr "库存状态" +msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1205 +#, fuzzy +#| msgid "Barcode" msgid "Add barcode" -msgstr "添加条形码" +msgstr "条形码" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1206 +#, fuzzy +#| msgid "Remove row" msgid "Remove barcode" -msgstr "移除条形码" +msgstr "移除行" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1209 +#, fuzzy +#| msgid "Edit location" msgid "Specify location" -msgstr "指定位置" +msgstr "编辑仓储地" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" -msgstr "添加批号" - -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "指定包装" +msgstr "" -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" -msgstr "添加序列号" - -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "添加备注" +msgstr "" -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1280 +#, fuzzy +#| msgid "Serial Numbers" msgid "Serials" msgstr "序列号" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1305 msgid "Order Code" msgstr "订单编码" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" -msgstr "接收数量" +msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" -msgstr "确认收到物品" +msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1334 msgid "Receive Purchase Order Items" -msgstr "接收采购订单项目" +msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1402 +#, fuzzy +#| msgid "Scan Barcode" msgid "Scan Item Barcode" -msgstr "扫描商品条形码" +msgstr "扫描条形码" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1403 msgid "Scan barcode on incoming item (must not match any existing stock items)" -msgstr "扫描进货条形码 (必须与任何现有的库存条目不匹配)" +msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1417 +#, fuzzy +#| msgid "Enter barcode data" msgid "Invalid barcode data" -msgstr "条形码数据无效" +msgstr "输入条形码数据" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" -msgstr "订单已逾期" +msgstr "" + +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1844 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" msgid "All selected Line items will be deleted" -msgstr "所有选定的行项目都将被删除" +msgstr "删除所有选定的供应商商品" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1862 +#, fuzzy +#| msgid "Allocate selected items" msgid "Delete selected Line items?" -msgstr "是否删除所选行项目?" +msgstr "分配选定项目" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" -msgstr "复制行项目" +msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" -msgstr "编辑行项目" +msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" -msgstr "删除行项目" +msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" -msgstr "复制行项目" +msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" -msgstr "编辑行项目" +msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" -msgstr "删除行项目" +msgstr "" + +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" -msgstr "打印报告" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" +msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" -msgstr "报告打印成功" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "没有找到报表" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" -msgstr "报告打印失败" +#: templates/js/translated/report.js:141 +#, fuzzy +#| msgid "No labels found which match the selected part(s)" +msgid "No report templates found which match the selected items" +msgstr "没有找到与所选商品相匹配的标签" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 msgid "Add Customer" -msgstr "添加客户" +msgstr "" #: templates/js/translated/return_order.js:134 +#, fuzzy +#| msgid "Create Purchase Order" msgid "Create Return Order" -msgstr "新建退货订单" +msgstr "创建采购订单" #: templates/js/translated/return_order.js:149 msgid "Edit Return Order" -msgstr "编辑退货订单" +msgstr "" #: templates/js/translated/return_order.js:169 msgid "Issue Return Order" -msgstr "发布退货订单" +msgstr "" #: templates/js/translated/return_order.js:186 +#, fuzzy +#| msgid "Are you sure you wish to cancel this build?" msgid "Are you sure you wish to cancel this Return Order?" -msgstr "您确定要取消此退货订单吗?" +msgstr "是否确定取消生产?" #: templates/js/translated/return_order.js:193 +#, fuzzy +#| msgid "Cancel order" msgid "Cancel Return Order" -msgstr "取消退货订单" +msgstr "取消订单" #: templates/js/translated/return_order.js:218 +#, fuzzy +#| msgid "Complete Build Order" msgid "Complete Return Order" -msgstr "完成退货订单" +msgstr "生产订单完成" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 +#, fuzzy +#| msgid "No parameters found" msgid "No return orders found" -msgstr "未找到退货订单" +msgstr "无指定参数" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" -msgstr "无效的客户" +msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" -msgstr "接收退货订单项目" +msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" -msgstr "未找到匹配的行项目" +msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" -msgstr "标记项目为已接收" +msgstr "" #: templates/js/translated/sales_order.js:161 msgid "Create Sales Order" -msgstr "创建销售订单" +msgstr "" #: templates/js/translated/sales_order.js:176 msgid "Edit Sales Order" -msgstr "编辑销售订单" +msgstr "" #: templates/js/translated/sales_order.js:291 msgid "No stock items have been allocated to this shipment" -msgstr "此装运未分配任何库存物品" +msgstr "" #: templates/js/translated/sales_order.js:296 msgid "The following stock items will be shipped" -msgstr "以下库存商品将发货" +msgstr "" #: templates/js/translated/sales_order.js:336 msgid "Complete Shipment" -msgstr "完成配送" +msgstr "" #: templates/js/translated/sales_order.js:360 msgid "Confirm Shipment" -msgstr "确认配送" +msgstr "" #: templates/js/translated/sales_order.js:416 msgid "No pending shipments found" -msgstr "未找到待处理的货物" +msgstr "" #: templates/js/translated/sales_order.js:420 msgid "No stock items have been allocated to pending shipments" -msgstr "未将库存项目分配给待处理的发货" +msgstr "" #: templates/js/translated/sales_order.js:430 msgid "Complete Shipments" -msgstr "完成配送" +msgstr "" #: templates/js/translated/sales_order.js:452 msgid "Skip" -msgstr "跳过" - -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "发货销售订单" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "发送此订单?" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "订单无法发货,因为发货不完整" +msgstr "" #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." -msgstr "此订单有未完成的行项目。" - -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "运送此订单意味着订单和行项目将不再可编辑。" +msgstr "" -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 +#, fuzzy +#| msgid "New Sales Order" msgid "Issue this Sales Order?" -msgstr "发出此销售订单?" +msgstr "新建销售订单" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 +#, fuzzy +#| msgid "New Sales Order" msgid "Issue Sales Order" -msgstr "发出销售订单" +msgstr "新建销售订单" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" -msgstr "取消销售订单" +msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." -msgstr "取消此订单意味着订单将不再可编辑。" +msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" -msgstr "创建新的配送" +msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" -msgstr "未找到销售订单" +msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" -msgstr "编辑配送" +msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" -msgstr "完成配送" +msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" -msgstr "删除配送" +msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" -msgstr "编辑配送" +msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" -msgstr "删除配送" +msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" -msgstr "未找到匹配的货物" +msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" -msgstr "配送参考" +msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" -msgstr "未配送" +msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" -msgstr "追踪" +msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" -msgstr "发票" +msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" -msgstr "添加配送" +msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "确认库存分配" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" -msgstr "分配库存项到销售订单" +msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" -msgstr "未找到销售订单分配" +msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" -msgstr "编辑库存分配" +msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "确认删除操作" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" -msgstr "删除库存分配" +msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 msgid "Shipped to customer" -msgstr "已配送到客户" +msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" -msgstr "未指定库存地点" +msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" -msgstr "分配序列号" +msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" -msgstr "采购库存" +msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" -msgstr "计算价格" +msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" -msgstr "无法删除,因为物品已发货" +msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" -msgstr "无法删除,因为项目已分配" +msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" -msgstr "分配序列号" +msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" -msgstr "更新单位价格" +msgstr "" #: templates/js/translated/search.js:270 msgid "No results" -msgstr "无结果" +msgstr "" #: templates/js/translated/search.js:292 templates/search.html:25 msgid "Enter search query" -msgstr "输入搜索查询" +msgstr "" #: templates/js/translated/search.js:342 msgid "result" -msgstr "结果" +msgstr "" #: templates/js/translated/search.js:352 msgid "Minimize results" -msgstr "最小化结果" +msgstr "" #: templates/js/translated/search.js:355 msgid "Remove results" -msgstr "删除结果" +msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" -msgstr "序列化库存项目" +msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" -msgstr "确认库存序列化" +msgstr "" + +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:166 +#, fuzzy +#| msgid "Location" msgid "Add Location type" -msgstr "添加位置类型" +msgstr "地点" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" -msgstr "编辑库存地点" +msgstr "编辑仓储地点" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" -msgstr "添加库存地点" +msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" -msgstr "在此位置之后创建另一个位置" +msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 +#, fuzzy +#| msgid "Stock item created" msgid "Stock location created" -msgstr "库存地点已创建" +msgstr "库存项已创建" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" -msgstr "您确定要删除此库存位置吗?" +msgstr "确实要删除此仓储地点吗?" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" -msgstr "移动到母库存位置" +msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" -msgstr "删除库存地点" +msgstr "删除仓储地点" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" -msgstr "此库存位置的库存物品操作" +msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" -msgstr "针对子地点的行动" +msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" -msgstr "此零件无法序列化" +msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" -msgstr "将给定数量添加为包,而不是单个项目" +msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" -msgstr "输入此库存项目的初始数量" +msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "输入新库存的序列号(或留空)" +msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" -msgstr "库存项重复" +msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" -msgstr "复制库存项" +msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" -msgstr "确定要删除此库存项吗?" +msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" -msgstr "删除库存项" +msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" -msgstr "编辑库存项" +msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" -msgstr "在此之后创建另一个项目" +msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" -msgstr "新建库存项" +msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" -msgstr "创建了多个库存项目" +msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" -msgstr "查找序列号" +msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" -msgstr "输入序列号" +msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" -msgstr "输入序列号" +msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" -msgstr "没有匹配的序列号" +msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" -msgstr "找到多个匹配结果" +msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" -msgstr "确认库存分配" +msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" -msgstr "将库存分配给客户" +msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" -msgstr "警告:合并操作无法撤销" +msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" -msgstr "合并库存项目时会丢失一些信息" +msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" -msgstr "合并项目的库存交易历史记录将被删除" +msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" -msgstr "合并项目的供应商零件信息将被删除" +msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" -msgstr "确认合并库存项" +msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" -msgstr "合并库存项目" +msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" -msgstr "转移库存" +msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "移动" +msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" -msgstr "库存计数" +msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" -msgstr "计数" +msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" -msgstr "移除库存" +msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" -msgstr "拿出" +msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" -msgstr "添加库存" +msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:414 msgid "Add" msgstr "添加" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" -msgstr "删除库存" +msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "序列化库存的数量不能调整" +msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" -msgstr "指定库存数量" - -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "调整批次代码" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "调整包装" +msgstr "" -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "选择库存项" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" -msgstr "至少选择一个可用库存项目" +msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" -msgstr "确认库存调整" +msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" -msgstr "合格" +msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" -msgstr "不合格" +msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" -msgstr "无结果" +msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1447 msgid "Pass test" -msgstr "通过测试" - -#: templates/js/translated/stock.js:1538 -msgid "Add test result" -msgstr "新增测试结果" - -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "编辑测试结果" +msgstr "" -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "删除测试结果" +#: templates/js/translated/stock.js:1450 +msgid "Add test result" +msgstr "" -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1473 msgid "No test results found" -msgstr "未找到测试结果" +msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1537 msgid "Test Date" -msgstr "测试日期" +msgstr "" -#: templates/js/translated/stock.js:1638 +#: templates/js/translated/stock.js:1550 msgid "Test started" -msgstr "测试已开始" +msgstr "" -#: templates/js/translated/stock.js:1647 +#: templates/js/translated/stock.js:1559 msgid "Test finished" -msgstr "测试已完成" +msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1713 msgid "Edit Test Result" -msgstr "编辑测试结果" +msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1733 msgid "Delete Test Result" -msgstr "删除测试结果" +msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1765 msgid "In production" -msgstr "生产中" +msgstr "正在生产" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1769 msgid "Installed in Stock Item" -msgstr "已安装库存项目" +msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1777 msgid "Assigned to Sales Order" -msgstr "分配给销售订单" +msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1783 msgid "No stock location set" -msgstr "未设置库存位置" +msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1839 msgid "Change stock status" -msgstr "更改库存状态" +msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1848 msgid "Merge stock" -msgstr "合并库存" +msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1897 msgid "Delete stock" -msgstr "删除库存" +msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1952 +#, fuzzy +#| msgid "Stock Items" msgid "stock items" msgstr "库存项" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1957 +#, fuzzy +#| msgid "Stock Location" msgid "Scan to location" -msgstr "扫描到位置" +msgstr "仓储地点" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1968 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock Actions" -msgstr "库存操作" +msgstr "仓储地点" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2012 +#, fuzzy +#| msgid "Installed into assembly" msgid "Load installed items" -msgstr "加载已安装的项目" +msgstr "安装到组装中" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2090 msgid "Stock item is in production" -msgstr "库存项正在生产" +msgstr "库存品正在生产" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2095 msgid "Stock item assigned to sales order" -msgstr "分配给销售订单的库存项目" +msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2098 msgid "Stock item assigned to customer" -msgstr "分配给客户的库存项" +msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2101 msgid "Serialized stock item has been allocated" -msgstr "已分配序列化库存项" +msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2103 msgid "Stock item has been fully allocated" -msgstr "库存项目已完全分配" +msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2105 msgid "Stock item has been partially allocated" -msgstr "库存项目已部分分配" +msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2108 msgid "Stock item has been installed in another item" -msgstr "库存项目已安装在另一个项目中" +msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2110 +#, fuzzy +#| msgid "Accept as consumed by this build order" msgid "Stock item has been consumed by a build order" -msgstr "库存项已被生产订单消耗" +msgstr "接受此构建订单所消耗的内容" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2114 msgid "Stock item has expired" -msgstr "库存项已过期" +msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2116 msgid "Stock item will expire soon" -msgstr "库存项即将过期" +msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2121 msgid "Stock item has been rejected" -msgstr "库存项已被拒绝" +msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2123 msgid "Stock item is lost" -msgstr "库存项丢失了" +msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2125 msgid "Stock item is destroyed" -msgstr "库存项已销毁" +msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" -msgstr "已用完" +msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2294 msgid "Supplier part not specified" -msgstr "未指定供应商零件" +msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2341 +#, fuzzy +#| msgid "Stock Source" msgid "Stock Value" -msgstr "库存值" +msgstr "库存来源" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2469 msgid "No stock items matching query" -msgstr "没有符合查询的库存项目" +msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2573 +#, fuzzy +#| msgid "Stock Locations" msgid "stock locations" -msgstr "库存地点" +msgstr "仓储地点" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2728 +#, fuzzy +#| msgid "Stock Locations" msgid "Load Sublocations" -msgstr "加载次级地点" +msgstr "仓储地点" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2846 msgid "Details" msgstr "详情" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2850 +#, fuzzy +#| msgid "Change" msgid "No changes" -msgstr "无更改" +msgstr "更改" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2862 msgid "Part information unavailable" -msgstr "零件信息不可用" +msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2884 msgid "Location no longer exists" -msgstr "位置不再存在" +msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2901 +#, fuzzy +#| msgid "Sales Order Settings" msgid "Build order no longer exists" -msgstr "生产订单不再存在" +msgstr "销售订单设置" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" -msgstr "采购订单不再存在" +msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2933 +#, fuzzy +#| msgid "Sales Order Settings" msgid "Sales Order no longer exists" -msgstr "销售订单不再存在" +msgstr "销售订单设置" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" -msgstr "退货订单已不存在" +msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" -msgstr "客户已不存在" +msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" -msgstr "库存项已不存在" +msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:3005 msgid "Added" -msgstr "已添加" +msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:3013 msgid "Removed" -msgstr "已删除" +msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3085 msgid "No installed items" -msgstr "没有已安装的项目" +msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" -msgstr "卸载库存项" +msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" -msgstr "选择要卸载的库存项" +msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" -msgstr "在此项中安装另一个库存项" +msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" -msgstr "只有满足以下条件,才能安装库存项目" +msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "库存项链接到一个零件,该零件是此库存项的物料清单" +msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" -msgstr "该库存项目前有库存" +msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" -msgstr "库存项目尚未安装在其他项目中" +msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "库存项被批号或序列号跟踪" +msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3237 msgid "Select part to install" -msgstr "选择要安装的零件" +msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3300 +#, fuzzy +#| msgid "Select Stock Items" msgid "Select one or more stock items" -msgstr "选择一个或多个库存项目" +msgstr "选择库存项" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3313 +#, fuzzy +#| msgid "Select Stock Items" msgid "Selected stock items" -msgstr "选定的库存项" +msgstr "选择库存项" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3317 +#, fuzzy +#| msgid "Stock Settings" msgid "Change Stock Status" -msgstr "更改库存状态" - -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "本周" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "本月" +msgstr "库存设置" -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" -msgstr "有项目编码" +msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 msgid "Order status" -msgstr "订单状态" +msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" -msgstr "可跟踪零件" +msgstr "可追溯商品" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" -msgstr "装配零件" +msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" -msgstr "有可用库存" +msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" -msgstr "允许变体库存" +msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" -msgstr "包括子位置" +msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" -msgstr "包括地点" +msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 +#, fuzzy +#| msgid "No location set" msgid "Has location type" -msgstr "具有位置类型" +msgstr "未设置仓储地点" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 msgid "Include subcategories" -msgstr "包括子类别" +msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 msgid "Subscribed" -msgstr "已订阅" +msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" -msgstr "已序列化" +msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" -msgstr "GTE序列号" +msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" -msgstr "序列号大于或等于" +msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" -msgstr "LTE序列号" +msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" -msgstr "序列号小于或等于" +msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" -msgstr "序列号" +msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" -msgstr "批号" +msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 msgid "Active parts" -msgstr "激活的零件" +msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" -msgstr "显示活动零件的库存" +msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" -msgstr "零件是一个装配体" +msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" -msgstr "已分配" +msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" -msgstr "项目已分配" +msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" -msgstr "库存可供使用" +msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" -msgstr "将库存纳入子位置" +msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" -msgstr "显示已耗尽的库存项目" +msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" -msgstr "显示有库存的商品" +msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "显示正在生产的项目" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" -msgstr "包含变体" +msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" -msgstr "包括变体零件的库存项" +msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" -msgstr "显示安装在另一个项目中的库存项目" +msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" -msgstr "显示已分配给客户的项目" +msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" -msgstr "库存状态" +msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" -msgstr "有批号" +msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" -msgstr "库存项被批号或序列号追踪" +msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" -msgstr "有购买价格" +msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" -msgstr "显示已设置采购价格的库存项" +msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" -msgstr "过期日期前" +msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" -msgstr "过期日期后" +msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" -msgstr "显示已过期的库存商品" +msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" -msgstr "显示即将到期的库存" +msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" -msgstr "测试通过" +msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" -msgstr "包括已安装的项目" - -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "间隔开始" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "间隔结束" +msgstr "" -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:515 msgid "Build status" msgstr "生产状态" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" -msgstr "在子类别中包含零件" +msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:717 msgid "Show active parts" -msgstr "显示活动零件" +msgstr "" #: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "显示锁定的零件" - -#: templates/js/translated/table_filters.js:733 msgid "Available stock" -msgstr "可用库存" +msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 +#, fuzzy +#| msgid "Units" msgid "Has Units" -msgstr "有单位" +msgstr "单位" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:734 +#, fuzzy +#| msgid "Parameter units" msgid "Part has defined units" -msgstr "零件已定义单位" +msgstr "参数单位" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:738 msgid "Has IPN" -msgstr "有内部零件号" +msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" -msgstr "零件有内部零件号" +msgstr "商品有内部编号" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:743 msgid "In stock" -msgstr "有库存" +msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:751 msgid "Purchasable" -msgstr "可购买的" +msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" -msgstr "有盘点记录" +msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:829 +#, fuzzy +#| msgid "Units" msgid "Has Choices" -msgstr "有选项" +msgstr "单位" #: templates/js/translated/tables.js:92 msgid "Display calendar view" -msgstr "显示日历视图" +msgstr "显示日历" #: templates/js/translated/tables.js:102 msgid "Display list view" -msgstr "显示列表视图" +msgstr "列表视图" #: templates/js/translated/tables.js:112 msgid "Display tree view" -msgstr "显示树状视图" +msgstr "" #: templates/js/translated/tables.js:130 msgid "Expand all rows" -msgstr "展开所有行" +msgstr "" #: templates/js/translated/tables.js:136 msgid "Collapse all rows" -msgstr "折叠所有行" +msgstr "" #: templates/js/translated/tables.js:186 msgid "Export Table Data" -msgstr "导出表的数据" +msgstr "" #: templates/js/translated/tables.js:190 msgid "Select File Format" -msgstr "选择文件格式" +msgstr "" #: templates/js/translated/tables.js:529 msgid "Loading data" -msgstr "正在加载数据" +msgstr "" #: templates/js/translated/tables.js:532 msgid "rows per page" -msgstr "每页行数" +msgstr "" #: templates/js/translated/tables.js:537 msgid "Showing all rows" -msgstr "显示所有行" +msgstr "" #: templates/js/translated/tables.js:539 msgid "Showing" -msgstr "显示" +msgstr "" #: templates/js/translated/tables.js:539 msgid "to" -msgstr "至" +msgstr "" #: templates/js/translated/tables.js:539 msgid "of" -msgstr "的" +msgstr "" #: templates/js/translated/tables.js:539 msgid "rows" -msgstr "行" +msgstr "" #: templates/js/translated/tables.js:546 msgid "No matching results" -msgstr "没有匹配结果" +msgstr "" #: templates/js/translated/tables.js:549 msgid "Hide/Show pagination" -msgstr "隐藏/显示分页" +msgstr "" #: templates/js/translated/tables.js:555 msgid "Toggle" -msgstr "切换" +msgstr "" + +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" #: templates/js/translated/tables.js:561 msgid "All" -msgstr "所有" +msgstr "" #: templates/navbar.html:45 msgid "Buy" -msgstr "採購" +msgstr "采购" #: templates/navbar.html:57 msgid "Sell" -msgstr "銷售" +msgstr "销售" #: templates/navbar.html:121 msgid "Show Notifications" -msgstr "显示通知" +msgstr "" #: templates/navbar.html:124 msgid "New Notifications" -msgstr "新通知" +msgstr "" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" @@ -14950,172 +14771,160 @@ msgstr "管理员" #: templates/navbar.html:148 msgid "Logout" -msgstr "登出" +msgstr "" #: templates/notes_buttons.html:6 templates/notes_buttons.html:7 msgid "Save" -msgstr "儲存" +msgstr "" #: templates/notifications.html:9 msgid "Show all notifications and history" -msgstr "显示所有通知和历史记录" - -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "平台 UI - 新的 UI for InvenTree 提供了更现代化的管理选项。" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "平台界面-InvenTree的新界面-已准备就绪可供测试。" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "现在试试" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "这里" +msgstr "" #: templates/qr_code.html:11 msgid "QR data not provided" -msgstr "未提供二维码数据" +msgstr "" #: templates/registration/logged_out.html:7 msgid "You were logged out successfully." -msgstr "您已成功登出。" +msgstr "" #: templates/registration/logged_out.html:9 msgid "Log in again" -msgstr "重新登录" +msgstr "" #: templates/search.html:9 msgid "Show full search results" -msgstr "显示全部搜索结果" +msgstr "" #: templates/search.html:12 msgid "Clear search" -msgstr "清除搜索" +msgstr "" #: templates/search.html:15 msgid "Close search menu" -msgstr "关闭搜索菜单" +msgstr "" #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" -msgstr "社交网络登录失败" +msgstr "" #: templates/socialaccount/authentication_error.html:8 msgid "Account Login Failure" -msgstr "账户登录失败" +msgstr "" #: templates/socialaccount/authentication_error.html:11 msgid "An error occurred while attempting to login via your social network account." -msgstr "尝试通过您的社交网络帐户登录时出错。" +msgstr "" #: templates/socialaccount/authentication_error.html:13 msgid "Contact your system administrator for further information." -msgstr "有关详细信息,请与系统管理员联系。" +msgstr "" #: templates/socialaccount/login.html:13 #, python-format msgid "Connect %(provider)s" -msgstr "联系 %(provider)s" +msgstr "" #: templates/socialaccount/login.html:15 #, python-format msgid "You are about to connect a new third party account from %(provider)s." -msgstr "您即将连接 %(provider)s 的新第三方帐户。" +msgstr "" #: templates/socialaccount/login.html:17 #, python-format msgid "Sign In Via %(provider)s" -msgstr "通过%(provider)s登入" +msgstr "" #: templates/socialaccount/login.html:19 #, python-format msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "您将使用 %(provider)s 的第三方帐户登录。" +msgstr "" #: templates/socialaccount/login.html:24 msgid "Continue" -msgstr "继续" +msgstr "" #: templates/socialaccount/login.html:29 +#, fuzzy +#| msgid "Invalid quantity provided" msgid "Invalid SSO Provider" -msgstr "无效的 SSO 提供商" +msgstr "提供的数量无效" #: templates/socialaccount/login.html:31 msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "所选SSO提供程序无效,或配置不正确" +msgstr "" #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "你即将使用你的 %(provider_name)s 账号来登录 %(site_name)s。" +msgstr "" #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" -msgstr "作为最后一步,请填写以下表格" +msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 +#, fuzzy +#| msgid "Email backend not configured" msgid "Provider has not been configured" -msgstr "提供程序尚未配置" +msgstr "未配置电子邮件后端" #: templates/socialaccount/snippets/provider_list.html:35 msgid "No SSO providers have been configured" -msgstr "尚未配置SSO提供程序" +msgstr "" #: templates/stats.html:13 msgid "Instance Name" -msgstr "实例名称" +msgstr "" #: templates/stats.html:18 msgid "Database" -msgstr "数据库" +msgstr "" #: templates/stats.html:26 msgid "Server is running in debug mode" -msgstr "服务器运行在调试模式" +msgstr "" #: templates/stats.html:33 msgid "Docker Mode" -msgstr "Docker 模式" +msgstr "" #: templates/stats.html:34 msgid "Server is deployed using docker" -msgstr "使用docker部署服务器" +msgstr "" #: templates/stats.html:39 msgid "Plugin Support" -msgstr "插件支持" +msgstr "" #: templates/stats.html:43 msgid "Plugin support enabled" -msgstr "插件支持已启用" +msgstr "" #: templates/stats.html:45 msgid "Plugin support disabled" -msgstr "插件支持已禁用" +msgstr "" #: templates/stats.html:52 msgid "Server status" -msgstr "服务器状态" +msgstr "" #: templates/stats.html:55 msgid "Healthy" -msgstr "健康的" +msgstr "" #: templates/stats.html:57 msgid "Issues detected" -msgstr "检测到的问题" +msgstr "" #: templates/stats.html:64 msgid "Background Worker" -msgstr "后台工作人员" +msgstr "" #: templates/stats.html:67 msgid "Background worker not running" -msgstr "后台工作程序未运行" +msgstr "" #: templates/stats.html:75 msgid "Email Settings" @@ -15125,21 +14934,13 @@ msgstr "电子邮件设置" msgid "Email settings not configured" msgstr "电子邮件设置未配置" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "已通过" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "已失败" - #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "是" +msgstr "确定" #: templates/yesnolabel.html:6 msgid "No" -msgstr "否" +msgstr "取消" #: users/admin.py:104 msgid "Users" @@ -15147,15 +14948,17 @@ msgstr "用户" #: users/admin.py:105 msgid "Select which users are assigned to this group" -msgstr "选择分配给此组的用户" +msgstr "选择分配给该组的用户" #: users/admin.py:249 +#, fuzzy +#| msgid "The following users are members of multiple groups:" msgid "The following users are members of multiple groups" -msgstr "以下用户是多个组的成员" +msgstr "以下用户是多个群组的成员:" #: users/admin.py:283 msgid "Personal info" -msgstr "个人信息" +msgstr "个人资料" #: users/admin.py:285 msgid "Permissions" @@ -15167,73 +14970,213 @@ msgstr "重要日期" #: users/authentication.py:29 users/models.py:138 msgid "Token has been revoked" -msgstr "令牌已被撤销" +msgstr "" #: users/authentication.py:32 msgid "Token has expired" -msgstr "令牌已过期" +msgstr "" #: users/models.py:81 +#, fuzzy +#| msgid "Token" msgid "API Token" -msgstr "API 令牌" +msgstr "令牌" #: users/models.py:82 +#, fuzzy +#| msgid "Token" msgid "API Tokens" -msgstr "API 令牌" +msgstr "令牌" #: users/models.py:118 +#, fuzzy +#| msgid "Token" msgid "Token Name" -msgstr "令牌名称" +msgstr "令牌" #: users/models.py:119 +#, fuzzy +#| msgid "Company name" msgid "Custom token name" -msgstr "自定义令牌名称" +msgstr "公司名称" #: users/models.py:125 msgid "Token expiry date" -msgstr "令牌过期日期" +msgstr "" #: users/models.py:133 +#, fuzzy +#| msgid "Last Name" msgid "Last Seen" -msgstr "最近一次在线" +msgstr "姓氏" #: users/models.py:134 msgid "Last time the token was used" -msgstr "最近使用令牌的时间" +msgstr "" #: users/models.py:138 msgid "Revoked" -msgstr "撤销" +msgstr "" -#: users/models.py:379 +#: users/models.py:397 msgid "Permission set" msgstr "权限设置" -#: users/models.py:388 +#: users/models.py:406 msgid "Group" -msgstr "组" +msgstr "群组" -#: users/models.py:392 +#: users/models.py:410 msgid "View" -msgstr "查看" +msgstr "视图" -#: users/models.py:392 +#: users/models.py:410 msgid "Permission to view items" -msgstr "查看项目的权限" +msgstr "查看项目权限" -#: users/models.py:396 +#: users/models.py:414 msgid "Permission to add items" -msgstr "添加项目的权限" +msgstr "添加项目权限" -#: users/models.py:400 +#: users/models.py:418 msgid "Change" msgstr "更改" -#: users/models.py:402 +#: users/models.py:420 msgid "Permissions to edit items" -msgstr "编辑项目的权限" +msgstr "编辑项目权限" -#: users/models.py:408 +#: users/models.py:426 msgid "Permission to delete items" -msgstr "删除项目的权限" +msgstr "删除项目权限" + +#, fuzzy +#~| msgid "BOM Item" +#~ msgid "Bom Item" +#~ msgstr "BOM项" + +#, fuzzy +#~| msgid "Create new purchase order" +#~ msgid "Invalid purchase order" +#~ msgstr "新建采购订单" + +#, fuzzy +#~| msgid "Stock Location" +#~ msgid "Invalid stock location" +#~ msgstr "仓储地点" + +#, fuzzy +#~| msgid "Enter barcode data" +#~ msgid "Invalid supplier barcode" +#~ msgstr "输入条形码数据" + +#, fuzzy +#~| msgid "Part QR Code" +#~ msgid "QC Code" +#~ msgstr "商品二维码" + +#, fuzzy +#~| msgid "Chosen value is not a valid option" +#~ msgid "Provided value is not a valid number" +#~ msgstr "选择的值不是一个有效的选项" + +#~ msgid "This stock item has already been allocated to this build output" +#~ msgstr "此库存项已被分配至此生产产出" + +#, fuzzy +#~| msgid "Build Description" +#~ msgid "Plugin Description" +#~ msgstr "构建描述" + +#~ msgid "Chinese" +#~ msgstr "中文(简体)" + +#~ msgid "Query filters (comma-separated list of key=value pairs)," +#~ msgstr "查询筛选器 (逗号分隔的键值对列表)" + +#~ msgid "Query filters (comma-separated list of key=value pairs" +#~ msgstr "查询筛选器 (逗号分隔的键值对列表" + +#~ msgid "Part query filters (comma-separated value of key=value pairs)" +#~ msgstr "商品查询筛选器 (逗号分隔的键值对列表)" + +#~ msgid "Build to allocate parts" +#~ msgstr "生产以分配部件" + +#~ msgid "Untracked stock has not been fully allocated for this Build Order" +#~ msgstr "未跟踪的库存尚未完全分配给此生产订单" + +#~ msgid "Allocate selected items" +#~ msgstr "分配选定项目" + +#~ msgid "This Build Order does not have any associated untracked BOM items" +#~ msgstr "此构建订单没有任何关联的 BOM 项目" + +#~ msgid "Output Actions" +#~ msgstr "输出操作" + +#~ msgid "Complete selected build outputs" +#~ msgstr "完成选定的构建输出" + +#, fuzzy +#~| msgid "Complete selected build outputs" +#~ msgid "Scrap selected build outputs" +#~ msgstr "完成选定的构建输出" + +#~ msgid "Delete selected build outputs" +#~ msgstr "删除选中的构建输出" + +#~ msgid "All untracked stock items have been allocated" +#~ msgstr "所有未跟踪的库存项目都已分配" + +#~ msgid "Delete Parts" +#~ msgstr "删除商品" + +#~ msgid "Set Category" +#~ msgstr "设置类别" + +#, python-format +#~ msgid "This Build Order is a child of Build Order %(link)s" +#~ msgstr "此构建订单是 %(link)s 订单的一个子订单" + +#~ msgid "Extra build notes" +#~ msgstr "额外的生产备注" + +#, fuzzy +#~| msgid "Permission to delete items" +#~ msgid "Print reports for selected items" +#~ msgstr "删除项目权限" + +#, python-format +#~ msgid "This Build Order is allocated to Sales Order %(link)s" +#~ msgstr "此构建订单已分配给销售订单 %(link)s" + +#~ msgid "No labels found which match selected stock item(s)" +#~ msgstr "没有找到与选定的库存项匹配的标签" + +#~ msgid "Select Stock Locations" +#~ msgstr "选择仓储地点" + +#~ msgid "Stock location(s) must be selected before printing labels" +#~ msgstr "打印标签前必须选择仓储地点" + +#~ msgid "No labels found which match selected stock location(s)" +#~ msgstr "没有找到匹配选定库存地点的标签" + +#~ msgid "Company ID" +#~ msgstr "公司ID" + +#~ msgid "Manufacturer Part ID" +#~ msgstr "制造商商品ID" + +#~ msgid "Stock item(s) must be selected before printing reports" +#~ msgstr "在打印报表之前必须选择库存项目" + +#~ msgid "Build(s) must be selected before printing reports" +#~ msgstr "打印报表前必须选择Build(s)" + +#~ msgid "Part(s) must be selected before printing reports" +#~ msgstr "打印报表前必须选择商品" +#~ msgid "Print test reports" +#~ msgstr "打印测试报表" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_hant/LC_MESSAGES/django.po similarity index 58% rename from src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po rename to src/backend/InvenTree/locale/zh_hant/LC_MESSAGES/django.po index 852ea7bbd646..87e88db45151 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_hant/LC_MESSAGES/django.po @@ -1,85 +1,77 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: inventree\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-20 01:22+0000\n" -"PO-Revision-Date: 2024-08-20 19:50\n" -"Last-Translator: \n" -"Language-Team: Romanian\n" -"Language: ro_RO\n" +"POT-Creation-Date: 2024-01-30 05:37+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" -"X-Crowdin-Project: inventree\n" -"X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: ro\n" -"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 216\n" - -#: InvenTree/api.py:269 +"Plural-Forms: nplurals=1; plural=0;\n" + +#: InvenTree/api.py:165 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:502 +#: InvenTree/api.py:418 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/conversion.py:160 -#, python-brace-format -msgid "Invalid unit provided ({unit})" -msgstr "" - -#: InvenTree/conversion.py:177 +#: InvenTree/conversion.py:95 msgid "No value provided" msgstr "" -#: InvenTree/conversion.py:204 +#: InvenTree/conversion.py:128 #, python-brace-format msgid "Could not convert {original} to {unit}" msgstr "" -#: InvenTree/conversion.py:206 +#: InvenTree/conversion.py:130 msgid "Invalid quantity supplied" msgstr "" -#: InvenTree/conversion.py:220 +#: InvenTree/conversion.py:144 #, python-brace-format msgid "Invalid quantity supplied ({exc})" msgstr "" -#: InvenTree/exceptions.py:108 +#: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:136 +#: InvenTree/fields.py:140 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:205 InvenTree/models.py:929 build/serializers.py:468 -#: build/serializers.py:546 build/templates/build/sidebar.html:29 -#: company/models.py:836 -#: company/templates/company/manufacturer_part_sidebar.html:11 -#: company/templates/company/sidebar.html:37 -#: company/templates/company/supplier_part_sidebar.html:11 order/models.py:1380 -#: order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:209 InvenTree/models.py:951 build/serializers.py:437 +#: build/serializers.py:515 build/templates/build/sidebar.html:21 +#: company/models.py:826 company/templates/company/sidebar.html:37 +#: order/models.py:1261 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3297 part/templates/part/part_sidebar.html:65 -#: report/templates/report/inventree_build_order_report.html:172 -#: stock/admin.py:230 stock/models.py:2375 stock/models.py:2563 -#: stock/serializers.py:698 stock/serializers.py:856 stock/serializers.py:982 -#: stock/serializers.py:1032 stock/serializers.py:1343 -#: stock/serializers.py:1432 stock/serializers.py:1597 -#: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 -#: templates/js/translated/company.js:1684 templates/js/translated/order.js:372 -#: templates/js/translated/part.js:1087 -#: templates/js/translated/purchase_order.js:2270 -#: templates/js/translated/return_order.js:774 -#: templates/js/translated/sales_order.js:1103 -#: templates/js/translated/sales_order.js:2018 -#: templates/js/translated/stock.js:1621 templates/js/translated/stock.js:2513 +#: part/models.py:3148 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:224 stock/models.py:2260 stock/models.py:2364 +#: stock/serializers.py:428 stock/serializers.py:581 stock/serializers.py:677 +#: stock/serializers.py:727 stock/serializers.py:1023 stock/serializers.py:1112 +#: stock/serializers.py:1269 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2197 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1516 templates/js/translated/stock.js:2398 msgid "Notes" msgstr "" @@ -92,582 +84,594 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:129 +#: InvenTree/forms.py:128 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:130 +#: InvenTree/forms.py:129 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:139 +#: InvenTree/forms.py:138 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:140 +#: InvenTree/forms.py:139 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:144 +#: InvenTree/forms.py:143 msgid "Old password" msgstr "" -#: InvenTree/forms.py:183 +#: InvenTree/forms.py:182 msgid "Email (again)" msgstr "" -#: InvenTree/forms.py:187 +#: InvenTree/forms.py:186 msgid "Email address confirmation" msgstr "" -#: InvenTree/forms.py:210 +#: InvenTree/forms.py:209 msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:221 -msgid "MFA Registration is disabled." -msgstr "" - -#: InvenTree/forms.py:259 InvenTree/forms.py:267 +#: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:274 +#: InvenTree/forms.py:268 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/forms.py:403 +#: InvenTree/forms.py:394 msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:491 order/models.py:567 order/models.py:810 +#: InvenTree/helpers.py:459 order/models.py:521 order/models.py:723 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:499 +#: InvenTree/helpers.py:467 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:528 +#: InvenTree/helpers.py:496 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:560 InvenTree/helpers.py:603 +#: InvenTree/helpers.py:528 InvenTree/helpers.py:571 #, python-brace-format msgid "Invalid group range: {group}" msgstr "" -#: InvenTree/helpers.py:591 +#: InvenTree/helpers.py:559 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:621 InvenTree/helpers.py:628 InvenTree/helpers.py:647 +#: InvenTree/helpers.py:589 InvenTree/helpers.py:596 InvenTree/helpers.py:615 #, python-brace-format msgid "Invalid group sequence: {group}" msgstr "" -#: InvenTree/helpers.py:657 +#: InvenTree/helpers.py:625 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:662 +#: InvenTree/helpers.py:630 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:780 +#: InvenTree/helpers.py:748 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers_model.py:133 +#: InvenTree/helpers_model.py:138 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:138 InvenTree/helpers_model.py:145 +#: InvenTree/helpers_model.py:143 InvenTree/helpers_model.py:150 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:141 +#: InvenTree/helpers_model.py:146 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:156 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:154 +#: InvenTree/helpers_model.py:159 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:166 +#: InvenTree/helpers_model.py:171 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:171 +#: InvenTree/helpers_model.py:176 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:179 +#: InvenTree/helpers_model.py:184 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/locales.py:18 -msgid "Arabic" -msgstr "" - -#: InvenTree/locales.py:19 +#: InvenTree/locales.py:16 msgid "Bulgarian" msgstr "" -#: InvenTree/locales.py:20 +#: InvenTree/locales.py:17 msgid "Czech" msgstr "" -#: InvenTree/locales.py:21 +#: InvenTree/locales.py:18 msgid "Danish" msgstr "" -#: InvenTree/locales.py:22 +#: InvenTree/locales.py:19 msgid "German" msgstr "" -#: InvenTree/locales.py:23 +#: InvenTree/locales.py:20 msgid "Greek" msgstr "" -#: InvenTree/locales.py:24 +#: InvenTree/locales.py:21 msgid "English" msgstr "" -#: InvenTree/locales.py:25 +#: InvenTree/locales.py:22 msgid "Spanish" msgstr "" -#: InvenTree/locales.py:26 +#: InvenTree/locales.py:23 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/locales.py:27 -msgid "Estonian" -msgstr "" - -#: InvenTree/locales.py:28 +#: InvenTree/locales.py:24 msgid "Farsi / Persian" msgstr "" -#: InvenTree/locales.py:29 +#: InvenTree/locales.py:25 msgid "Finnish" msgstr "" -#: InvenTree/locales.py:30 +#: InvenTree/locales.py:26 msgid "French" msgstr "" -#: InvenTree/locales.py:31 +#: InvenTree/locales.py:27 msgid "Hebrew" msgstr "" -#: InvenTree/locales.py:32 +#: InvenTree/locales.py:28 msgid "Hindi" msgstr "" -#: InvenTree/locales.py:33 +#: InvenTree/locales.py:29 msgid "Hungarian" msgstr "" -#: InvenTree/locales.py:34 +#: InvenTree/locales.py:30 msgid "Italian" msgstr "" -#: InvenTree/locales.py:35 +#: InvenTree/locales.py:31 msgid "Japanese" msgstr "" -#: InvenTree/locales.py:36 +#: InvenTree/locales.py:32 msgid "Korean" msgstr "" -#: InvenTree/locales.py:37 -msgid "Latvian" -msgstr "" - -#: InvenTree/locales.py:38 +#: InvenTree/locales.py:33 msgid "Dutch" msgstr "" -#: InvenTree/locales.py:39 +#: InvenTree/locales.py:34 msgid "Norwegian" msgstr "" -#: InvenTree/locales.py:40 +#: InvenTree/locales.py:35 msgid "Polish" msgstr "" -#: InvenTree/locales.py:41 +#: InvenTree/locales.py:36 msgid "Portuguese" msgstr "" -#: InvenTree/locales.py:42 +#: InvenTree/locales.py:37 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/locales.py:43 -msgid "Romanian" -msgstr "" - -#: InvenTree/locales.py:44 +#: InvenTree/locales.py:38 msgid "Russian" msgstr "" -#: InvenTree/locales.py:45 +#: InvenTree/locales.py:39 msgid "Slovak" msgstr "" -#: InvenTree/locales.py:46 +#: InvenTree/locales.py:40 msgid "Slovenian" msgstr "" -#: InvenTree/locales.py:47 +#: InvenTree/locales.py:41 msgid "Serbian" msgstr "" -#: InvenTree/locales.py:48 +#: InvenTree/locales.py:42 msgid "Swedish" msgstr "" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:43 msgid "Thai" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:44 msgid "Turkish" msgstr "" -#: InvenTree/locales.py:51 -msgid "Ukrainian" -msgstr "" - -#: InvenTree/locales.py:52 +#: InvenTree/locales.py:45 msgid "Vietnamese" msgstr "" -#: InvenTree/locales.py:53 +#: InvenTree/locales.py:46 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:54 +#: InvenTree/locales.py:47 msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/magic_login.py:28 +#: InvenTree/magic_login.py:27 #, python-brace-format -msgid "[{site_name}] Log in to the app" +msgid "[{site.name}] Log in to the app" msgstr "" -#: InvenTree/magic_login.py:38 InvenTree/serializers.py:415 -#: company/models.py:136 company/templates/company/company_base.html:138 +#: InvenTree/magic_login.py:37 company/models.py:134 +#: company/templates/company/company_base.html:132 #: templates/InvenTree/settings/user.html:49 -#: templates/js/translated/company.js:677 +#: templates/js/translated/company.js:667 msgid "Email" msgstr "" -#: InvenTree/models.py:103 -msgid "Error running plugin validation" -msgstr "" - -#: InvenTree/models.py:172 +#: InvenTree/models.py:83 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:178 +#: InvenTree/models.py:89 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:179 +#: InvenTree/models.py:90 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:409 +#: InvenTree/models.py:320 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:327 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:422 +#: InvenTree/models.py:333 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:433 +#: InvenTree/models.py:344 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:441 +#: InvenTree/models.py:352 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:472 +#: InvenTree/models.py:384 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:723 +#: InvenTree/models.py:466 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:467 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:488 stock/models.py:2359 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:489 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:497 common/models.py:2857 company/models.py:147 +#: company/models.py:452 company/models.py:507 company/models.py:809 +#: order/models.py:273 order/models.py:1266 order/models.py:1665 +#: part/admin.py:55 part/models.py:902 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:223 templates/js/translated/company.js:1309 +#: templates/js/translated/company.js:1663 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2037 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:498 build/models.py:307 part/models.py:903 +#: stock/models.py:814 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:504 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:505 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:513 InvenTree/models.py:514 common/models.py:2338 +#: common/models.py:2339 common/models.py:2563 common/models.py:2564 +#: common/models.py:2809 common/models.py:2810 part/models.py:3158 +#: part/models.py:3245 part/models.py:3338 part/models.py:3366 +#: plugin/models.py:234 plugin/models.py:235 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3007 users/models.py:100 +msgid "User" +msgstr "" + +#: InvenTree/models.py:518 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:540 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:551 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:581 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:584 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:593 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:600 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:776 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:740 +#: InvenTree/models.py:793 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:770 common/models.py:2702 common/models.py:3132 -#: common/serializers.py:412 company/models.py:593 machine/models.py:24 -#: part/models.py:983 part/models.py:3764 plugin/models.py:51 -#: report/models.py:149 stock/models.py:77 +#: InvenTree/models.py:823 common/models.py:2550 common/models.py:2943 +#: common/serializers.py:365 company/models.py:606 label/models.py:115 +#: part/models.py:838 part/models.py:3575 plugin/models.py:40 +#: report/models.py:172 stock/models.py:81 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin.html:80 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 -#: templates/InvenTree/settings/settings_staff_js.html:454 -#: templates/js/translated/company.js:676 -#: templates/js/translated/company.js:724 -#: templates/js/translated/company.js:913 -#: templates/js/translated/company.js:1165 -#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1193 -#: templates/js/translated/part.js:1481 templates/js/translated/part.js:1617 -#: templates/js/translated/part.js:2768 templates/js/translated/stock.js:2801 +#: templates/InvenTree/settings/settings_staff_js.html:446 +#: templates/js/translated/company.js:666 +#: templates/js/translated/company.js:714 +#: templates/js/translated/company.js:903 +#: templates/js/translated/company.js:1155 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2687 msgid "Name" msgstr "" -#: InvenTree/models.py:776 build/models.py:250 -#: build/templates/build/detail.html:24 common/models.py:156 -#: company/models.py:521 company/models.py:827 -#: company/templates/company/company_base.html:77 +#: InvenTree/models.py:829 build/models.py:180 +#: build/templates/build/detail.html:24 common/models.py:133 +#: company/models.py:515 company/models.py:817 +#: company/templates/company/company_base.html:71 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 order/models.py:288 -#: order/models.py:1413 part/admin.py:305 part/admin.py:411 part/models.py:1006 -#: part/models.py:3779 part/templates/part/category.html:79 +#: company/templates/company/supplier_part.html:107 label/models.py:122 +#: order/models.py:259 order/models.py:1294 part/admin.py:303 part/admin.py:413 +#: part/models.py:861 part/models.py:3590 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:155 -#: report/models.py:509 report/models.py:535 -#: report/templates/report/inventree_build_order_report.html:117 -#: stock/admin.py:54 stock/models.py:83 stock/templates/stock/location.html:122 +#: part/templates/part/part_scheduling.html:12 report/models.py:185 +#: report/models.py:615 report/models.py:660 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:87 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 -#: templates/InvenTree/settings/settings_staff_js.html:459 +#: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2311 templates/js/translated/company.js:519 -#: templates/js/translated/company.js:1330 -#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 -#: templates/js/translated/order.js:323 templates/js/translated/part.js:1245 -#: templates/js/translated/part.js:1490 templates/js/translated/part.js:1628 -#: templates/js/translated/part.js:1965 templates/js/translated/part.js:2361 -#: templates/js/translated/part.js:2803 templates/js/translated/part.js:2915 +#: templates/js/translated/build.js:2132 templates/js/translated/company.js:518 +#: templates/js/translated/company.js:1320 +#: templates/js/translated/company.js:1631 templates/js/translated/index.js:119 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2873 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1776 -#: templates/js/translated/purchase_order.js:1919 -#: templates/js/translated/purchase_order.js:2092 -#: templates/js/translated/return_order.js:313 -#: templates/js/translated/sales_order.js:838 -#: templates/js/translated/sales_order.js:1848 -#: templates/js/translated/stock.js:1600 templates/js/translated/stock.js:2143 -#: templates/js/translated/stock.js:2832 templates/js/translated/stock.js:2915 +#: templates/js/translated/purchase_order.js:1703 +#: templates/js/translated/purchase_order.js:1846 +#: templates/js/translated/purchase_order.js:2019 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1495 templates/js/translated/stock.js:2028 +#: templates/js/translated/stock.js:2719 templates/js/translated/stock.js:2802 msgid "Description" msgstr "" -#: InvenTree/models.py:777 stock/models.py:84 +#: InvenTree/models.py:830 stock/models.py:88 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:792 templates/js/translated/part.js:2812 -#: templates/js/translated/stock.js:2841 +#: InvenTree/models.py:839 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:845 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2728 msgid "Path" msgstr "" -#: InvenTree/models.py:929 +#: InvenTree/models.py:951 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:960 +#: InvenTree/models.py:980 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:961 +#: InvenTree/models.py:981 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:967 +#: InvenTree/models.py:987 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:968 +#: InvenTree/models.py:988 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1035 +#: InvenTree/models.py:1041 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1078 +#: InvenTree/models.py:1084 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1079 +#: InvenTree/models.py:1085 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:63 part/models.py:4387 +#: InvenTree/serializers.py:60 part/models.py:4099 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:100 company/models.py:186 -#: company/templates/company/company_base.html:112 part/models.py:3115 +#: InvenTree/serializers.py:97 company/models.py:180 +#: company/templates/company/company_base.html:106 part/models.py:2966 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:103 +#: InvenTree/serializers.py:100 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:407 templates/InvenTree/settings/user.html:33 -msgid "Username" -msgstr "" - -#: InvenTree/serializers.py:409 templates/InvenTree/settings/user.html:37 -msgid "First Name" -msgstr "" - -#: InvenTree/serializers.py:409 -msgid "First name of the user" -msgstr "" - -#: InvenTree/serializers.py:412 templates/InvenTree/settings/user.html:41 -msgid "Last Name" -msgstr "" - -#: InvenTree/serializers.py:412 -msgid "Last name of the user" -msgstr "" - -#: InvenTree/serializers.py:415 -msgid "Email address of the user" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Staff" -msgstr "" - -#: InvenTree/serializers.py:439 -msgid "Does this user have staff permissions" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Superuser" -msgstr "" - -#: InvenTree/serializers.py:442 -msgid "Is this user a superuser" -msgstr "" - -#: InvenTree/serializers.py:445 common/models.py:2707 company/models.py:163 -#: company/models.py:801 machine/models.py:39 part/admin.py:88 -#: part/models.py:1189 plugin/models.py:66 -#: templates/js/translated/company.js:523 -#: templates/js/translated/table_filters.js:134 -#: templates/js/translated/table_filters.js:226 -#: templates/js/translated/table_filters.js:513 -#: templates/js/translated/table_filters.js:541 -#: templates/js/translated/table_filters.js:719 -#: templates/js/translated/table_filters.js:808 users/models.py:182 -msgid "Active" -msgstr "" - -#: InvenTree/serializers.py:445 -msgid "Is this user account active" -msgstr "" - -#: InvenTree/serializers.py:463 +#: InvenTree/serializers.py:427 msgid "You do not have permission to change this user role." msgstr "" -#: InvenTree/serializers.py:475 +#: InvenTree/serializers.py:439 msgid "Only superusers can create new users" msgstr "" -#: InvenTree/serializers.py:494 -msgid "Your account has been created." +#: InvenTree/serializers.py:456 +#, python-brace-format +msgid "Welcome to {current_site.name}" msgstr "" -#: InvenTree/serializers.py:496 -msgid "Please use the password reset function to login" +#: InvenTree/serializers.py:458 +#, python-brace-format +msgid "" +"Your account has been created.\n" +"\n" +"Please use the password reset function to get access (at https://{domain})." msgstr "" -#: InvenTree/serializers.py:503 -msgid "Welcome to InvenTree" +#: InvenTree/serializers.py:520 +msgid "Filename" msgstr "" -#: InvenTree/serializers.py:561 +#: InvenTree/serializers.py:554 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:581 importer/models.py:63 +#: InvenTree/serializers.py:574 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:582 +#: InvenTree/serializers.py:575 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:599 +#: InvenTree/serializers.py:592 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:605 +#: InvenTree/serializers.py:598 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:626 +#: InvenTree/serializers.py:619 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:629 +#: InvenTree/serializers.py:622 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:742 +#: InvenTree/serializers.py:735 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:745 +#: InvenTree/serializers.py:738 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:812 +#: InvenTree/serializers.py:805 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:821 +#: InvenTree/serializers.py:814 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:861 +#: InvenTree/serializers.py:837 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:862 +#: InvenTree/serializers.py:838 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:854 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1246 +#: InvenTree/status.py:66 part/serializers.py:1082 msgid "Background worker check failed" msgstr "" @@ -679,1076 +683,979 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/templatetags/inventree_extras.py:184 -msgid "Unknown database" +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:594 +msgid "Pending" msgstr "" -#: InvenTree/validators.py:32 InvenTree/validators.py:34 -msgid "Invalid physical unit" +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" msgstr "" -#: InvenTree/validators.py:40 -msgid "Not a valid currency code" +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" msgstr "" -#: InvenTree/validators.py:118 InvenTree/validators.py:134 -msgid "Overage value must not be negative" +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" msgstr "" -#: InvenTree/validators.py:136 -msgid "Overage must not exceed 100%" +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" msgstr "" -#: InvenTree/validators.py:142 -msgid "Invalid value for overage" +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" msgstr "" -#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 -msgid "Edit User Information" +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" msgstr "" -#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 -msgid "Set Password" +#: InvenTree/status_codes.py:43 order/models.py:1531 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" msgstr "" -#: InvenTree/views.py:434 -msgid "Password fields must match" +#: InvenTree/status_codes.py:62 +msgid "OK" msgstr "" -#: InvenTree/views.py:442 -msgid "Wrong password provided" +#: InvenTree/status_codes.py:63 +msgid "Attention needed" msgstr "" -#: InvenTree/views.py:650 templates/navbar.html:160 -msgid "System Information" +#: InvenTree/status_codes.py:64 +msgid "Damaged" msgstr "" -#: InvenTree/views.py:657 templates/navbar.html:171 -msgid "About InvenTree" +#: InvenTree/status_codes.py:65 +msgid "Destroyed" msgstr "" -#: build/api.py:51 part/api.py:156 stock/api.py:343 -msgid "Cascade" +#: InvenTree/status_codes.py:66 +msgid "Rejected" msgstr "" -#: build/api.py:64 build/models.py:261 -#: build/templates/build/build_base.html:191 -#: build/templates/build/detail.html:87 -msgid "Parent Build" +#: InvenTree/status_codes.py:70 +msgid "Quarantined" msgstr "" -#: build/api.py:89 order/api.py:92 templates/js/translated/table_filters.js:101 -#: templates/js/translated/table_filters.js:549 -#: templates/js/translated/table_filters.js:633 -#: templates/js/translated/table_filters.js:674 -msgid "Assigned to me" +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" msgstr "" -#: build/api.py:106 build/templates/build/build_base.html:205 -#: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_report.html:152 -#: templates/js/translated/table_filters.js:552 -msgid "Issued By" +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" msgstr "" -#: build/api.py:125 -msgid "Assigned To" +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" msgstr "" -#: build/api.py:301 -msgid "Build must be cancelled before it can be deleted" +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" msgstr "" -#: build/api.py:345 build/serializers.py:1288 part/models.py:4265 -#: templates/js/translated/bom.js:997 templates/js/translated/bom.js:1037 -#: templates/js/translated/build.js:2702 -#: templates/js/translated/table_filters.js:197 -#: templates/js/translated/table_filters.js:586 -msgid "Consumable" +#: InvenTree/status_codes.py:100 +msgid "Stock counted" msgstr "" -#: build/api.py:346 build/serializers.py:1289 part/models.py:4259 -#: part/templates/part/upload_bom.html:58 templates/js/translated/bom.js:1001 -#: templates/js/translated/bom.js:1028 templates/js/translated/build.js:2693 -#: templates/js/translated/table_filters.js:193 -#: templates/js/translated/table_filters.js:222 -#: templates/js/translated/table_filters.js:590 -msgid "Optional" +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" msgstr "" -#: build/api.py:347 common/models.py:1489 part/admin.py:91 part/admin.py:428 -#: part/models.py:1154 part/serializers.py:1575 -#: templates/js/translated/bom.js:1639 -#: templates/js/translated/table_filters.js:337 -#: templates/js/translated/table_filters.js:729 -msgid "Assembly" +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" msgstr "" -#: build/api.py:348 templates/js/translated/table_filters.js:415 -#: templates/js/translated/table_filters.js:582 -msgid "Tracked" +#: InvenTree/status_codes.py:105 +msgid "Location changed" msgstr "" -#: build/api.py:349 build/serializers.py:1290 part/models.py:1172 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:779 -msgid "Testable" +#: InvenTree/status_codes.py:106 +msgid "Stock updated" msgstr "" -#: build/api.py:351 part/admin.py:144 templates/js/translated/build.js:1917 -#: templates/js/translated/build.js:2820 -#: templates/js/translated/sales_order.js:1965 -#: templates/js/translated/table_filters.js:574 -msgid "Allocated" +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" msgstr "" -#: build/api.py:359 company/models.py:891 company/serializers.py:395 -#: company/templates/company/supplier_part.html:114 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2752 -#: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:235 -#: templates/js/translated/part.js:695 templates/js/translated/part.js:697 -#: templates/js/translated/part.js:702 -#: templates/js/translated/table_filters.js:347 -#: templates/js/translated/table_filters.js:578 -msgid "Available" +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" msgstr "" -#: build/models.py:86 build/templates/build/build_base.html:9 -#: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_report.html:105 -#: stock/serializers.py:84 templates/email/build_order_completed.html:16 -#: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:1145 templates/js/translated/stock.js:2976 -msgid "Build Order" +#: InvenTree/status_codes.py:112 +msgid "Installed component item" msgstr "" -#: build/models.py:87 build/templates/build/build_base.html:13 -#: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:111 -#: order/templates/order/so_sidebar.html:13 -#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 -#: templates/InvenTree/search.html:141 -#: templates/InvenTree/settings/sidebar.html:55 -#: templates/js/translated/search.js:186 users/models.py:207 -msgid "Build Orders" +#: InvenTree/status_codes.py:113 +msgid "Removed component item" msgstr "" -#: build/models.py:135 -msgid "Assembly BOM has not been validated" +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" msgstr "" -#: build/models.py:142 -msgid "Build order cannot be created for an inactive part" +#: InvenTree/status_codes.py:117 +msgid "Split child item" msgstr "" -#: build/models.py:149 -msgid "Build order cannot be created for an unlocked part" +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1826 +msgid "Merged stock items" msgstr "" -#: build/models.py:163 -msgid "Invalid choice for parent build" +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" msgstr "" -#: build/models.py:174 order/models.py:239 -msgid "Responsible user or group must be specified" +#: InvenTree/status_codes.py:126 +msgid "Build order output created" msgstr "" -#: build/models.py:180 -msgid "Build order part cannot be changed" +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" msgstr "" -#: build/models.py:241 -msgid "Build Order Reference" +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" msgstr "" -#: build/models.py:242 build/serializers.py:1287 order/models.py:467 -#: order/models.py:978 order/models.py:1373 order/models.py:2135 -#: part/admin.py:414 part/models.py:4280 part/templates/part/upload_bom.html:54 -#: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_purchase_order_report.html:28 -#: report/templates/report/inventree_return_order_report.html:26 -#: report/templates/report/inventree_sales_order_report.html:28 -#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:1011 templates/js/translated/build.js:2685 -#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2135 -#: templates/js/translated/return_order.js:727 -#: templates/js/translated/sales_order.js:1854 -msgid "Reference" +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1732 +msgid "Consumed by build order" msgstr "" -#: build/models.py:253 -msgid "Brief description of the build (optional)" +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:177 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" msgstr "" -#: build/models.py:262 +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "" + +#: build/api.py:237 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:281 part/models.py:3977 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2516 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:579 +msgid "Consumable" +msgstr "" + +#: build/api.py:282 part/models.py:3971 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2525 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:583 +msgid "Optional" +msgstr "" + +#: build/api.py:283 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:575 +msgid "Tracked" +msgstr "" + +#: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1736 +#: templates/js/translated/build.js:2621 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:567 +msgid "Allocated" +msgstr "" + +#: build/api.py:293 company/models.py:881 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2557 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:226 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:571 +msgid "Available" +msgstr "" + +#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2863 +msgid "Build Order" +msgstr "" + +#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:194 +msgid "Build Orders" +msgstr "" + +#: build/models.py:116 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:127 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:171 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:172 order/models.py:422 order/models.py:876 +#: order/models.py:1254 order/models.py:1954 part/admin.py:416 +#: part/models.py:3992 part/templates/part/upload_bom.html:54 +#: report/templates/report/inventree_bill_of_materials_report.html:139 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 +#: templates/js/translated/build.js:2508 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2062 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 +msgid "Reference" +msgstr "" + +#: build/models.py:183 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:191 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:192 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:267 build/serializers.py:1278 -#: build/templates/build/build_base.html:105 -#: build/templates/build/detail.html:29 company/models.py:1046 order/api.py:767 -#: order/models.py:1503 order/models.py:1658 order/models.py:1659 -#: part/api.py:1509 part/api.py:1813 part/models.py:424 part/models.py:3126 -#: part/models.py:3270 part/models.py:3418 part/models.py:3439 -#: part/models.py:3461 part/models.py:3597 part/models.py:3937 -#: part/models.py:4100 part/models.py:4231 part/models.py:4592 -#: part/serializers.py:1192 part/serializers.py:1836 +#: build/models.py:197 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1030 +#: order/models.py:1379 order/models.py:1511 order/models.py:1512 +#: part/models.py:388 part/models.py:2977 part/models.py:3121 +#: part/models.py:3265 part/models.py:3288 part/models.py:3309 +#: part/models.py:3331 part/models.py:3438 part/models.py:3723 +#: part/models.py:3850 part/models.py:3943 part/models.py:4304 +#: part/serializers.py:1028 part/serializers.py:1591 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_report.html:109 -#: report/templates/report/inventree_purchase_order_report.html:27 -#: report/templates/report/inventree_return_order_report.html:24 -#: report/templates/report/inventree_sales_order_report.html:27 -#: report/templates/report/inventree_stock_location_report.html:102 -#: stock/serializers.py:111 stock/serializers.py:159 stock/serializers.py:446 -#: stock/serializers.py:916 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:201 stock/serializers.py:611 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:577 templates/js/translated/bom.js:632 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1002 templates/js/translated/build.js:1485 -#: templates/js/translated/build.js:1916 templates/js/translated/build.js:2334 -#: templates/js/translated/build.js:2507 templates/js/translated/company.js:348 -#: templates/js/translated/company.js:1116 -#: templates/js/translated/company.js:1271 -#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 -#: templates/js/translated/part.js:1950 templates/js/translated/part.js:2022 -#: templates/js/translated/part.js:2330 templates/js/translated/pricing.js:369 -#: templates/js/translated/purchase_order.js:751 -#: templates/js/translated/purchase_order.js:1367 -#: templates/js/translated/purchase_order.js:1918 -#: templates/js/translated/purchase_order.js:2077 -#: templates/js/translated/return_order.js:538 -#: templates/js/translated/return_order.js:708 +#: templates/js/translated/build.js:1304 templates/js/translated/build.js:1735 +#: templates/js/translated/build.js:2155 templates/js/translated/build.js:2328 +#: templates/js/translated/company.js:348 +#: templates/js/translated/company.js:1106 +#: templates/js/translated/company.js:1261 +#: templates/js/translated/company.js:1549 templates/js/translated/index.js:109 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:760 +#: templates/js/translated/purchase_order.js:1300 +#: templates/js/translated/purchase_order.js:1845 +#: templates/js/translated/purchase_order.js:2004 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1233 -#: templates/js/translated/sales_order.js:1634 -#: templates/js/translated/sales_order.js:1832 -#: templates/js/translated/stock.js:682 templates/js/translated/stock.js:848 -#: templates/js/translated/stock.js:1065 templates/js/translated/stock.js:2082 -#: templates/js/translated/stock.js:2941 templates/js/translated/stock.js:3174 -#: templates/js/translated/stock.js:3319 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1967 +#: templates/js/translated/stock.js:2828 templates/js/translated/stock.js:3061 +#: templates/js/translated/stock.js:3204 msgid "Part" msgstr "" -#: build/models.py:275 +#: build/models.py:205 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:210 msgid "Sales Order Reference" msgstr "" -#: build/models.py:284 +#: build/models.py:214 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:289 build/serializers.py:1048 -#: templates/js/translated/build.js:1904 -#: templates/js/translated/sales_order.js:1221 +#: build/models.py:219 build/serializers.py:946 +#: templates/js/translated/build.js:1723 +#: templates/js/translated/sales_order.js:1185 msgid "Source Location" msgstr "" -#: build/models.py:293 +#: build/models.py:223 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:298 +#: build/models.py:228 msgid "Destination Location" msgstr "" -#: build/models.py:302 +#: build/models.py:232 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:306 +#: build/models.py:236 msgid "Build Quantity" msgstr "" -#: build/models.py:309 +#: build/models.py:239 msgid "Number of stock items to build" msgstr "" -#: build/models.py:313 +#: build/models.py:243 msgid "Completed items" msgstr "" -#: build/models.py:315 +#: build/models.py:245 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:319 +#: build/models.py:249 msgid "Build Status" msgstr "" -#: build/models.py:323 +#: build/models.py:253 msgid "Build status code" msgstr "" -#: build/models.py:332 build/serializers.py:302 build/serializers.py:1198 -#: order/serializers.py:670 stock/models.py:859 stock/serializers.py:76 -#: stock/serializers.py:1562 templates/js/translated/purchase_order.js:1129 -#: templates/js/translated/stock.js:1199 +#: build/models.py:262 build/serializers.py:279 order/serializers.py:525 +#: stock/models.py:818 stock/serializers.py:1234 +#: templates/js/translated/purchase_order.js:1125 msgid "Batch Code" msgstr "" -#: build/models.py:336 build/serializers.py:303 +#: build/models.py:266 build/serializers.py:280 msgid "Batch code for this build output" msgstr "" -#: build/models.py:339 order/models.py:315 order/serializers.py:126 -#: part/models.py:1229 part/templates/part/part_base.html:319 -#: templates/js/translated/return_order.js:338 -#: templates/js/translated/sales_order.js:863 +#: build/models.py:269 order/models.py:286 part/models.py:1062 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 msgid "Creation Date" msgstr "" -#: build/models.py:343 +#: build/models.py:273 msgid "Target completion date" msgstr "" -#: build/models.py:344 +#: build/models.py:274 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:347 order/models.py:526 order/models.py:2180 -#: templates/js/translated/build.js:2419 +#: build/models.py:277 order/models.py:480 order/models.py:1999 +#: templates/js/translated/build.js:2240 msgid "Completion Date" msgstr "" -#: build/models.py:353 +#: build/models.py:283 msgid "completed by" msgstr "" -#: build/models.py:361 templates/js/translated/build.js:2379 +#: build/models.py:291 templates/js/translated/build.js:2200 msgid "Issued by" msgstr "" -#: build/models.py:362 +#: build/models.py:292 msgid "User who issued this build order" msgstr "" -#: build/models.py:370 build/templates/build/build_base.html:212 -#: build/templates/build/detail.html:122 common/models.py:165 order/api.py:142 -#: order/models.py:333 order/templates/order/order_base.html:222 -#: order/templates/order/return_order_base.html:191 -#: order/templates/order/sales_order_base.html:235 part/models.py:1246 -#: part/templates/part/part_base.html:399 -#: report/templates/report/inventree_build_order_report.html:158 +#: build/models.py:300 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:142 +#: order/models.py:304 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1079 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2391 -#: templates/js/translated/purchase_order.js:1833 -#: templates/js/translated/return_order.js:358 -#: templates/js/translated/table_filters.js:551 +#: templates/js/translated/build.js:2212 +#: templates/js/translated/purchase_order.js:1760 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:527 msgid "Responsible" msgstr "" -#: build/models.py:371 +#: build/models.py:301 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:376 build/templates/build/detail.html:108 +#: build/models.py:306 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 -#: order/templates/order/order_base.html:172 -#: order/templates/order/return_order_base.html:148 -#: order/templates/order/sales_order_base.html:187 -#: part/templates/part/part_base.html:392 stock/models.py:855 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:814 #: stock/templates/stock/item_base.html:200 -#: templates/js/translated/company.js:1019 +#: templates/js/translated/company.js:1009 msgid "External Link" msgstr "" -#: build/models.py:377 common/models.py:3273 part/models.py:1058 -#: stock/models.py:855 -msgid "Link to external URL" -msgstr "" - -#: build/models.py:381 +#: build/models.py:311 msgid "Build Priority" msgstr "" -#: build/models.py:384 +#: build/models.py:314 msgid "Priority of this build order" msgstr "" -#: build/models.py:391 common/models.py:135 common/models.py:149 -#: order/admin.py:18 order/api.py:128 order/models.py:297 -#: templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2316 -#: templates/js/translated/purchase_order.js:1780 -#: templates/js/translated/return_order.js:317 -#: templates/js/translated/sales_order.js:842 -#: templates/js/translated/table_filters.js:47 +#: build/models.py:321 common/models.py:126 order/admin.py:18 +#: order/models.py:268 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2137 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:392 +#: build/models.py:322 msgid "Project code for this build order" msgstr "" -#: build/models.py:651 build/models.py:778 -msgid "Failed to offload task to complete build allocations" -msgstr "" - -#: build/models.py:673 +#: build/models.py:557 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:679 +#: build/models.py:563 msgid "A build order has been completed" msgstr "" -#: build/models.py:967 build/models.py:1055 +#: build/models.py:781 build/models.py:856 msgid "No build output specified" msgstr "" -#: build/models.py:970 +#: build/models.py:784 msgid "Build output is already completed" msgstr "" -#: build/models.py:973 +#: build/models.py:787 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1059 build/serializers.py:235 build/serializers.py:284 -#: build/serializers.py:915 order/models.py:564 order/serializers.py:499 -#: order/serializers.py:665 part/serializers.py:1569 part/serializers.py:1999 -#: stock/models.py:700 stock/models.py:1520 stock/serializers.py:669 +#: build/models.py:860 build/serializers.py:222 build/serializers.py:261 +#: build/serializers.py:819 order/models.py:518 order/serializers.py:393 +#: order/serializers.py:520 part/serializers.py:1385 part/serializers.py:1749 +#: stock/models.py:659 stock/models.py:1469 stock/serializers.py:399 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1064 build/serializers.py:240 +#: build/models.py:865 build/serializers.py:227 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1124 build/serializers.py:563 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1465 -msgid "Build Order Line Item" -msgstr "" - -#: build/models.py:1490 +#: build/models.py:1279 msgid "Build object" msgstr "" -#: build/models.py:1504 build/models.py:1760 build/serializers.py:222 -#: build/serializers.py:269 build/serializers.py:1295 -#: build/templates/build/build_base.html:110 -#: build/templates/build/detail.html:34 common/models.py:2579 -#: order/models.py:1356 order/models.py:2041 order/serializers.py:1460 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:413 -#: part/forms.py:48 part/models.py:3284 part/models.py:4253 +#: build/models.py:1293 build/models.py:1551 build/serializers.py:209 +#: build/serializers.py:246 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2360 +#: order/models.py:1237 order/models.py:1877 order/serializers.py:1282 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:415 +#: part/forms.py:48 part/models.py:3135 part/models.py:3965 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_report.html:113 -#: report/templates/report/inventree_purchase_order_report.html:29 -#: report/templates/report/inventree_sales_order_report.html:29 -#: report/templates/report/inventree_stock_location_report.html:104 -#: report/templates/report/inventree_test_report.html:90 -#: report/templates/report/inventree_test_report.html:169 stock/admin.py:159 -#: stock/serializers.py:127 stock/serializers.py:167 stock/serializers.py:660 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:158 stock/serializers.py:390 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:579 templates/js/translated/bom.js:771 -#: templates/js/translated/bom.js:981 templates/js/translated/build.js:522 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1542 -#: templates/js/translated/build.js:1919 templates/js/translated/build.js:2529 -#: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:237 -#: templates/js/translated/order.js:329 templates/js/translated/part.js:968 -#: templates/js/translated/part.js:1818 templates/js/translated/part.js:3360 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1361 +#: templates/js/translated/build.js:1738 templates/js/translated/build.js:2350 +#: templates/js/translated/company.js:1808 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3310 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 -#: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1922 -#: templates/js/translated/purchase_order.js:2141 +#: templates/js/translated/purchase_order.js:763 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2068 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1235 -#: templates/js/translated/sales_order.js:1554 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1734 -#: templates/js/translated/sales_order.js:1860 -#: templates/js/translated/stock.js:570 templates/js/translated/stock.js:708 -#: templates/js/translated/stock.js:879 templates/js/translated/stock.js:3105 -#: templates/js/translated/stock.js:3188 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:2992 +#: templates/js/translated/stock.js:3075 msgid "Quantity" msgstr "" -#: build/models.py:1505 +#: build/models.py:1294 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1585 +#: build/models.py:1374 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1594 +#: build/models.py:1383 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1604 order/models.py:1992 +#: build/models.py:1393 order/models.py:1828 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1610 order/models.py:1995 +#: build/models.py:1399 order/models.py:1831 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1616 +#: build/models.py:1405 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1675 +#: build/models.py:1466 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1747 build/serializers.py:895 order/serializers.py:1297 -#: order/serializers.py:1318 stock/models.py:376 stock/serializers.py:93 -#: stock/serializers.py:763 stock/serializers.py:1281 stock/serializers.py:1393 -#: stock/templates/stock/item_base.html:10 +#: build/models.py:1538 build/serializers.py:799 order/serializers.py:1126 +#: order/serializers.py:1147 stock/serializers.py:493 stock/serializers.py:961 +#: stock/serializers.py:1073 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1918 +#: templates/js/translated/build.js:1737 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1234 -#: templates/js/translated/sales_order.js:1535 -#: templates/js/translated/sales_order.js:1540 -#: templates/js/translated/sales_order.js:1641 -#: templates/js/translated/sales_order.js:1728 -#: templates/js/translated/stock.js:683 templates/js/translated/stock.js:849 -#: templates/js/translated/stock.js:3061 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2948 msgid "Stock Item" msgstr "" -#: build/models.py:1748 +#: build/models.py:1539 msgid "Source stock item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1552 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1769 +#: build/models.py:1560 msgid "Install into" msgstr "" -#: build/models.py:1770 +#: build/models.py:1561 msgid "Destination stock item" msgstr "" -#: build/serializers.py:91 -msgid "Build Level" -msgstr "" - -#: build/serializers.py:99 build/serializers.py:1190 build/serializers.py:1279 -#: part/admin.py:41 part/admin.py:408 part/models.py:4102 part/stocktake.py:219 -#: stock/admin.py:156 -msgid "Part Name" -msgstr "" - -#: build/serializers.py:111 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:172 build/serializers.py:924 -#: templates/js/translated/build.js:1042 templates/js/translated/build.js:1495 +#: build/serializers.py:159 build/serializers.py:828 +#: templates/js/translated/build.js:1314 msgid "Build Output" msgstr "" -#: build/serializers.py:184 +#: build/serializers.py:171 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:188 +#: build/serializers.py:175 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:192 +#: build/serializers.py:179 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:203 +#: build/serializers.py:190 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:223 build/serializers.py:270 +#: build/serializers.py:210 build/serializers.py:247 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:291 +#: build/serializers.py:268 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:294 +#: build/serializers.py:271 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:309 order/serializers.py:678 order/serializers.py:1464 -#: stock/serializers.py:680 templates/js/translated/purchase_order.js:1154 -#: templates/js/translated/stock.js:373 templates/js/translated/stock.js:571 +#: build/serializers.py:286 order/serializers.py:533 order/serializers.py:1286 +#: stock/serializers.py:410 templates/js/translated/purchase_order.js:1149 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:310 +#: build/serializers.py:287 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:315 build/serializers.py:456 build/serializers.py:528 -#: order/serializers.py:654 order/serializers.py:778 order/serializers.py:1781 -#: part/serializers.py:1212 stock/serializers.py:102 stock/serializers.py:691 -#: stock/serializers.py:851 stock/serializers.py:977 stock/serializers.py:1425 -#: stock/serializers.py:1681 stock/templates/stock/item_base.html:394 -#: templates/js/translated/barcode.js:578 -#: templates/js/translated/barcode.js:826 templates/js/translated/build.js:1032 -#: templates/js/translated/build.js:1174 templates/js/translated/build.js:2544 -#: templates/js/translated/purchase_order.js:1210 -#: templates/js/translated/purchase_order.js:1320 -#: templates/js/translated/sales_order.js:1547 -#: templates/js/translated/sales_order.js:1655 -#: templates/js/translated/sales_order.js:1663 -#: templates/js/translated/sales_order.js:1742 -#: templates/js/translated/stock.js:684 templates/js/translated/stock.js:850 -#: templates/js/translated/stock.js:1067 templates/js/translated/stock.js:2286 -#: templates/js/translated/stock.js:2955 -msgid "Location" -msgstr "" - -#: build/serializers.py:316 -msgid "Stock location for build output" -msgstr "" - -#: build/serializers.py:330 +#: build/serializers.py:300 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:301 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:346 -msgid "Serial numbers must be provided for trackable parts" -msgstr "" - -#: build/serializers.py:371 stock/api.py:1031 +#: build/serializers.py:336 stock/api.py:950 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:418 build/serializers.py:480 build/serializers.py:569 +#: build/serializers.py:387 build/serializers.py:449 build/serializers.py:527 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:457 +#: build/serializers.py:425 build/serializers.py:497 order/serializers.py:509 +#: order/serializers.py:617 order/serializers.py:1622 part/serializers.py:1048 +#: stock/serializers.py:421 stock/serializers.py:576 stock/serializers.py:672 +#: stock/serializers.py:1105 stock/serializers.py:1353 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2365 +#: templates/js/translated/purchase_order.js:1174 +#: templates/js/translated/purchase_order.js:1264 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2171 +#: templates/js/translated/stock.js:2842 +msgid "Location" +msgstr "" + +#: build/serializers.py:426 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:463 +#: build/serializers.py:432 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:464 +#: build/serializers.py:433 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:469 +#: build/serializers.py:438 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:498 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:535 build/templates/build/build_base.html:159 -#: build/templates/build/detail.html:62 order/models.py:476 -#: order/models.py:1002 order/models.py:2159 order/serializers.py:686 -#: stock/admin.py:164 stock/serializers.py:1028 stock/serializers.py:1569 +#: build/serializers.py:504 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:900 +#: order/models.py:1978 order/serializers.py:541 stock/admin.py:163 +#: stock/serializers.py:723 stock/serializers.py:1241 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2363 -#: templates/js/translated/purchase_order.js:1371 -#: templates/js/translated/purchase_order.js:1792 -#: templates/js/translated/return_order.js:330 -#: templates/js/translated/sales_order.js:855 -#: templates/js/translated/stock.js:2261 templates/js/translated/stock.js:3079 -#: templates/js/translated/stock.js:3204 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2184 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1719 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2146 templates/js/translated/stock.js:2966 +#: templates/js/translated/stock.js:3091 msgid "Status" msgstr "" -#: build/serializers.py:541 +#: build/serializers.py:510 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:542 +#: build/serializers.py:511 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:654 -msgid "Consume Allocated Stock" +#: build/serializers.py:580 +msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:655 -msgid "Consume any stock which has already been allocated to this build" +#: build/serializers.py:581 +msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:661 +#: build/serializers.py:587 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:662 +#: build/serializers.py:588 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:689 +#: build/serializers.py:615 msgid "Not permitted" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:616 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:617 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:721 +#: build/serializers.py:639 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:723 +#: build/serializers.py:641 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:651 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:656 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:739 +#: build/serializers.py:657 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:749 templates/js/translated/build.js:316 +#: build/serializers.py:667 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:754 order/serializers.py:345 order/serializers.py:1365 +#: build/serializers.py:672 order/serializers.py:278 order/serializers.py:1189 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:755 +#: build/serializers.py:673 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:765 templates/js/translated/build.js:320 +#: build/serializers.py:683 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:774 -msgid "Build order has open child build orders" -msgstr "" - -#: build/serializers.py:777 -msgid "Build order must be in production state" -msgstr "" - -#: build/serializers.py:780 templates/js/translated/build.js:304 +#: build/serializers.py:692 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:722 msgid "Build Line" msgstr "" -#: build/serializers.py:828 +#: build/serializers.py:732 msgid "Build output" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:740 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:872 +#: build/serializers.py:776 msgid "Build Line Item" msgstr "" -#: build/serializers.py:886 +#: build/serializers.py:790 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:901 stock/serializers.py:1294 +#: build/serializers.py:805 stock/serializers.py:974 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:949 order/serializers.py:1351 +#: build/serializers.py:853 order/serializers.py:1180 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:955 +#: build/serializers.py:859 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:962 +#: build/serializers.py:866 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:986 order/serializers.py:1610 +#: build/serializers.py:890 order/serializers.py:1432 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1049 +#: build/serializers.py:947 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1057 +#: build/serializers.py:955 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1058 +#: build/serializers.py:956 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1063 +#: build/serializers.py:961 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1064 +#: build/serializers.py:962 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1069 +#: build/serializers.py:967 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:968 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1075 +#: build/serializers.py:973 msgid "Optional Items" msgstr "" -#: build/serializers.py:1076 +#: build/serializers.py:974 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1098 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1181 -msgid "Supplier Part Number" -msgstr "" - -#: build/serializers.py:1182 company/models.py:506 -msgid "Manufacturer Part Number" -msgstr "" - -#: build/serializers.py:1183 stock/admin.py:53 stock/admin.py:175 -#: stock/serializers.py:457 -msgid "Location Name" -msgstr "" - -#: build/serializers.py:1184 -msgid "Build Reference" -msgstr "" - -#: build/serializers.py:1185 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 company/models.py:852 -#: company/templates/company/supplier_part.html:160 order/serializers.py:690 -#: stock/admin.py:228 stock/models.py:818 stock/serializers.py:1579 -#: stock/templates/stock/item_base.html:240 -#: templates/js/translated/company.js:1646 -#: templates/js/translated/purchase_order.js:1169 -#: templates/js/translated/purchase_order.js:1332 -#: templates/js/translated/stock.js:1214 templates/js/translated/stock.js:1246 -#: templates/js/translated/stock.js:2509 -msgid "Packaging" -msgstr "" - -#: build/serializers.py:1189 part/admin.py:39 part/admin.py:398 -#: part/models.py:4101 part/stocktake.py:218 stock/admin.py:152 -msgid "Part ID" -msgstr "" - -#: build/serializers.py:1191 build/serializers.py:1280 part/admin.py:402 -#: part/models.py:4103 -msgid "Part IPN" -msgstr "" - -#: build/serializers.py:1192 build/serializers.py:1282 part/admin.py:45 -#: part/stocktake.py:220 -msgid "Part Description" -msgstr "" - -#: build/serializers.py:1195 -msgid "BOM Part ID" -msgstr "" - -#: build/serializers.py:1196 -msgid "BOM Part Name" -msgstr "" - -#: build/serializers.py:1199 -#: report/templates/report/inventree_return_order_report.html:25 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:845 -#: stock/serializers.py:151 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:520 templates/js/translated/build.js:1540 -#: templates/js/translated/build.js:2527 -#: templates/js/translated/model_renderers.js:231 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:722 -#: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1647 -#: templates/js/translated/sales_order.js:1732 -#: templates/js/translated/stock.js:602 -msgid "Serial Number" -msgstr "" - -#: build/serializers.py:1212 stock/serializers.py:593 -#: templates/js/translated/build.js:1017 templates/js/translated/build.js:1164 -#: templates/js/translated/build.js:2516 -msgid "Allocated Quantity" -msgstr "" - -#: build/serializers.py:1213 stock/templates/stock/item_base.html:340 -msgid "Available Quantity" -msgstr "" - -#: build/serializers.py:1283 -msgid "Part Category ID" -msgstr "" - -#: build/serializers.py:1284 -msgid "Part Category Name" -msgstr "" - -#: build/serializers.py:1291 common/models.py:1513 part/admin.py:113 -#: part/models.py:1166 templates/js/translated/table_filters.js:150 -#: templates/js/translated/table_filters.js:230 -#: templates/js/translated/table_filters.js:783 -msgid "Trackable" -msgstr "" - -#: build/serializers.py:1292 -msgid "Inherited" -msgstr "" - -#: build/serializers.py:1293 part/models.py:4313 -#: part/templates/part/upload_bom.html:56 templates/js/translated/bom.js:1046 -#: templates/js/translated/build.js:2711 -msgid "Allow Variants" -msgstr "" - -#: build/serializers.py:1297 part/models.py:4110 part/models.py:4584 -#: stock/api.py:794 -msgid "BOM Item" -msgstr "" - -#: build/serializers.py:1306 build/templates/build/detail.html:236 -#: build/templates/build/sidebar.html:16 templates/js/translated/index.js:130 -msgid "Allocated Stock" -msgstr "" - -#: build/serializers.py:1311 order/serializers.py:1175 part/admin.py:132 -#: part/bom.py:181 part/serializers.py:899 part/serializers.py:1602 -#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2804 templates/js/translated/part.js:712 -#: templates/js/translated/part.js:2155 -#: templates/js/translated/table_filters.js:177 -msgid "On Order" -msgstr "" - -#: build/serializers.py:1316 order/serializers.py:1176 part/serializers.py:1604 -#: templates/js/translated/build.js:2808 -#: templates/js/translated/table_filters.js:367 -msgid "In Production" -msgstr "" - -#: build/serializers.py:1321 part/bom.py:180 part/serializers.py:1629 -#: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1929 -msgid "Available Stock" -msgstr "" - -#: build/serializers.py:1325 -msgid "Available Substitute Stock" -msgstr "" - -#: build/serializers.py:1326 -msgid "Available Variant Stock" -msgstr "" - -#: build/serializers.py:1327 -msgid "Total Available Stock" -msgstr "" - -#: build/serializers.py:1328 part/serializers.py:906 -msgid "External Stock" -msgstr "" - -#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 -#: order/status_codes.py:42 order/status_codes.py:74 order/status_codes.py:98 -#: templates/js/translated/table_filters.js:601 -msgid "Pending" -msgstr "" - -#: build/status_codes.py:12 -msgid "Production" -msgstr "" - -#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:49 -#: order/status_codes.py:79 -msgid "On Hold" -msgstr "" - -#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:51 -#: order/status_codes.py:82 -msgid "Cancelled" -msgstr "" - -#: build/status_codes.py:15 generic/states/tests.py:19 importer/models.py:509 -#: importer/status_codes.py:19 order/status_codes.py:15 -#: order/status_codes.py:50 order/status_codes.py:81 -#: order/templates/order/order_base.html:163 -#: order/templates/order/sales_order_base.html:168 report/models.py:443 -msgid "Complete" -msgstr "" - -#: build/tasks.py:184 +#: build/tasks.py:149 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:201 +#: build/tasks.py:166 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:206 +#: build/tasks.py:171 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1764,8 +1671,8 @@ msgstr "" #: order/templates/order/sales_order_base.html:38 #: part/templates/part/part_base.html:41 #: stock/templates/stock/item_base.html:40 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/filters.js:338 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 msgid "Barcode actions" msgstr "" @@ -1776,7 +1683,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:42 #: part/templates/part/part_base.html:44 #: stock/templates/stock/item_base.html:44 -#: stock/templates/stock/location.html:54 templates/qr_button.html:1 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -1787,9 +1694,9 @@ msgstr "" #: order/templates/order/sales_order_base.html:45 #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:47 -#: stock/templates/stock/location.html:56 -#: templates/js/translated/barcode.js:527 -#: templates/js/translated/barcode.js:532 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" msgstr "" @@ -1800,7 +1707,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:47 #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:49 -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:61 msgid "Link Barcode" msgstr "" @@ -1824,135 +1731,121 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:73 -msgid "Duplicate Build" +msgid "Cancel Build" msgstr "" #: build/templates/build/build_base.html:76 -msgid "Hold Build" +msgid "Duplicate Build" msgstr "" #: build/templates/build/build_base.html:79 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:82 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:87 -msgid "Isueue Build" -msgstr "" - -#: build/templates/build/build_base.html:88 -msgid "Issue Build" -msgstr "" - -#: build/templates/build/build_base.html:91 -#: build/templates/build/build_base.html:92 +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:107 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:125 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:132 +#: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:137 +#: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:142 +#: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:147 +#: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:168 -#: build/templates/build/detail.html:138 order/models.py:308 -#: order/models.py:1391 order/serializers.py:174 -#: order/templates/order/order_base.html:191 -#: order/templates/order/return_order_base.html:167 -#: order/templates/order/sales_order_base.html:199 -#: report/templates/report/inventree_build_order_report.html:125 -#: templates/js/translated/build.js:2411 templates/js/translated/part.js:1837 -#: templates/js/translated/purchase_order.js:1809 -#: templates/js/translated/purchase_order.js:2217 -#: templates/js/translated/return_order.js:346 -#: templates/js/translated/return_order.js:749 -#: templates/js/translated/sales_order.js:871 -#: templates/js/translated/sales_order.js:1903 +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:279 +#: order/models.py:1272 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2232 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1736 +#: templates/js/translated/purchase_order.js:2144 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:173 +#: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:173 -#: build/templates/build/build_base.html:230 -#: order/templates/order/order_base.html:127 -#: order/templates/order/return_order_base.html:120 -#: order/templates/order/sales_order_base.html:129 -#: templates/js/translated/table_filters.js:97 -#: templates/js/translated/table_filters.js:545 -#: templates/js/translated/table_filters.js:629 -#: templates/js/translated/table_filters.js:670 +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:663 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:185 +#: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" msgstr "" -#: build/templates/build/build_base.html:198 -#: build/templates/build/detail.html:101 order/api.py:1406 order/models.py:892 -#: order/models.py:1650 order/models.py:1765 order/models.py:1924 +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1408 order/models.py:1503 +#: order/models.py:1613 order/models.py:1765 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_report.html:135 -#: report/templates/report/inventree_sales_order_report.html:14 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:805 -#: templates/js/translated/sales_order.js:1028 -#: templates/js/translated/stock.js:3008 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2895 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:219 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2328 -msgid "Priority" -msgstr "" - -#: build/templates/build/build_base.html:267 -msgid "Issue Build Order" +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:271 -msgid "Issue this Build Order?" +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2149 +msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:302 +#: build/templates/build/build_base.html:273 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:312 +#: build/templates/build/build_base.html:283 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:324 +#: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" msgstr "" @@ -1968,8 +1861,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1532 -#: templates/js/translated/purchase_order.js:2259 +#: build/templates/build/detail.html:49 order/models.py:1408 +#: templates/js/translated/purchase_order.js:2186 msgid "Destination" msgstr "" @@ -1981,23 +1874,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:162 +#: build/templates/build/detail.html:80 stock/admin.py:161 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1553 -#: templates/js/translated/model_renderers.js:242 -#: templates/js/translated/purchase_order.js:1326 -#: templates/js/translated/stock.js:1139 templates/js/translated/stock.js:1240 -#: templates/js/translated/stock.js:2275 templates/js/translated/stock.js:3211 -#: templates/js/translated/table_filters.js:320 -#: templates/js/translated/table_filters.js:411 +#: templates/js/translated/build.js:1372 +#: templates/js/translated/model_renderers.js:233 +#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2160 +#: templates/js/translated/stock.js:3098 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:178 -#: order/templates/order/return_order_base.html:154 -#: order/templates/order/sales_order_base.html:193 -#: templates/js/translated/build.js:2371 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2192 msgid "Created" msgstr "" @@ -2006,8 +1899,8 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:209 -#: templates/js/translated/table_filters.js:692 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:685 msgid "Completed" msgstr "" @@ -2015,12 +1908,12 @@ msgstr "" msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:21 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" #: build/templates/build/detail.html:177 -msgid "Build Order Line Items" +msgid "Allocate Stock to Build" msgstr "" #: build/templates/build/detail.html:181 @@ -2043,7 +1936,7 @@ msgstr "" msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:188 +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" @@ -2052,39 +1945,31 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:192 -#: templates/js/translated/purchase_order.js:795 +#: templates/js/translated/purchase_order.js:803 msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:205 -msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" - -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:210 msgid "Incomplete Build Outputs" msgstr "" -#: build/templates/build/detail.html:219 +#: build/templates/build/detail.html:214 msgid "Create new build output" msgstr "" -#: build/templates/build/detail.html:220 +#: build/templates/build/detail.html:215 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:249 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:261 +#: build/templates/build/detail.html:244 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:273 -msgid "Build test statistics" -msgstr "" - -#: build/templates/build/detail.html:288 build/templates/build/sidebar.html:27 +#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2094,25 +1979,25 @@ msgstr "" #: order/templates/order/return_order_detail.html:70 #: order/templates/order/return_order_sidebar.html:7 #: order/templates/order/sales_order_detail.html:124 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:63 stock/templates/stock/item.html:110 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:303 +#: build/templates/build/detail.html:271 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:458 +#: build/templates/build/detail.html:426 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:459 +#: build/templates/build/detail.html:427 msgid "All lines have been fully allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:335 +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 msgid "New Build Order" msgstr "" @@ -2120,57 +2005,10 @@ msgstr "" msgid "Build Order Details" msgstr "" -#: build/templates/build/sidebar.html:8 order/serializers.py:82 -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_purchase_order_report.html:22 -#: report/templates/report/inventree_return_order_report.html:19 -#: report/templates/report/inventree_sales_order_report.html:22 -msgid "Line Items" -msgstr "" - #: build/templates/build/sidebar.html:10 msgid "Incomplete Outputs" msgstr "" -#: build/templates/build/sidebar.html:24 -#: part/templates/part/part_sidebar.html:56 -msgid "Test Statistics" -msgstr "" - -#: common/api.py:693 -msgid "Is Link" -msgstr "" - -#: common/api.py:701 -msgid "Is File" -msgstr "" - -#: common/api.py:744 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:761 -msgid "User does not have permission to delete this attachment" -msgstr "" - -#: common/currency.py:132 -msgid "Invalid currency code" -msgstr "" - -#: common/currency.py:134 -msgid "Duplicate currency code" -msgstr "" - -#: common/currency.py:139 -msgid "No valid currency codes provided" -msgstr "" - -#: common/currency.py:156 -msgid "No plugin" -msgstr "" - #: common/files.py:63 #, python-brace-format msgid "Unsupported file format: {fmt}" @@ -2209,1763 +2047,1549 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:86 +#: common/models.py:72 msgid "Updated" msgstr "" -#: common/models.py:87 +#: common/models.py:73 msgid "Timestamp of last update" msgstr "" -#: common/models.py:120 -msgid "Site URL is locked by configuration" -msgstr "" - -#: common/models.py:150 +#: common/models.py:127 msgid "Unique project code" msgstr "" -#: common/models.py:157 +#: common/models.py:134 msgid "Project description" msgstr "" -#: common/models.py:166 +#: common/models.py:143 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:783 +#: common/models.py:714 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:787 +#: common/models.py:718 msgid "Settings value" msgstr "" -#: common/models.py:839 +#: common/models.py:770 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:855 +#: common/models.py:786 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:863 +#: common/models.py:794 msgid "Value must be an integer value" msgstr "" -#: common/models.py:900 +#: common/models.py:831 msgid "Key string must be unique" msgstr "" -#: common/models.py:1132 +#: common/models.py:1063 msgid "No group" msgstr "" -#: common/models.py:1231 +#: common/models.py:1088 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1090 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1102 +msgid "No plugin" +msgstr "" + +#: common/models.py:1176 msgid "Restart required" msgstr "" -#: common/models.py:1233 +#: common/models.py:1178 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1240 +#: common/models.py:1185 msgid "Pending migrations" msgstr "" -#: common/models.py:1241 +#: common/models.py:1186 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1246 +#: common/models.py:1191 msgid "Server Instance Name" msgstr "" -#: common/models.py:1248 +#: common/models.py:1193 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1252 +#: common/models.py:1197 msgid "Use instance name" msgstr "" -#: common/models.py:1253 +#: common/models.py:1198 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1258 +#: common/models.py:1203 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1259 +#: common/models.py:1204 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1264 company/models.py:111 company/models.py:112 +#: common/models.py:1209 company/models.py:109 company/models.py:110 msgid "Company name" msgstr "" -#: common/models.py:1265 +#: common/models.py:1210 msgid "Internal company name" msgstr "" -#: common/models.py:1269 +#: common/models.py:1214 msgid "Base URL" msgstr "" -#: common/models.py:1270 +#: common/models.py:1215 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1276 +#: common/models.py:1221 msgid "Default Currency" msgstr "" -#: common/models.py:1277 +#: common/models.py:1222 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1283 -msgid "Supported Currencies" -msgstr "" - -#: common/models.py:1284 -msgid "List of supported currency codes" -msgstr "" - -#: common/models.py:1290 +#: common/models.py:1228 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1292 +#: common/models.py:1230 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1295 common/models.py:1351 common/models.py:1364 -#: common/models.py:1372 common/models.py:1381 common/models.py:1390 -#: common/models.py:1627 common/models.py:1649 common/models.py:1764 -#: common/models.py:2146 +#: common/models.py:1233 common/models.py:1289 common/models.py:1302 +#: common/models.py:1310 common/models.py:1319 common/models.py:1328 +#: common/models.py:1530 common/models.py:1552 common/models.py:1661 +#: common/models.py:1918 msgid "days" msgstr "" -#: common/models.py:1299 +#: common/models.py:1237 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1300 +#: common/models.py:1238 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1305 +#: common/models.py:1243 msgid "Download from URL" msgstr "" -#: common/models.py:1307 +#: common/models.py:1245 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1313 +#: common/models.py:1251 msgid "Download Size Limit" msgstr "" -#: common/models.py:1314 +#: common/models.py:1252 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1320 +#: common/models.py:1258 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1322 +#: common/models.py:1260 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1327 +#: common/models.py:1265 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1328 +#: common/models.py:1266 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1333 +#: common/models.py:1271 msgid "Require confirm" msgstr "" -#: common/models.py:1334 +#: common/models.py:1272 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1339 +#: common/models.py:1277 msgid "Tree Depth" msgstr "" -#: common/models.py:1341 +#: common/models.py:1279 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1347 +#: common/models.py:1285 msgid "Update Check Interval" msgstr "" -#: common/models.py:1348 +#: common/models.py:1286 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1354 +#: common/models.py:1292 msgid "Automatic Backup" msgstr "" -#: common/models.py:1355 +#: common/models.py:1293 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1360 +#: common/models.py:1298 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1361 +#: common/models.py:1299 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1367 +#: common/models.py:1305 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1307 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1376 +#: common/models.py:1314 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1378 +#: common/models.py:1316 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1385 +#: common/models.py:1323 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1387 +#: common/models.py:1325 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1394 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1332 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1395 +#: common/models.py:1333 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1400 +#: common/models.py:1338 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1401 +#: common/models.py:1339 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1407 +#: common/models.py:1345 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1408 +#: common/models.py:1346 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1413 -msgid "Barcode Show Data" -msgstr "" - -#: common/models.py:1414 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/models.py:1419 -msgid "Barcode Generation Plugin" -msgstr "" - -#: common/models.py:1420 -msgid "Plugin to use for internal barcode data generation" -msgstr "" - -#: common/models.py:1425 +#: common/models.py:1351 msgid "Part Revisions" msgstr "" -#: common/models.py:1426 +#: common/models.py:1352 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1431 -msgid "Assembly Revision Only" -msgstr "" - -#: common/models.py:1432 -msgid "Only allow revisions for assembly parts" -msgstr "" - -#: common/models.py:1437 -msgid "Allow Deletion from Assembly" -msgstr "" - -#: common/models.py:1438 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" - -#: common/models.py:1443 +#: common/models.py:1357 msgid "IPN Regex" msgstr "" -#: common/models.py:1444 +#: common/models.py:1358 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1447 +#: common/models.py:1361 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1448 +#: common/models.py:1362 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1453 +#: common/models.py:1367 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1454 +#: common/models.py:1368 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1459 +#: common/models.py:1373 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1460 +#: common/models.py:1374 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1465 +#: common/models.py:1379 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1466 +#: common/models.py:1380 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1471 +#: common/models.py:1385 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1472 +#: common/models.py:1386 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1477 +#: common/models.py:1391 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1478 +#: common/models.py:1392 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1483 part/admin.py:108 part/models.py:3945 -#: report/models.py:293 report/models.py:360 report/serializers.py:90 -#: report/serializers.py:131 stock/serializers.py:232 -#: templates/js/translated/table_filters.js:138 -#: templates/js/translated/table_filters.js:775 +#: common/models.py:1397 part/admin.py:108 part/models.py:3731 +#: report/models.py:178 templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:763 msgid "Template" msgstr "" -#: common/models.py:1484 +#: common/models.py:1398 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1490 +#: common/models.py:1403 part/admin.py:91 part/admin.py:430 part/models.py:999 +#: templates/js/translated/bom.js:1633 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:717 +msgid "Assembly" +msgstr "" + +#: common/models.py:1404 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1495 part/admin.py:95 part/models.py:1160 -#: part/serializers.py:1596 templates/js/translated/table_filters.js:737 +#: common/models.py:1409 part/admin.py:95 part/models.py:1005 +#: templates/js/translated/table_filters.js:725 msgid "Component" msgstr "" -#: common/models.py:1496 +#: common/models.py:1410 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1501 part/admin.py:100 part/models.py:1178 +#: common/models.py:1415 part/admin.py:100 part/models.py:1017 msgid "Purchaseable" msgstr "" -#: common/models.py:1502 +#: common/models.py:1416 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1507 part/admin.py:104 part/models.py:1184 -#: templates/js/translated/table_filters.js:763 +#: common/models.py:1421 part/admin.py:104 part/models.py:1023 +#: templates/js/translated/table_filters.js:751 msgid "Salable" msgstr "" -#: common/models.py:1508 +#: common/models.py:1422 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1514 +#: common/models.py:1427 part/admin.py:113 part/models.py:1011 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:767 +msgid "Trackable" +msgstr "" + +#: common/models.py:1428 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1519 part/admin.py:117 part/models.py:1200 +#: common/models.py:1433 part/admin.py:117 part/models.py:1033 #: part/templates/part/part_base.html:154 -#: templates/js/translated/table_filters.js:142 -#: templates/js/translated/table_filters.js:787 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:771 msgid "Virtual" msgstr "" -#: common/models.py:1520 +#: common/models.py:1434 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1525 +#: common/models.py:1439 msgid "Show Import in Views" msgstr "" -#: common/models.py:1526 +#: common/models.py:1440 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1531 +#: common/models.py:1445 msgid "Show related parts" msgstr "" -#: common/models.py:1532 +#: common/models.py:1446 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1537 +#: common/models.py:1451 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1538 +#: common/models.py:1452 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1543 templates/js/translated/part.js:108 +#: common/models.py:1457 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1545 +#: common/models.py:1459 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1551 +#: common/models.py:1465 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1552 +#: common/models.py:1466 msgid "Format to display the part name" msgstr "" -#: common/models.py:1558 +#: common/models.py:1472 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1559 +#: common/models.py:1473 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1564 +#: common/models.py:1477 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1566 +#: common/models.py:1479 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1572 +#: common/models.py:1485 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1574 +#: common/models.py:1487 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1585 +#: common/models.py:1493 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1587 +#: common/models.py:1495 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1598 +#: common/models.py:1501 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1600 +#: common/models.py:1503 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1606 +#: common/models.py:1509 msgid "Purchase History Override" msgstr "" -#: common/models.py:1608 +#: common/models.py:1511 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1614 +#: common/models.py:1517 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1616 +#: common/models.py:1519 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1622 +#: common/models.py:1525 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1624 +#: common/models.py:1527 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1631 +#: common/models.py:1534 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1632 +#: common/models.py:1535 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1637 +#: common/models.py:1540 msgid "Active Variants Only" msgstr "" -#: common/models.py:1639 +#: common/models.py:1542 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1645 +#: common/models.py:1548 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1647 +#: common/models.py:1550 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1654 +#: common/models.py:1557 msgid "Internal Prices" msgstr "" -#: common/models.py:1655 +#: common/models.py:1558 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1660 +#: common/models.py:1563 msgid "Internal Price Override" msgstr "" -#: common/models.py:1662 +#: common/models.py:1565 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1668 +#: common/models.py:1571 msgid "Enable label printing" msgstr "" -#: common/models.py:1669 +#: common/models.py:1572 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1674 +#: common/models.py:1577 msgid "Label Image DPI" msgstr "" -#: common/models.py:1676 +#: common/models.py:1579 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1682 +#: common/models.py:1585 msgid "Enable Reports" msgstr "" -#: common/models.py:1683 +#: common/models.py:1586 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1688 templates/stats.html:25 +#: common/models.py:1591 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1689 +#: common/models.py:1592 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1694 -msgid "Log Report Errors" -msgstr "" - -#: common/models.py:1695 -msgid "Log errors which occur when generating reports" -msgstr "" - -#: common/models.py:1700 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:301 +#: common/models.py:1597 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:199 msgid "Page Size" msgstr "" -#: common/models.py:1701 +#: common/models.py:1598 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1706 +#: common/models.py:1603 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1707 +#: common/models.py:1604 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1712 +#: common/models.py:1609 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1714 +#: common/models.py:1611 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1720 +#: common/models.py:1617 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1721 +#: common/models.py:1618 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1726 +#: common/models.py:1623 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1727 +#: common/models.py:1624 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1732 +#: common/models.py:1629 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1734 -msgid "Determines default behavior when a stock item is depleted" +#: common/models.py:1631 +msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1740 +#: common/models.py:1637 msgid "Batch Code Template" msgstr "" -#: common/models.py:1742 +#: common/models.py:1639 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1747 +#: common/models.py:1644 msgid "Stock Expiry" msgstr "" -#: common/models.py:1748 +#: common/models.py:1645 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1753 +#: common/models.py:1650 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1754 +#: common/models.py:1651 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1759 +#: common/models.py:1656 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1761 +#: common/models.py:1658 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1768 +#: common/models.py:1665 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1769 +#: common/models.py:1666 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1774 +#: common/models.py:1671 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1775 +#: common/models.py:1672 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1780 +#: common/models.py:1677 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1781 +#: common/models.py:1678 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1786 +#: common/models.py:1682 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1787 +#: common/models.py:1683 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1792 -msgid "Check BOM when installing items" -msgstr "" - -#: common/models.py:1794 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" - -#: common/models.py:1800 -msgid "Allow Out of Stock Transfer" -msgstr "" - -#: common/models.py:1802 -msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/models.py:1808 +#: common/models.py:1688 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1810 +#: common/models.py:1690 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1816 common/models.py:1872 common/models.py:1894 -#: common/models.py:1930 -msgid "Require Responsible Owner" -msgstr "" - -#: common/models.py:1817 common/models.py:1873 common/models.py:1895 -#: common/models.py:1931 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/models.py:1822 -msgid "Require Active Part" -msgstr "" - -#: common/models.py:1823 -msgid "Prevent build order creation for inactive parts" -msgstr "" - -#: common/models.py:1828 -msgid "Require Locked Part" -msgstr "" - -#: common/models.py:1829 -msgid "Prevent build order creation for unlocked parts" -msgstr "" - -#: common/models.py:1834 -msgid "Require Valid BOM" -msgstr "" - -#: common/models.py:1836 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" - -#: common/models.py:1842 -msgid "Require Closed Child Orders" -msgstr "" - -#: common/models.py:1844 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" - -#: common/models.py:1850 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/models.py:1852 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" - -#: common/models.py:1858 +#: common/models.py:1696 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1859 +#: common/models.py:1697 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1864 +#: common/models.py:1702 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1866 +#: common/models.py:1704 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1878 +#: common/models.py:1710 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1880 +#: common/models.py:1712 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1886 +#: common/models.py:1718 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1888 +#: common/models.py:1720 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1900 +#: common/models.py:1726 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1901 +#: common/models.py:1727 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1906 +#: common/models.py:1732 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1908 +#: common/models.py:1734 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1914 -msgid "Mark Shipped Orders as Complete" -msgstr "" - -#: common/models.py:1916 -msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" - -#: common/models.py:1922 +#: common/models.py:1740 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1924 +#: common/models.py:1742 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1936 +#: common/models.py:1748 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1938 +#: common/models.py:1750 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1944 +#: common/models.py:1756 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1946 +#: common/models.py:1758 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1953 +#: common/models.py:1765 msgid "Enable password forgot" msgstr "" -#: common/models.py:1954 +#: common/models.py:1766 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1959 +#: common/models.py:1771 msgid "Enable registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1772 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1965 +#: common/models.py:1777 msgid "Enable SSO" msgstr "" -#: common/models.py:1966 +#: common/models.py:1778 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1971 +#: common/models.py:1783 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1973 +#: common/models.py:1785 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1979 -msgid "Enable SSO group sync" -msgstr "" - -#: common/models.py:1981 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - -#: common/models.py:1987 -msgid "SSO group key" -msgstr "" - -#: common/models.py:1989 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/models.py:1995 -msgid "SSO group map" -msgstr "" - -#: common/models.py:1997 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" - -#: common/models.py:2003 -msgid "Remove groups outside of SSO" -msgstr "" - -#: common/models.py:2005 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/models.py:2011 +#: common/models.py:1791 msgid "Email required" msgstr "" -#: common/models.py:2012 +#: common/models.py:1792 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:2017 +#: common/models.py:1797 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:2019 +#: common/models.py:1799 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:2025 +#: common/models.py:1805 msgid "Mail twice" msgstr "" -#: common/models.py:2026 +#: common/models.py:1806 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:2031 +#: common/models.py:1811 msgid "Password twice" msgstr "" -#: common/models.py:2032 +#: common/models.py:1812 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:2037 +#: common/models.py:1817 msgid "Allowed domains" msgstr "" -#: common/models.py:2039 +#: common/models.py:1819 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:2045 +#: common/models.py:1825 msgid "Group on signup" msgstr "" -#: common/models.py:2047 -msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." +#: common/models.py:1826 +msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:2053 +#: common/models.py:1831 msgid "Enforce MFA" msgstr "" -#: common/models.py:2054 +#: common/models.py:1832 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:2059 +#: common/models.py:1837 msgid "Check plugins on startup" msgstr "" -#: common/models.py:2061 +#: common/models.py:1839 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:2069 -msgid "Check for plugin updates" -msgstr "" - -#: common/models.py:2070 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/models.py:2076 +#: common/models.py:1848 msgid "Enable URL integration" msgstr "" -#: common/models.py:2077 +#: common/models.py:1849 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:2083 +#: common/models.py:1855 msgid "Enable navigation integration" msgstr "" -#: common/models.py:2084 +#: common/models.py:1856 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:2090 +#: common/models.py:1862 msgid "Enable app integration" msgstr "" -#: common/models.py:2091 +#: common/models.py:1863 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2097 +#: common/models.py:1869 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2098 +#: common/models.py:1870 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2104 +#: common/models.py:1876 msgid "Enable event integration" msgstr "" -#: common/models.py:2105 +#: common/models.py:1877 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2111 +#: common/models.py:1883 msgid "Enable project codes" msgstr "" -#: common/models.py:2112 +#: common/models.py:1884 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2117 +#: common/models.py:1889 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2119 +#: common/models.py:1891 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2125 +#: common/models.py:1897 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2127 +#: common/models.py:1899 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2133 +#: common/models.py:1905 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2135 +#: common/models.py:1907 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2141 +#: common/models.py:1913 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2143 +#: common/models.py:1915 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2150 +#: common/models.py:1922 msgid "Display Users full names" msgstr "" -#: common/models.py:2151 +#: common/models.py:1923 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2156 -msgid "Enable Test Station Data" -msgstr "" - -#: common/models.py:2157 -msgid "Enable test station data collection for test results" -msgstr "" - -#: common/models.py:2169 common/models.py:2549 +#: common/models.py:1935 common/models.py:2330 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2212 +#: common/models.py:1976 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2214 +#: common/models.py:1978 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2220 +#: common/models.py:1984 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2221 +#: common/models.py:1985 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2226 +#: common/models.py:1990 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2227 +#: common/models.py:1991 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2232 +#: common/models.py:1996 msgid "Show latest parts" msgstr "" -#: common/models.py:2233 +#: common/models.py:1997 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2238 -msgid "Show invalid BOMs" +#: common/models.py:2002 +msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:2239 +#: common/models.py:2003 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2244 +#: common/models.py:2008 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2245 +#: common/models.py:2009 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2250 +#: common/models.py:2014 msgid "Show low stock" msgstr "" -#: common/models.py:2251 +#: common/models.py:2015 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2256 +#: common/models.py:2020 msgid "Show depleted stock" msgstr "" -#: common/models.py:2257 +#: common/models.py:2021 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2262 +#: common/models.py:2026 msgid "Show needed stock" msgstr "" -#: common/models.py:2263 +#: common/models.py:2027 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2268 +#: common/models.py:2032 msgid "Show expired stock" msgstr "" -#: common/models.py:2269 +#: common/models.py:2033 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2274 +#: common/models.py:2038 msgid "Show stale stock" msgstr "" -#: common/models.py:2275 +#: common/models.py:2039 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2280 +#: common/models.py:2044 msgid "Show pending builds" msgstr "" -#: common/models.py:2281 +#: common/models.py:2045 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2286 +#: common/models.py:2050 msgid "Show overdue builds" msgstr "" -#: common/models.py:2287 +#: common/models.py:2051 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2292 +#: common/models.py:2056 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2293 +#: common/models.py:2057 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2298 +#: common/models.py:2062 msgid "Show overdue POs" msgstr "" -#: common/models.py:2299 +#: common/models.py:2063 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2304 +#: common/models.py:2068 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2305 +#: common/models.py:2069 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2310 +#: common/models.py:2074 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2311 +#: common/models.py:2075 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2316 +#: common/models.py:2080 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2317 +#: common/models.py:2081 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2322 +#: common/models.py:2086 msgid "Show News" msgstr "" -#: common/models.py:2323 +#: common/models.py:2087 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2328 +#: common/models.py:2092 msgid "Inline label display" msgstr "" -#: common/models.py:2330 +#: common/models.py:2094 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2336 +#: common/models.py:2100 msgid "Default label printer" msgstr "" -#: common/models.py:2338 +#: common/models.py:2102 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2344 +#: common/models.py:2108 msgid "Inline report display" msgstr "" -#: common/models.py:2346 +#: common/models.py:2110 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2352 +#: common/models.py:2116 msgid "Search Parts" msgstr "" -#: common/models.py:2353 +#: common/models.py:2117 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2358 +#: common/models.py:2122 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2359 +#: common/models.py:2123 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2364 +#: common/models.py:2128 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2365 +#: common/models.py:2129 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2370 +#: common/models.py:2134 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2371 +#: common/models.py:2135 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2376 +#: common/models.py:2140 msgid "Search Categories" msgstr "" -#: common/models.py:2377 +#: common/models.py:2141 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2382 +#: common/models.py:2146 msgid "Search Stock" msgstr "" -#: common/models.py:2383 +#: common/models.py:2147 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2388 +#: common/models.py:2152 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2390 +#: common/models.py:2154 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2396 +#: common/models.py:2160 msgid "Search Locations" msgstr "" -#: common/models.py:2397 +#: common/models.py:2161 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2402 +#: common/models.py:2166 msgid "Search Companies" msgstr "" -#: common/models.py:2403 +#: common/models.py:2167 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2408 +#: common/models.py:2172 msgid "Search Build Orders" msgstr "" -#: common/models.py:2409 +#: common/models.py:2173 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2414 +#: common/models.py:2178 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2415 +#: common/models.py:2179 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2420 +#: common/models.py:2184 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2422 +#: common/models.py:2186 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2428 +#: common/models.py:2192 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2429 +#: common/models.py:2193 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2434 +#: common/models.py:2198 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2436 +#: common/models.py:2200 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2442 +#: common/models.py:2206 msgid "Search Return Orders" msgstr "" -#: common/models.py:2443 +#: common/models.py:2207 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2448 +#: common/models.py:2212 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2450 +#: common/models.py:2214 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2456 +#: common/models.py:2220 msgid "Search Preview Results" msgstr "" -#: common/models.py:2458 +#: common/models.py:2222 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2464 +#: common/models.py:2228 msgid "Regex Search" msgstr "" -#: common/models.py:2465 +#: common/models.py:2229 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2470 +#: common/models.py:2234 msgid "Whole Word Search" msgstr "" -#: common/models.py:2471 +#: common/models.py:2235 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2476 +#: common/models.py:2240 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2477 +#: common/models.py:2241 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2482 +#: common/models.py:2246 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2483 +#: common/models.py:2247 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2488 +#: common/models.py:2252 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2489 +#: common/models.py:2253 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2494 +#: common/models.py:2258 msgid "Date Format" msgstr "" -#: common/models.py:2495 +#: common/models.py:2259 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2508 part/templates/part/detail.html:41 +#: common/models.py:2272 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2509 +#: common/models.py:2273 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2514 part/templates/part/detail.html:62 +#: common/models.py:2278 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2516 +#: common/models.py:2280 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2522 +#: common/models.py:2286 msgid "Table String Length" msgstr "" -#: common/models.py:2524 +#: common/models.py:2288 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2530 -msgid "Receive error reports" +#: common/models.py:2294 +msgid "Default part label template" msgstr "" -#: common/models.py:2531 -msgid "Receive notifications for system errors" +#: common/models.py:2295 +msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2536 -msgid "Last used printing machines" +#: common/models.py:2300 +msgid "Default stock item template" msgstr "" -#: common/models.py:2537 -msgid "Save the last used printing machines for a user" +#: common/models.py:2302 +msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2557 common/models.py:2558 common/models.py:2715 -#: common/models.py:2716 common/models.py:2961 common/models.py:2962 -#: common/models.py:3288 common/models.py:3289 importer/models.py:88 -#: part/models.py:3307 part/models.py:3394 part/models.py:3468 -#: part/models.py:3496 plugin/models.py:274 plugin/models.py:275 -#: report/templates/report/inventree_test_report.html:105 -#: templates/js/translated/stock.js:3120 users/models.py:111 -msgid "User" +#: common/models.py:2308 +msgid "Default stock location label template" msgstr "" -#: common/models.py:2580 +#: common/models.py:2310 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2316 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2317 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2361 msgid "Price break quantity" msgstr "" -#: common/models.py:2587 company/serializers.py:513 order/admin.py:42 -#: order/models.py:1430 order/models.py:2417 -#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1892 +#: common/models.py:2368 company/serializers.py:481 order/admin.py:42 +#: order/models.py:1311 order/models.py:2199 +#: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:739 +#: templates/js/translated/return_order.js:741 msgid "Price" msgstr "" -#: common/models.py:2588 +#: common/models.py:2369 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2692 common/models.py:2877 +#: common/models.py:2540 common/models.py:2725 msgid "Endpoint" msgstr "" -#: common/models.py:2693 +#: common/models.py:2541 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2703 +#: common/models.py:2551 msgid "Name for this webhook" msgstr "" -#: common/models.py:2707 +#: common/models.py:2555 part/admin.py:88 part/models.py:1028 +#: plugin/models.py:45 templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:516 +#: templates/js/translated/table_filters.js:712 users/models.py:169 +msgid "Active" +msgstr "" + +#: common/models.py:2555 msgid "Is this webhook active" msgstr "" -#: common/models.py:2723 users/models.py:159 +#: common/models.py:2571 users/models.py:148 msgid "Token" msgstr "" -#: common/models.py:2724 +#: common/models.py:2572 msgid "Token for access" msgstr "" -#: common/models.py:2732 +#: common/models.py:2580 msgid "Secret" msgstr "" -#: common/models.py:2733 +#: common/models.py:2581 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2841 +#: common/models.py:2689 msgid "Message ID" msgstr "" -#: common/models.py:2842 +#: common/models.py:2690 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2850 +#: common/models.py:2698 msgid "Host" msgstr "" -#: common/models.py:2851 +#: common/models.py:2699 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2859 +#: common/models.py:2707 msgid "Header" msgstr "" -#: common/models.py:2860 +#: common/models.py:2708 msgid "Header of this message" msgstr "" -#: common/models.py:2867 +#: common/models.py:2715 msgid "Body" msgstr "" -#: common/models.py:2868 +#: common/models.py:2716 msgid "Body of this message" msgstr "" -#: common/models.py:2878 +#: common/models.py:2726 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2883 +#: common/models.py:2731 msgid "Worked on" msgstr "" -#: common/models.py:2884 +#: common/models.py:2732 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3010 +#: common/models.py:2853 msgid "Id" msgstr "" -#: common/models.py:3012 templates/js/translated/company.js:965 +#: common/models.py:2855 templates/js/translated/company.js:955 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3014 common/models.py:3272 company/models.py:149 -#: company/models.py:446 company/models.py:512 company/models.py:818 -#: order/models.py:302 order/models.py:1385 order/models.py:1817 -#: part/admin.py:55 part/models.py:1057 -#: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_report.html:164 -#: stock/admin.py:229 templates/js/translated/company.js:1319 -#: templates/js/translated/company.js:1673 templates/js/translated/order.js:376 -#: templates/js/translated/part.js:2475 -#: templates/js/translated/purchase_order.js:2110 -#: templates/js/translated/purchase_order.js:2274 -#: templates/js/translated/return_order.js:778 -#: templates/js/translated/sales_order.js:1092 -#: templates/js/translated/sales_order.js:2023 -msgid "Link" -msgstr "" - -#: common/models.py:3016 templates/js/translated/news.js:60 +#: common/models.py:2859 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3018 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:2861 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:52 +#: common/models.py:2863 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3023 +#: common/models.py:2866 msgid "Read" msgstr "" -#: common/models.py:3023 +#: common/models.py:2866 msgid "Was this news item read?" msgstr "" -#: common/models.py:3040 company/models.py:159 part/models.py:1067 +#: common/models.py:2883 company/models.py:157 part/models.py:912 #: 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 +#: report/templates/report/inventree_return_order_report_base.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3040 +#: common/models.py:2883 msgid "Image file" msgstr "" -#: common/models.py:3052 common/models.py:3256 -msgid "Target model type for this image" -msgstr "" - -#: common/models.py:3056 -msgid "Target model ID for this image" -msgstr "" - -#: common/models.py:3078 -msgid "Custom Unit" -msgstr "" - -#: common/models.py:3099 -msgid "Unit symbol must be unique" -msgstr "" - -#: common/models.py:3114 +#: common/models.py:2925 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3133 +#: common/models.py:2944 msgid "Unit name" msgstr "" -#: common/models.py:3140 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:2951 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3141 +#: common/models.py:2952 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3147 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:2959 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3148 +#: common/models.py:2960 msgid "Unit definition" msgstr "" -#: common/models.py:3206 common/models.py:3263 stock/models.py:2558 -#: templates/js/translated/attachment.js:119 -#: templates/js/translated/attachment.js:345 -msgid "Attachment" -msgstr "" - -#: common/models.py:3218 -msgid "Missing file" -msgstr "" - -#: common/models.py:3219 -msgid "Missing external link" -msgstr "" - -#: common/models.py:3264 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:3279 templates/js/translated/attachment.js:120 -#: templates/js/translated/attachment.js:360 -msgid "Comment" -msgstr "" - -#: common/models.py:3280 -msgid "Attachment comment" -msgstr "" - -#: common/models.py:3296 -msgid "Upload date" -msgstr "" - -#: common/models.py:3297 -msgid "Date the file was uploaded" -msgstr "" - -#: common/models.py:3301 -msgid "File size" -msgstr "" - -#: common/models.py:3301 -msgid "File size in bytes" -msgstr "" - -#: common/models.py:3339 common/serializers.py:562 -msgid "Invalid model type specified for attachment" -msgstr "" - #: common/notifications.py:314 #, python-brace-format msgid "New {verbose_name}" @@ -3984,7 +3608,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:462 +#: common/notifications.py:330 common/notifications.py:337 msgid "Items Received" msgstr "" @@ -4000,103 +3624,66 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:375 +#: common/serializers.py:328 msgid "Is Running" msgstr "" -#: common/serializers.py:381 +#: common/serializers.py:334 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:387 +#: common/serializers.py:340 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:393 +#: common/serializers.py:346 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:361 msgid "Task ID" msgstr "" -#: common/serializers.py:408 +#: common/serializers.py:361 msgid "Unique task ID" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:363 msgid "Lock" msgstr "" -#: common/serializers.py:410 +#: common/serializers.py:363 msgid "Lock time" msgstr "" -#: common/serializers.py:412 +#: common/serializers.py:365 msgid "Task name" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:367 msgid "Function" msgstr "" -#: common/serializers.py:414 +#: common/serializers.py:367 msgid "Function name" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:369 msgid "Arguments" msgstr "" -#: common/serializers.py:416 +#: common/serializers.py:369 msgid "Task arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:372 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:419 +#: common/serializers.py:372 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:529 -msgid "Filename" -msgstr "" - -#: common/serializers.py:536 report/api.py:100 report/serializers.py:53 -msgid "Model Type" -msgstr "" - -#: common/serializers.py:565 -msgid "User does not have permission to create or edit attachments for this model" -msgstr "" - -#: common/validators.py:35 -msgid "No attachment model type provided" -msgstr "" - -#: common/validators.py:41 -msgid "Invalid attachment model type" -msgstr "" - -#: common/validators.py:82 -msgid "Minimum places cannot be greater than maximum places" -msgstr "" - -#: common/validators.py:94 -msgid "Maximum places cannot be less than minimum places" -msgstr "" - -#: common/validators.py:105 -msgid "An empty domain is not allowed." -msgstr "" - -#: common/validators.py:107 -#, python-brace-format -msgid "Invalid domain name: {domain}" -msgstr "" - #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 #: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 @@ -4135,546 +3722,480 @@ msgstr "" msgid "Previous Step" msgstr "" -#: company/api.py:141 -msgid "Part is Active" -msgstr "" - -#: company/api.py:145 -msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:278 -msgid "Supplier Part is Active" -msgstr "" - -#: company/api.py:282 -msgid "Internal Part is Active" -msgstr "" - -#: company/api.py:286 -msgid "Supplier is Active" -msgstr "" - -#: company/models.py:100 company/models.py:371 -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:812 -#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 -msgid "Company" -msgstr "" - -#: company/models.py:101 company/views.py:51 -#: templates/js/translated/search.js:192 -msgid "Companies" -msgstr "" - -#: company/models.py:117 +#: company/models.py:115 msgid "Company description" msgstr "" -#: company/models.py:118 +#: company/models.py:116 msgid "Description of the company" msgstr "" -#: company/models.py:123 company/templates/company/company_base.html:106 +#: company/models.py:121 company/templates/company/company_base.html:100 #: templates/InvenTree/settings/plugin_settings.html:54 -#: templates/js/translated/company.js:532 +#: templates/js/translated/company.js:522 msgid "Website" msgstr "" -#: company/models.py:123 +#: company/models.py:121 msgid "Company website URL" msgstr "" -#: company/models.py:128 +#: company/models.py:126 msgid "Phone number" msgstr "" -#: company/models.py:130 +#: company/models.py:128 msgid "Contact phone number" msgstr "" -#: company/models.py:137 +#: company/models.py:135 msgid "Contact email address" msgstr "" -#: company/models.py:142 company/models.py:275 -#: company/templates/company/company_base.html:145 order/models.py:342 -#: order/templates/order/order_base.html:208 -#: order/templates/order/return_order_base.html:177 -#: order/templates/order/sales_order_base.html:221 +#: company/models.py:140 company/templates/company/company_base.html:139 +#: order/models.py:313 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" -#: company/models.py:144 +#: company/models.py:142 msgid "Point of contact" msgstr "" -#: company/models.py:150 +#: company/models.py:148 msgid "Link to external company information" msgstr "" -#: company/models.py:163 -msgid "Is this company active?" -msgstr "" - -#: company/models.py:168 -msgid "Is customer" +#: company/models.py:162 +msgid "is customer" msgstr "" -#: company/models.py:169 +#: company/models.py:163 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:174 -msgid "Is supplier" +#: company/models.py:168 +msgid "is supplier" msgstr "" -#: company/models.py:175 +#: company/models.py:169 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:180 -msgid "Is manufacturer" +#: company/models.py:174 +msgid "is manufacturer" msgstr "" -#: company/models.py:181 +#: company/models.py:175 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:189 +#: company/models.py:183 msgid "Default currency used for this company" msgstr "" -#: company/models.py:314 company/templates/company/company_base.html:124 -#: order/models.py:352 order/templates/order/order_base.html:215 -#: order/templates/order/return_order_base.html:184 -#: order/templates/order/sales_order_base.html:228 -msgid "Address" -msgstr "" - -#: company/models.py:315 company/templates/company/sidebar.html:35 -msgid "Addresses" +#: company/models.py:268 company/models.py:377 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:733 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:495 +msgid "Company" msgstr "" -#: company/models.py:372 +#: company/models.py:378 msgid "Select company" msgstr "" -#: company/models.py:377 +#: company/models.py:383 msgid "Address title" msgstr "" -#: company/models.py:378 +#: company/models.py:384 msgid "Title describing the address entry" msgstr "" -#: company/models.py:384 +#: company/models.py:390 msgid "Primary address" msgstr "" -#: company/models.py:385 +#: company/models.py:391 msgid "Set as primary address" msgstr "" -#: company/models.py:390 templates/js/translated/company.js:914 -#: templates/js/translated/company.js:971 +#: company/models.py:396 templates/js/translated/company.js:904 +#: templates/js/translated/company.js:961 msgid "Line 1" msgstr "" -#: company/models.py:391 +#: company/models.py:397 msgid "Address line 1" msgstr "" -#: company/models.py:397 templates/js/translated/company.js:915 -#: templates/js/translated/company.js:977 +#: company/models.py:403 templates/js/translated/company.js:905 +#: templates/js/translated/company.js:967 msgid "Line 2" msgstr "" -#: company/models.py:398 +#: company/models.py:404 msgid "Address line 2" msgstr "" -#: company/models.py:404 company/models.py:405 -#: templates/js/translated/company.js:983 +#: company/models.py:410 company/models.py:411 +#: templates/js/translated/company.js:973 msgid "Postal code" msgstr "" -#: company/models.py:411 +#: company/models.py:417 msgid "City/Region" msgstr "" -#: company/models.py:412 +#: company/models.py:418 msgid "Postal code city/region" msgstr "" -#: company/models.py:418 +#: company/models.py:424 msgid "State/Province" msgstr "" -#: company/models.py:419 +#: company/models.py:425 msgid "State or province" msgstr "" -#: company/models.py:425 templates/js/translated/company.js:1001 +#: company/models.py:431 templates/js/translated/company.js:991 msgid "Country" msgstr "" -#: company/models.py:426 +#: company/models.py:432 msgid "Address country" msgstr "" -#: company/models.py:432 +#: company/models.py:438 msgid "Courier shipping notes" msgstr "" -#: company/models.py:433 +#: company/models.py:439 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:439 +#: company/models.py:445 msgid "Internal shipping notes" msgstr "" -#: company/models.py:440 +#: company/models.py:446 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:447 +#: company/models.py:453 msgid "Link to address information (external)" msgstr "" -#: company/models.py:470 company/models.py:587 company/models.py:811 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:217 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:487 company/models.py:779 stock/models.py:787 -#: stock/serializers.py:445 stock/templates/stock/item_base.html:142 +#: company/models.py:482 company/models.py:776 stock/models.py:746 +#: stock/serializers.py:200 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:489 company/models.py:781 +#: company/models.py:484 company/models.py:778 msgid "Select part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 +#: company/models.py:493 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:554 +#: company/templates/company/supplier_part.html:145 part/serializers.py:467 #: stock/templates/stock/item_base.html:207 -#: templates/js/translated/company.js:507 -#: templates/js/translated/company.js:1118 -#: templates/js/translated/company.js:1296 -#: templates/js/translated/company.js:1611 -#: templates/js/translated/table_filters.js:812 +#: templates/js/translated/company.js:506 +#: templates/js/translated/company.js:1108 +#: templates/js/translated/company.js:1286 +#: templates/js/translated/company.js:1601 +#: templates/js/translated/table_filters.js:792 msgid "Manufacturer" msgstr "" -#: company/models.py:499 +#: company/models.py:494 msgid "Select manufacturer" msgstr "" -#: company/models.py:505 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 order/serializers.py:556 -#: part/serializers.py:564 templates/js/translated/company.js:351 -#: templates/js/translated/company.js:1117 -#: templates/js/translated/company.js:1312 -#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1807 -#: templates/js/translated/purchase_order.js:1921 -#: templates/js/translated/purchase_order.js:2123 +#: company/models.py:500 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:477 +#: templates/js/translated/company.js:351 +#: templates/js/translated/company.js:1107 +#: templates/js/translated/company.js:1302 +#: templates/js/translated/company.js:1620 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2050 msgid "MPN" msgstr "" -#: company/models.py:513 +#: company/models.py:501 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:508 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:522 +#: company/models.py:516 msgid "Manufacturer part description" msgstr "" -#: company/models.py:575 -msgid "Manufacturer Part Parameter" +#: company/models.py:573 company/models.py:600 company/models.py:802 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" msgstr "" -#: company/models.py:594 +#: company/models.py:607 msgid "Parameter name" msgstr "" -#: company/models.py:600 report/templates/report/inventree_test_report.html:104 -#: stock/models.py:2550 templates/js/translated/company.js:1166 -#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1499 -#: templates/js/translated/stock.js:1607 +#: company/models.py:613 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2351 templates/js/translated/company.js:1156 +#: templates/js/translated/company.js:1409 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1502 msgid "Value" msgstr "" -#: company/models.py:601 +#: company/models.py:614 msgid "Parameter value" msgstr "" -#: company/models.py:608 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1147 part/models.py:3771 -#: part/templates/part/part_base.html:293 -#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1518 -#: templates/js/translated/part.js:1622 templates/js/translated/part.js:2376 +#: company/models.py:621 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:992 part/models.py:3582 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1415 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 msgid "Units" msgstr "" -#: company/models.py:609 +#: company/models.py:622 msgid "Parameter units" msgstr "" -#: company/models.py:662 company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:442 -#: order/serializers.py:491 stock/models.py:798 -#: stock/templates/stock/item_base.html:233 -#: templates/js/translated/build.js:1052 -#: templates/js/translated/company.js:1600 -#: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2365 -msgid "Supplier Part" -msgstr "" - -#: company/models.py:719 +#: company/models.py:716 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:726 +#: company/models.py:723 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:740 +#: company/models.py:737 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:789 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:491 -#: order/templates/order/order_base.html:141 part/bom.py:280 part/bom.py:318 -#: part/serializers.py:538 plugin/builtin/suppliers/digikey.py:25 +#: company/models.py:786 company/templates/company/company_base.html:81 +#: company/templates/company/supplier_part.html:129 order/models.py:445 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:451 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 #: templates/js/translated/company.js:350 -#: templates/js/translated/company.js:511 -#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1775 +#: templates/js/translated/company.js:510 +#: templates/js/translated/company.js:1574 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1759 -#: templates/js/translated/table_filters.js:816 +#: templates/js/translated/purchase_order.js:1686 +#: templates/js/translated/table_filters.js:796 msgid "Supplier" msgstr "" -#: company/models.py:790 +#: company/models.py:787 msgid "Select supplier" msgstr "" -#: company/models.py:796 part/serializers.py:549 +#: company/models.py:793 part/serializers.py:462 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:802 -msgid "Is this supplier part active?" -msgstr "" - -#: company/models.py:812 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:828 +#: company/models.py:818 msgid "Supplier part description" msgstr "" -#: company/models.py:835 company/templates/company/supplier_part.html:187 -#: order/serializers.py:698 part/admin.py:415 part/models.py:4288 -#: part/templates/part/upload_bom.html:59 +#: company/models.py:825 company/templates/company/supplier_part.html:187 +#: part/admin.py:417 part/models.py:4000 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_purchase_order_report.html:32 -#: report/templates/report/inventree_return_order_report.html:27 -#: report/templates/report/inventree_sales_order_report.html:32 -#: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:776 templates/js/translated/purchase_order.js:1185 -#: templates/js/translated/purchase_order.js:1344 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:506 msgid "Note" msgstr "" -#: company/models.py:844 part/models.py:2117 +#: company/models.py:834 part/models.py:1950 msgid "base cost" msgstr "" -#: company/models.py:845 part/models.py:2118 +#: company/models.py:835 part/models.py:1951 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:853 +#: company/models.py:842 company/templates/company/supplier_part.html:160 +#: stock/admin.py:222 stock/models.py:777 stock/serializers.py:1251 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1636 +#: templates/js/translated/stock.js:2394 +msgid "Packaging" +msgstr "" + +#: company/models.py:843 msgid "Part packaging" msgstr "" -#: company/models.py:858 templates/js/translated/company.js:1651 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:311 -#: templates/js/translated/purchase_order.js:841 -#: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/purchase_order.js:2171 +#: company/models.py:848 templates/js/translated/company.js:1641 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:314 +#: templates/js/translated/purchase_order.js:845 +#: templates/js/translated/purchase_order.js:1099 +#: templates/js/translated/purchase_order.js:2081 +#: templates/js/translated/purchase_order.js:2098 msgid "Pack Quantity" msgstr "" -#: company/models.py:860 +#: company/models.py:850 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:879 part/models.py:2124 +#: company/models.py:869 part/models.py:1957 msgid "multiple" msgstr "" -#: company/models.py:880 +#: company/models.py:870 msgid "Order multiple" msgstr "" -#: company/models.py:892 +#: company/models.py:882 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:898 +#: company/models.py:888 msgid "Availability Updated" msgstr "" -#: company/models.py:899 +#: company/models.py:889 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1027 -msgid "Supplier Price Break" -msgstr "" - -#: company/serializers.py:174 +#: company/serializers.py:153 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:210 -msgid "Company Name" -msgstr "" - -#: company/serializers.py:393 part/admin.py:126 part/serializers.py:898 -#: part/templates/part/part_base.html:197 -#: templates/js/translated/company.js:1689 -#: templates/js/translated/table_filters.js:362 -msgid "In Stock" -msgstr "" - -#: company/templates/company/company_base.html:16 -#: part/templates/part/part_base.html:146 -#: templates/js/translated/company.js:1287 -#: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:313 -#: templates/js/translated/part.js:817 templates/js/translated/part.js:1225 -msgid "Inactive" -msgstr "" - -#: company/templates/company/company_base.html:27 +#: company/templates/company/company_base.html:21 #: templates/js/translated/purchase_order.js:242 msgid "Create Purchase Order" msgstr "" -#: company/templates/company/company_base.html:33 +#: company/templates/company/company_base.html:27 msgid "Company actions" msgstr "" -#: company/templates/company/company_base.html:38 +#: company/templates/company/company_base.html:32 msgid "Edit company information" msgstr "" -#: company/templates/company/company_base.html:39 -#: templates/js/translated/company.js:445 +#: company/templates/company/company_base.html:33 +#: templates/js/translated/company.js:444 msgid "Edit Company" msgstr "" -#: company/templates/company/company_base.html:43 +#: company/templates/company/company_base.html:37 msgid "Delete company" msgstr "" -#: company/templates/company/company_base.html:44 -#: company/templates/company/company_base.html:168 +#: company/templates/company/company_base.html:38 +#: company/templates/company/company_base.html:162 msgid "Delete Company" msgstr "" -#: company/templates/company/company_base.html:53 +#: company/templates/company/company_base.html:47 #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_report.html:98 -#: report/templates/report/inventree_purchase_order_report.html:40 -#: report/templates/report/inventree_sales_order_report.html:40 -#: report/templates/report/inventree_test_report.html:84 -#: report/templates/report/inventree_test_report.html:162 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 msgid "Part image" msgstr "" -#: company/templates/company/company_base.html:61 +#: company/templates/company/company_base.html:55 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" msgstr "" -#: company/templates/company/company_base.html:64 +#: company/templates/company/company_base.html:58 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:66 +#: company/templates/company/company_base.html:60 #: part/templates/part/part_thumb.html:16 msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:990 -#: order/models.py:2147 order/templates/order/return_order_base.html:134 -#: order/templates/order/sales_order_base.html:151 stock/models.py:840 -#: stock/models.py:841 stock/serializers.py:1329 +#: company/templates/company/company_base.html:86 order/models.py:888 +#: order/models.py:1966 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:799 +#: stock/models.py:800 stock/serializers.py:1009 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:295 -#: templates/js/translated/sales_order.js:820 -#: templates/js/translated/stock.js:3043 -#: templates/js/translated/table_filters.js:820 +#: templates/js/translated/company.js:502 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2930 +#: templates/js/translated/table_filters.js:800 msgid "Customer" msgstr "" -#: company/templates/company/company_base.html:117 +#: company/templates/company/company_base.html:111 msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:131 +#: company/templates/company/company_base.html:118 order/models.py:323 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + +#: company/templates/company/company_base.html:125 msgid "Phone" msgstr "" -#: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:536 +#: company/templates/company/company_base.html:205 +#: part/templates/part/part_base.html:528 msgid "Remove Image" msgstr "" -#: company/templates/company/company_base.html:212 +#: company/templates/company/company_base.html:206 msgid "Remove associated image from this company" msgstr "" -#: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:539 +#: company/templates/company/company_base.html:208 +#: part/templates/part/part_base.html:531 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" -#: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:568 +#: company/templates/company/company_base.html:237 +#: part/templates/part/part_base.html:560 msgid "Upload Image" msgstr "" -#: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:622 +#: company/templates/company/company_base.html:252 +#: part/templates/part/part_base.html:614 msgid "Download Image" msgstr "" @@ -4690,7 +4211,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:372 +#: part/templates/part/detail.html:356 msgid "New Supplier Part" msgstr "" @@ -4703,7 +4224,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:46 part/templates/part/detail.html:392 +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 msgid "New Manufacturer Part" msgstr "" @@ -4717,11 +4238,11 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:122 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 #: templates/InvenTree/settings/sidebar.html:57 #: templates/js/translated/search.js:205 templates/navbar.html:50 -#: users/models.py:208 +#: users/models.py:195 msgid "Purchase Orders" msgstr "" @@ -4740,11 +4261,11 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:143 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 #: templates/InvenTree/settings/sidebar.html:59 #: templates/js/translated/search.js:219 templates/navbar.html:62 -#: users/models.py:209 +#: users/models.py:196 msgid "Sales Orders" msgstr "" @@ -4769,7 +4290,7 @@ msgstr "" #: order/templates/order/return_orders.html:15 #: templates/InvenTree/settings/sidebar.html:61 #: templates/js/translated/search.js:232 templates/navbar.html:65 -#: users/models.py:210 +#: users/models.py:197 msgid "Return Orders" msgstr "" @@ -4812,23 +4333,22 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:227 -#: part/templates/part/detail.html:125 part/templates/part/part_base.html:83 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:1343 +#: templates/js/translated/company.js:1333 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:1344 +#: templates/js/translated/company.js:1334 msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:448 -#: order/serializers.py:564 +#: company/templates/company/supplier_part.html:97 msgid "Internal Part" msgstr "" @@ -4838,32 +4358,27 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:904 -#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 -#: templates/navbar.html:48 +#: part/admin.py:122 part/templates/part/part_sidebar.html:33 +#: templates/InvenTree/search.html:190 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:156 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:20 -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:160 -#: part/templates/part/detail.html:216 +#: part/templates/part/detail.html:200 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part_parameters.html:24 msgid "New Parameter" msgstr "" -#: company/templates/company/manufacturer_part.html:177 -msgid "Manufacturer Part Notes" -msgstr "" - -#: company/templates/company/manufacturer_part.html:225 -#: templates/js/translated/part.js:1429 +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 msgid "Add Parameter" msgstr "" @@ -4887,15 +4402,28 @@ msgstr "" msgid "Contacts" msgstr "" +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 stock/models.py:757 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1590 +#: templates/js/translated/purchase_order.js:761 +#: templates/js/translated/stock.js:2250 +msgid "Supplier Part" +msgstr "" + #: company/templates/company/supplier_part.html:50 -#: templates/js/translated/company.js:1526 +#: templates/js/translated/company.js:1516 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:55 #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:228 -#: part/templates/part/detail.html:126 +#: part/templates/part/detail.html:110 msgid "Order Part" msgstr "" @@ -4905,1111 +4433,746 @@ msgid "Update Availability" msgstr "" #: company/templates/company/supplier_part.html:63 -#: company/templates/company/supplier_part.html:64 -#: templates/js/translated/company.js:294 -msgid "Edit Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:68 -#: company/templates/company/supplier_part.html:69 -#: templates/js/translated/company.js:269 -msgid "Duplicate Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:73 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:74 -msgid "Delete Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:133 -msgid "No supplier information available" -msgstr "" - -#: company/templates/company/supplier_part.html:139 order/serializers.py:553 -#: part/bom.py:287 part/bom.py:319 part/serializers.py:548 -#: templates/js/translated/company.js:349 templates/js/translated/part.js:1793 -#: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1920 -#: templates/js/translated/purchase_order.js:2098 -msgid "SKU" -msgstr "" - -#: company/templates/company/supplier_part.html:206 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:204 -msgid "Create new stock item" -msgstr "" - -#: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:205 -#: templates/js/translated/stock.js:543 -msgid "New Stock Item" -msgstr "" - -#: company/templates/company/supplier_part.html:223 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/supplier_part.html:246 -msgid "Pricing Information" -msgstr "" - -#: company/templates/company/supplier_part.html:251 -#: templates/js/translated/company.js:398 -#: templates/js/translated/pricing.js:684 -msgid "Add Price Break" -msgstr "" - -#: company/templates/company/supplier_part.html:270 -msgid "Supplier Part Notes" -msgstr "" - -#: company/templates/company/supplier_part.html:305 -msgid "Supplier Part QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:316 -msgid "Link Barcode to Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:388 -msgid "Update Part Availability" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:902 part/stocktake.py:223 -#: part/templates/part/category.html:180 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:68 -#: stock/serializers.py:1014 stock/serializers.py:1192 -#: stock/templates/stock/location.html:167 -#: stock/templates/stock/location.html:188 -#: stock/templates/stock/location.html:200 -#: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1067 -#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2850 -#: users/models.py:206 -msgid "Stock Items" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/views.py:32 -msgid "New Supplier" -msgstr "" - -#: company/views.py:38 -msgid "New Manufacturer" -msgstr "" - -#: company/views.py:43 templates/InvenTree/search.html:210 -#: templates/navbar.html:60 -msgid "Customers" -msgstr "" - -#: company/views.py:44 -msgid "New Customer" -msgstr "" - -#: company/views.py:52 -msgid "New Company" -msgstr "" - -#: generic/states/tests.py:18 order/status_codes.py:13 -msgid "Placed" -msgstr "" - -#: importer/mixins.py:263 -msgid "Invalid export format" -msgstr "" - -#: importer/models.py:59 -msgid "Timestamp" -msgstr "" - -#: importer/models.py:64 -msgid "Data file to import" -msgstr "" - -#: importer/models.py:73 templates/js/translated/tables.js:558 -msgid "Columns" -msgstr "" - -#: importer/models.py:84 -msgid "Import status" -msgstr "" - -#: importer/models.py:94 -msgid "Field Defaults" -msgstr "" - -#: importer/models.py:101 -msgid "Field Overrides" -msgstr "" - -#: importer/models.py:108 -msgid "Field Filters" -msgstr "" - -#: importer/models.py:230 -msgid "Some required fields have not been mapped" -msgstr "" - -#: importer/models.py:387 -msgid "Column is already mapped to a database field" -msgstr "" - -#: importer/models.py:392 -msgid "Field is already mapped to a data column" -msgstr "" - -#: importer/models.py:401 -msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:406 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:413 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:417 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:422 importer/models.py:493 -msgid "Import Session" -msgstr "" - -#: importer/models.py:426 -msgid "Field" -msgstr "" - -#: importer/models.py:428 -msgid "Column" -msgstr "" - -#: importer/models.py:497 -msgid "Row Index" -msgstr "" - -#: importer/models.py:500 -msgid "Original row data" -msgstr "" - -#: importer/models.py:503 part/models.py:3951 -msgid "Data" -msgstr "" - -#: importer/models.py:505 machine/models.py:110 -msgid "Errors" -msgstr "" - -#: importer/models.py:507 part/api.py:873 -msgid "Valid" -msgstr "" - -#: importer/operations.py:28 importer/operations.py:49 -msgid "Unsupported data file format" -msgstr "" - -#: importer/operations.py:40 -msgid "Failed to open data file" -msgstr "" - -#: importer/operations.py:51 -msgid "Invalid data file dimensions" -msgstr "" - -#: importer/serializers.py:91 -msgid "Invalid field defaults" -msgstr "" - -#: importer/serializers.py:104 -msgid "Invalid field overrides" -msgstr "" - -#: importer/serializers.py:117 -msgid "Invalid field filters" -msgstr "" - -#: importer/serializers.py:178 -msgid "Rows" -msgstr "" - -#: importer/serializers.py:179 -msgid "List of row IDs to accept" -msgstr "" - -#: importer/serializers.py:192 -msgid "No rows provided" -msgstr "" - -#: importer/serializers.py:196 -msgid "Row does not belong to this session" -msgstr "" - -#: importer/serializers.py:199 -msgid "Row contains invalid data" -msgstr "" - -#: importer/serializers.py:202 -msgid "Row has already been completed" -msgstr "" - -#: importer/status_codes.py:11 -msgid "Initializing" -msgstr "" - -#: importer/status_codes.py:12 -msgid "Mapping Columns" -msgstr "" - -#: importer/status_codes.py:13 -msgid "Importing Data" -msgstr "" - -#: importer/status_codes.py:16 -msgid "Processing Data" +#: company/templates/company/supplier_part.html:64 +#: templates/js/translated/company.js:294 +msgid "Edit Supplier Part" msgstr "" -#: importer/validators.py:21 -msgid "Data file exceeds maximum size limit" +#: company/templates/company/supplier_part.html:68 +#: company/templates/company/supplier_part.html:69 +#: templates/js/translated/company.js:269 +msgid "Duplicate Supplier Part" msgstr "" -#: importer/validators.py:26 -msgid "Data file contains no headers" +#: company/templates/company/supplier_part.html:73 +msgid "Delete Supplier Part" msgstr "" -#: importer/validators.py:29 -msgid "Data file contains too many columns" +#: company/templates/company/supplier_part.html:74 +msgid "Delete Supplier Part" msgstr "" -#: importer/validators.py:32 -msgid "Data file contains too many rows" +#: company/templates/company/supplier_part.html:133 +msgid "No supplier information available" msgstr "" -#: importer/validators.py:53 -msgid "Value must be a valid dictionary object" +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:461 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/purchase_order.js:2025 +msgid "SKU" msgstr "" -#: machine/machine_types/label_printer.py:215 -msgid "Copies" +#: company/templates/company/supplier_part.html:206 +msgid "Supplier Part Stock" msgstr "" -#: machine/machine_types/label_printer.py:216 -msgid "Number of copies to print for each label" +#: company/templates/company/supplier_part.html:209 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +msgid "Create new stock item" msgstr "" -#: machine/machine_types/label_printer.py:231 -msgid "Connected" +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 +msgid "New Stock Item" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1410 -#: templates/js/translated/sales_order.js:1078 -msgid "Unknown" +#: company/templates/company/supplier_part.html:223 +msgid "Supplier Part Orders" msgstr "" -#: machine/machine_types/label_printer.py:233 -msgid "Printing" +#: company/templates/company/supplier_part.html:246 +msgid "Pricing Information" msgstr "" -#: machine/machine_types/label_printer.py:234 -msgid "No media" +#: company/templates/company/supplier_part.html:251 +#: templates/js/translated/company.js:398 +#: templates/js/translated/pricing.js:684 +msgid "Add Price Break" msgstr "" -#: machine/machine_types/label_printer.py:235 -msgid "Paper jam" +#: company/templates/company/supplier_part.html:276 +msgid "Supplier Part QR Code" msgstr "" -#: machine/machine_types/label_printer.py:236 -msgid "Disconnected" +#: company/templates/company/supplier_part.html:287 +msgid "Link Barcode to Supplier Part" msgstr "" -#: machine/machine_types/label_printer.py:243 -msgid "Label Printer" +#: company/templates/company/supplier_part.html:359 +msgid "Update Part Availability" msgstr "" -#: machine/machine_types/label_printer.py:244 -msgid "Directly print labels for various items." +#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:709 stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2737 +#: users/models.py:193 +msgid "Stock Items" msgstr "" -#: machine/machine_types/label_printer.py:250 -msgid "Printer Location" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" msgstr "" -#: machine/machine_types/label_printer.py:251 -msgid "Scope the printer to a specific location" +#: company/views.py:32 +msgid "New Supplier" msgstr "" -#: machine/models.py:25 -msgid "Name of machine" +#: company/views.py:38 +msgid "New Manufacturer" msgstr "" -#: machine/models.py:29 -msgid "Machine Type" +#: company/views.py:43 templates/InvenTree/search.html:210 +#: templates/navbar.html:60 +msgid "Customers" msgstr "" -#: machine/models.py:29 -msgid "Type of machine" +#: company/views.py:44 +msgid "New Customer" msgstr "" -#: machine/models.py:34 machine/models.py:146 -msgid "Driver" +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" msgstr "" -#: machine/models.py:35 -msgid "Driver used for the machine" +#: company/views.py:52 +msgid "New Company" msgstr "" -#: machine/models.py:39 -msgid "Machines can be disabled" +#: label/models.py:115 +msgid "Label name" msgstr "" -#: machine/models.py:95 -msgid "Driver available" +#: label/models.py:123 +msgid "Label description" msgstr "" -#: machine/models.py:100 -msgid "No errors" +#: label/models.py:131 +msgid "Label" msgstr "" -#: machine/models.py:105 -msgid "Initialized" +#: label/models.py:132 +msgid "Label template file" msgstr "" -#: machine/models.py:117 -msgid "Machine status" +#: label/models.py:138 report/models.py:315 +msgid "Enabled" msgstr "" -#: machine/models.py:145 -msgid "Machine" +#: label/models.py:139 +msgid "Label template is enabled" msgstr "" -#: machine/models.py:151 -msgid "Machine Config" +#: label/models.py:144 +msgid "Width [mm]" msgstr "" -#: machine/models.py:156 -msgid "Config type" +#: label/models.py:145 +msgid "Label width, specified in mm" msgstr "" -#: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_purchase_order_report.html:31 -#: report/templates/report/inventree_sales_order_report.html:31 -#: templates/js/translated/order.js:352 -#: templates/js/translated/purchase_order.js:2195 -#: templates/js/translated/sales_order.js:1883 -msgid "Total Price" +#: label/models.py:151 +msgid "Height [mm]" msgstr "" -#: order/api.py:80 order/api.py:151 order/serializers.py:93 -#: order/templates/order/order_base.html:123 -#: order/templates/order/return_order_base.html:116 -#: order/templates/order/sales_order_base.html:125 -msgid "Order Status" +#: label/models.py:152 +msgid "Label height, specified in mm" msgstr "" -#: order/api.py:88 order/templates/order/order_base.html:111 -#: order/templates/order/return_order_base.html:104 -#: order/templates/order/sales_order_base.html:113 -msgid "Order Reference" +#: label/models.py:158 report/models.py:308 +msgid "Filename Pattern" msgstr "" -#: order/api.py:116 templates/js/translated/table_filters.js:93 -#: templates/js/translated/table_filters.js:625 -#: templates/js/translated/table_filters.js:651 -#: templates/js/translated/table_filters.js:666 -msgid "Outstanding" +#: label/models.py:159 +msgid "Pattern for generating label filenames" msgstr "" -#: order/api.py:132 -msgid "Has Project Code" +#: label/models.py:308 label/models.py:347 label/models.py:372 +#: label/models.py:407 +msgid "Query filters (comma-separated list of key=value pairs)" msgstr "" -#: order/api.py:155 templates/js/translated/table_filters.js:201 -#: templates/js/translated/table_filters.js:791 -msgid "Has Pricing" +#: label/models.py:309 label/models.py:348 label/models.py:373 +#: label/models.py:408 report/models.py:336 report/models.py:487 +#: report/models.py:523 report/models.py:559 report/models.py:681 +msgid "Filters" msgstr "" -#: order/api.py:230 -msgid "No matching purchase order found" +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" msgstr "" -#: order/api.py:425 order/api.py:763 order/models.py:1484 order/models.py:1598 -#: order/models.py:1649 order/models.py:1764 order/models.py:1923 -#: order/models.py:2383 order/models.py:2439 -#: templates/js/translated/sales_order.js:1524 -msgid "Order" +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" -#: order/api.py:429 order/api.py:784 -msgid "Order Complete" +#: order/admin.py:30 order/models.py:87 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2122 +#: templates/js/translated/sales_order.js:1847 +msgid "Total Price" msgstr "" -#: order/api.py:452 -msgid "Order Pending" +#: order/api.py:233 +msgid "No matching purchase order found" msgstr "" -#: order/api.py:1404 order/models.py:379 order/models.py:1485 -#: order/models.py:1599 order/templates/order/order_base.html:9 +#: order/api.py:1406 order/models.py:1361 order/models.py:1457 +#: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_purchase_order_report.html:14 -#: stock/serializers.py:120 stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/part.js:1752 templates/js/translated/pricing.js:804 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 -#: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1743 -#: templates/js/translated/stock.js:2345 templates/js/translated/stock.js:2991 +#: templates/js/translated/purchase_order.js:762 +#: templates/js/translated/purchase_order.js:1670 +#: templates/js/translated/stock.js:2230 templates/js/translated/stock.js:2878 msgid "Purchase Order" msgstr "" -#: order/api.py:1408 order/models.py:2091 order/models.py:2384 -#: order/models.py:2440 order/templates/order/return_order_base.html:9 +#: order/api.py:1410 order/models.py:2166 order/models.py:2217 +#: order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report.html:13 -#: templates/js/translated/return_order.js:280 -#: templates/js/translated/stock.js:3025 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2912 msgid "Return Order" msgstr "" -#: order/models.py:90 +#: order/api.py:1412 templates/js/translated/sales_order.js:1042 +msgid "Unknown" +msgstr "" + +#: order/models.py:88 msgid "Total price for this order" msgstr "" -#: order/models.py:95 order/serializers.py:71 +#: order/models.py:93 order/serializers.py:54 msgid "Order Currency" msgstr "" -#: order/models.py:98 order/serializers.py:72 +#: order/models.py:96 order/serializers.py:55 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:228 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:289 +#: order/models.py:260 msgid "Order description (optional)" msgstr "" -#: order/models.py:298 +#: order/models.py:269 msgid "Select project code for this order" msgstr "" -#: order/models.py:302 order/models.py:1385 order/models.py:1817 +#: order/models.py:273 order/models.py:1266 order/models.py:1665 msgid "Link to external page" msgstr "" -#: order/models.py:310 +#: order/models.py:281 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:324 +#: order/models.py:295 msgid "Created By" msgstr "" -#: order/models.py:332 +#: order/models.py:303 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:343 +#: order/models.py:314 msgid "Point of contact for this order" msgstr "" -#: order/models.py:353 +#: order/models.py:324 msgid "Company address for this order" msgstr "" -#: order/models.py:468 order/models.py:979 +#: order/models.py:423 order/models.py:877 msgid "Order reference" msgstr "" -#: order/models.py:477 +#: order/models.py:431 order/models.py:901 msgid "Purchase order status" msgstr "" -#: order/models.py:492 +#: order/models.py:446 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:503 order/templates/order/order_base.html:153 -#: templates/js/translated/purchase_order.js:1772 +#: order/models.py:457 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1699 msgid "Supplier Reference" msgstr "" -#: order/models.py:504 +#: order/models.py:458 msgid "Supplier order reference code" msgstr "" -#: order/models.py:513 +#: order/models.py:467 msgid "received by" msgstr "" -#: order/models.py:519 order/models.py:2173 +#: order/models.py:473 order/models.py:1992 msgid "Issue Date" msgstr "" -#: order/models.py:520 order/models.py:2174 +#: order/models.py:474 order/models.py:1993 msgid "Date order was issued" msgstr "" -#: order/models.py:527 order/models.py:2181 +#: order/models.py:481 order/models.py:2000 msgid "Date order was completed" msgstr "" -#: order/models.py:571 +#: order/models.py:525 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:806 +#: order/models.py:719 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:991 +#: order/models.py:889 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1003 -msgid "Sales order status" -msgstr "" - -#: order/models.py:1014 order/models.py:2166 +#: order/models.py:912 order/models.py:1985 msgid "Customer Reference " msgstr "" -#: order/models.py:1015 order/models.py:2167 +#: order/models.py:913 order/models.py:1986 msgid "Customer order reference code" msgstr "" -#: order/models.py:1019 order/models.py:1771 -#: templates/js/translated/sales_order.js:879 -#: templates/js/translated/sales_order.js:1060 +#: order/models.py:917 order/models.py:1619 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 msgid "Shipment Date" msgstr "" -#: order/models.py:1028 +#: order/models.py:926 msgid "shipped by" msgstr "" -#: order/models.py:1077 -msgid "Order is already complete" -msgstr "" - -#: order/models.py:1080 -msgid "Order is already cancelled" +#: order/models.py:977 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:1084 +#: order/models.py:982 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1088 +#: order/models.py:986 templates/js/translated/sales_order.js:506 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1093 +#: order/models.py:991 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1357 +#: order/models.py:1238 msgid "Item quantity" msgstr "" -#: order/models.py:1374 +#: order/models.py:1255 msgid "Line item reference" msgstr "" -#: order/models.py:1381 +#: order/models.py:1262 msgid "Line item notes" msgstr "" -#: order/models.py:1393 +#: order/models.py:1274 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1414 +#: order/models.py:1295 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1420 +#: order/models.py:1301 msgid "Context" msgstr "" -#: order/models.py:1421 +#: order/models.py:1302 msgid "Additional context for this line" msgstr "" -#: order/models.py:1431 +#: order/models.py:1312 msgid "Unit price" msgstr "" -#: order/models.py:1445 -msgid "Purchase Order Line Item" -msgstr "" - -#: order/models.py:1469 +#: order/models.py:1345 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1476 +#: order/models.py:1352 msgid "deleted" msgstr "" -#: order/models.py:1504 +#: order/models.py:1360 order/models.py:1456 order/models.py:1502 +#: order/models.py:1612 order/models.py:1764 order/models.py:2165 +#: order/models.py:2216 templates/js/translated/sales_order.js:1488 +msgid "Order" +msgstr "" + +#: order/models.py:1380 msgid "Supplier part" msgstr "" -#: order/models.py:1511 order/templates/order/order_base.html:201 -#: templates/js/translated/part.js:1876 templates/js/translated/part.js:1908 -#: templates/js/translated/purchase_order.js:1369 -#: templates/js/translated/purchase_order.js:2239 -#: templates/js/translated/return_order.js:762 -#: templates/js/translated/table_filters.js:119 -#: templates/js/translated/table_filters.js:605 +#: order/models.py:1387 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1302 +#: templates/js/translated/purchase_order.js:2166 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:598 msgid "Received" msgstr "" -#: order/models.py:1512 +#: order/models.py:1388 msgid "Number of items received" msgstr "" -#: order/models.py:1520 stock/models.py:959 stock/serializers.py:610 +#: order/models.py:1396 stock/models.py:918 stock/serializers.py:327 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2396 +#: templates/js/translated/stock.js:2281 msgid "Purchase Price" msgstr "" -#: order/models.py:1521 +#: order/models.py:1397 msgid "Unit purchase price" msgstr "" -#: order/models.py:1536 +#: order/models.py:1412 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1587 -msgid "Purchase Order Extra Line" -msgstr "" - -#: order/models.py:1616 -msgid "Sales Order Line Item" -msgstr "" - -#: order/models.py:1637 +#: order/models.py:1490 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1642 +#: order/models.py:1495 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1668 part/templates/part/part_pricing.html:107 +#: order/models.py:1521 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1669 +#: order/models.py:1522 msgid "Unit sale price" msgstr "" -#: order/models.py:1678 order/status_codes.py:48 -#: templates/js/translated/sales_order.js:1559 -#: templates/js/translated/sales_order.js:1680 -#: templates/js/translated/sales_order.js:1993 -msgid "Shipped" -msgstr "" - -#: order/models.py:1679 +#: order/models.py:1532 msgid "Shipped quantity" msgstr "" -#: order/models.py:1751 -msgid "Sales Order Shipment" -msgstr "" - -#: order/models.py:1772 +#: order/models.py:1620 msgid "Date of shipment" msgstr "" -#: order/models.py:1778 templates/js/translated/sales_order.js:1072 +#: order/models.py:1626 templates/js/translated/sales_order.js:1036 msgid "Delivery Date" msgstr "" -#: order/models.py:1779 +#: order/models.py:1627 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1787 +#: order/models.py:1635 msgid "Checked By" msgstr "" -#: order/models.py:1788 +#: order/models.py:1636 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1795 order/models.py:2018 order/serializers.py:1475 -#: order/serializers.py:1585 templates/js/translated/model_renderers.js:455 +#: order/models.py:1643 order/models.py:1854 order/serializers.py:1297 +#: order/serializers.py:1407 templates/js/translated/model_renderers.js:446 msgid "Shipment" msgstr "" -#: order/models.py:1796 +#: order/models.py:1644 msgid "Shipment number" msgstr "" -#: order/models.py:1804 +#: order/models.py:1652 msgid "Tracking Number" msgstr "" -#: order/models.py:1805 +#: order/models.py:1653 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1812 +#: order/models.py:1660 msgid "Invoice Number" msgstr "" -#: order/models.py:1813 +#: order/models.py:1661 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1833 +#: order/models.py:1681 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1836 +#: order/models.py:1684 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1912 -msgid "Sales Order Extra Line" -msgstr "" - -#: order/models.py:1941 -msgid "Sales Order Allocation" -msgstr "" - -#: order/models.py:1964 order/models.py:1966 +#: order/models.py:1800 order/models.py:1802 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1973 +#: order/models.py:1809 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1976 +#: order/models.py:1812 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1979 +#: order/models.py:1815 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1998 order/serializers.py:1345 +#: order/models.py:1834 order/serializers.py:1174 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2001 +#: order/models.py:1837 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2002 plugin/base/barcodes/api.py:524 +#: order/models.py:1838 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2010 +#: order/models.py:1846 msgid "Line" msgstr "" -#: order/models.py:2019 +#: order/models.py:1855 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2032 order/models.py:2391 -#: templates/js/translated/return_order.js:720 +#: order/models.py:1868 order/models.py:2173 +#: templates/js/translated/return_order.js:722 msgid "Item" msgstr "" -#: order/models.py:2033 +#: order/models.py:1869 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2042 +#: order/models.py:1878 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2136 +#: order/models.py:1955 msgid "Return Order reference" msgstr "" -#: order/models.py:2148 +#: order/models.py:1967 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2160 +#: order/models.py:1979 msgid "Return order status" msgstr "" -#: order/models.py:2362 -msgid "Return Order Line Item" -msgstr "" - -#: order/models.py:2376 +#: order/models.py:2158 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2392 +#: order/models.py:2174 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2398 +#: order/models.py:2180 msgid "Received Date" msgstr "" -#: order/models.py:2399 +#: order/models.py:2181 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2410 templates/js/translated/return_order.js:731 -#: templates/js/translated/table_filters.js:122 +#: order/models.py:2192 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2411 +#: order/models.py:2193 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2418 +#: order/models.py:2200 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:2428 -msgid "Return Order Extra Line" -msgstr "" - -#: order/serializers.py:86 -msgid "Completed Lines" -msgstr "" - -#: order/serializers.py:283 stock/admin.py:195 -msgid "Supplier Name" -msgstr "" - -#: order/serializers.py:331 +#: order/serializers.py:264 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:346 order/serializers.py:1366 +#: order/serializers.py:279 order/serializers.py:1190 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:356 order/serializers.py:1376 +#: order/serializers.py:289 order/serializers.py:1200 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:400 msgid "Order is not open" msgstr "" -#: order/serializers.py:527 -msgid "Auto Pricing" -msgstr "" - -#: order/serializers.py:529 -msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" - -#: order/serializers.py:539 +#: order/serializers.py:425 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:545 -msgid "Merge Items" -msgstr "" - -#: order/serializers.py:547 -msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" - -#: order/serializers.py:560 part/models.py:1033 -msgid "Internal Part Number" -msgstr "" - -#: order/serializers.py:568 -msgid "Internal Part Name" -msgstr "" - -#: order/serializers.py:584 +#: order/serializers.py:443 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:587 +#: order/serializers.py:446 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:595 +#: order/serializers.py:454 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:596 +#: order/serializers.py:455 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:639 order/serializers.py:1446 +#: order/serializers.py:494 order/serializers.py:1268 msgid "Line Item" msgstr "" -#: order/serializers.py:645 +#: order/serializers.py:500 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:655 order/serializers.py:779 order/serializers.py:1782 +#: order/serializers.py:510 order/serializers.py:618 order/serializers.py:1623 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:671 templates/js/translated/purchase_order.js:1130 -#: templates/js/translated/stock.js:1200 +#: order/serializers.py:526 templates/js/translated/purchase_order.js:1126 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:679 templates/js/translated/purchase_order.js:1155 +#: order/serializers.py:534 templates/js/translated/purchase_order.js:1150 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:691 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:699 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:706 templates/js/translated/barcode.js:52 +#: order/serializers.py:545 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:546 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:562 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:586 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:795 order/serializers.py:1798 +#: order/serializers.py:634 order/serializers.py:1639 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:811 +#: order/serializers.py:650 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:822 +#: order/serializers.py:661 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1187 +#: order/serializers.py:1018 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1248 +#: order/serializers.py:1078 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1309 order/serializers.py:1455 +#: order/serializers.py:1138 order/serializers.py:1277 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1328 +#: order/serializers.py:1157 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1465 +#: order/serializers.py:1287 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1487 order/serializers.py:1593 +#: order/serializers.py:1309 order/serializers.py:1415 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1490 order/serializers.py:1596 +#: order/serializers.py:1312 order/serializers.py:1418 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1537 +#: order/serializers.py:1359 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1544 +#: order/serializers.py:1366 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1752 +#: order/serializers.py:1593 msgid "Return order line item" msgstr "" -#: order/serializers.py:1758 +#: order/serializers.py:1599 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1761 +#: order/serializers.py:1602 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1790 +#: order/serializers.py:1631 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1873 +#: order/serializers.py:1709 msgid "Line price currency" msgstr "" -#: order/status_codes.py:17 order/status_codes.py:52 stock/status_codes.py:16 -msgid "Lost" -msgstr "" - -#: order/status_codes.py:18 order/status_codes.py:53 stock/status_codes.py:22 -msgid "Returned" -msgstr "" - -#: order/status_codes.py:45 order/status_codes.py:77 -msgid "In Progress" -msgstr "" - -#: order/status_codes.py:101 -msgid "Return" -msgstr "" - -#: order/status_codes.py:104 -msgid "Repair" -msgstr "" - -#: order/status_codes.py:107 -msgid "Replace" -msgstr "" - -#: order/status_codes.py:110 -msgid "Refund" -msgstr "" - -#: order/status_codes.py:113 -msgid "Reject" -msgstr "" - #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -6051,87 +5214,93 @@ msgid "Edit order" msgstr "" #: order/templates/order/order_base.html:68 -msgid "Duplicate order" -msgstr "" - -#: order/templates/order/order_base.html:73 #: order/templates/order/return_order_base.html:78 #: order/templates/order/sales_order_base.html:77 -msgid "Hold order" +msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:78 -#: order/templates/order/return_order_base.html:81 -#: order/templates/order/sales_order_base.html:80 -msgid "Cancel order" +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:84 -#: order/templates/order/order_base.html:85 -#: order/templates/order/return_order_base.html:85 -#: order/templates/order/return_order_base.html:86 -#: order/templates/order/sales_order_base.html:86 -#: order/templates/order/sales_order_base.html:87 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:88 -#: order/templates/order/return_order_base.html:89 +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:89 -#: order/templates/order/return_order_base.html:90 -#: order/templates/order/sales_order_base.html:100 +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:96 +#: order/templates/order/order_base.html:91 msgid "Supplier part thumbnail" msgstr "" -#: order/templates/order/order_base.html:116 -#: order/templates/order/return_order_base.html:109 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:146 +#: order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:141 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:159 -#: order/templates/order/sales_order_base.html:164 +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:165 -#: order/templates/order/sales_order_base.html:170 -#: order/templates/order/sales_order_base.html:180 +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:184 -#: order/templates/order/return_order_base.html:160 -#: report/templates/report/inventree_build_order_report.html:121 +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:229 +#: order/templates/order/order_base.html:224 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:233 -#: order/templates/order/return_order_base.html:202 -#: order/templates/order/sales_order_base.html:246 +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:335 +#: order/templates/order/order_base.html:318 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:347 +#: order/templates/order/order_base.html:330 msgid "Link Barcode to Purchase Order" msgstr "" @@ -6184,13 +5353,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:133 templates/js/translated/build.js:530 -#: templates/js/translated/build.js:1802 -#: templates/js/translated/purchase_order.js:696 -#: templates/js/translated/purchase_order.js:1288 -#: templates/js/translated/return_order.js:505 -#: templates/js/translated/sales_order.js:1145 -#: templates/js/translated/stock.js:720 templates/js/translated/stock.js:889 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1621 +#: templates/js/translated/purchase_order.js:706 +#: templates/js/translated/purchase_order.js:1232 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -6231,6 +5400,15 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6242,8 +5420,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:458 +#: templates/js/translated/purchase_order.js:433 +#: templates/js/translated/return_order.js:459 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6291,31 +5469,31 @@ msgstr "" msgid "Print packing list" msgstr "" -#: order/templates/order/return_order_base.html:141 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/return_order.js:308 -#: templates/js/translated/sales_order.js:833 +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 msgid "Customer Reference" msgstr "" -#: order/templates/order/return_order_base.html:198 -#: order/templates/order/sales_order_base.html:242 +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 -#: templates/js/translated/part.js:1079 -#: templates/js/translated/purchase_order.js:1822 -#: templates/js/translated/return_order.js:380 -#: templates/js/translated/sales_order.js:891 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:273 +#: order/templates/order/return_order_base.html:263 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:285 +#: order/templates/order/return_order_base.html:275 msgid "Link Barcode to Return Order" msgstr "" @@ -6327,36 +5505,31 @@ msgstr "" msgid "Print sales order report" msgstr "" -#: order/templates/order/sales_order_base.html:91 -#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 msgid "Ship Items" msgstr "" -#: order/templates/order/sales_order_base.html:95 -#: order/templates/order/sales_order_base.html:96 -msgid "Mark As Shipped" -msgstr "" - -#: order/templates/order/sales_order_base.html:99 -#: templates/js/translated/sales_order.js:536 +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:138 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:176 +#: order/templates/order/sales_order_base.html:169 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:339 +#: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:351 +#: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" msgstr "" @@ -6370,8 +5543,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1277 templates/js/translated/build.js:1063 -#: templates/js/translated/filters.js:299 +#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6401,21 +5573,35 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:48 part/models.py:1032 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_stock_location_report.html:103 -#: templates/js/translated/part.js:1233 templates/js/translated/part.js:2347 -#: templates/js/translated/stock.js:2121 +#: part/admin.py:39 part/admin.py:403 part/models.py:3851 part/stocktake.py:218 +#: stock/admin.py:151 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:410 part/models.py:3852 part/stocktake.py:219 +#: stock/admin.py:155 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:887 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2006 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:1041 part/templates/part/part_base.html:286 -#: report/models.py:161 templates/js/translated/part.js:1238 -#: templates/js/translated/part.js:2353 +#: part/admin.py:50 part/models.py:896 part/templates/part/part_base.html:277 +#: report/models.py:191 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:319 part/models.py:1014 -#: part/templates/part/category.html:91 part/templates/part/part_base.html:307 +#: part/admin.py:53 part/admin.py:317 part/models.py:869 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -6423,16 +5609,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:304 part/serializers.py:880 -#: part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:316 +#: part/admin.py:71 part/admin.py:314 msgid "Default Location ID" msgstr "" @@ -6440,215 +5625,152 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:1000 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:855 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1138 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:983 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" +#: part/admin.py:126 part/templates/part/part_base.html:197 +#: templates/js/translated/company.js:1679 +#: templates/js/translated/table_filters.js:355 +msgid "In Stock" +msgstr "" + +#: part/admin.py:132 part/bom.py:173 part/templates/part/part_base.html:210 +#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2609 +#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:150 part/serializers.py:897 -#: part/templates/part/part_base.html:241 stock/admin.py:235 -#: templates/js/translated/part.js:717 templates/js/translated/part.js:2159 +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:229 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3202 part/models.py:3216 -#: templates/js/translated/part.js:976 +#: part/admin.py:155 part/models.py:3053 part/models.py:3067 +#: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3209 part/models.py:3223 -#: templates/js/translated/part.js:986 +#: part/admin.py:158 part/models.py:3060 part/models.py:3074 +#: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:308 part/admin.py:387 stock/admin.py:57 stock/admin.py:215 +#: part/admin.py:306 part/admin.py:392 stock/admin.py:58 stock/admin.py:209 msgid "Parent ID" msgstr "" -#: part/admin.py:312 part/admin.py:394 stock/admin.py:61 +#: part/admin.py:310 part/admin.py:399 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:320 part/templates/part/category.html:85 -#: part/templates/part/category.html:98 +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:325 part/models.py:425 part/serializers.py:130 -#: part/serializers.py:290 part/serializers.py:415 -#: part/templates/part/cat_link.html:3 part/templates/part/category.html:20 -#: part/templates/part/category.html:138 part/templates/part/category.html:158 +#: part/admin.py:323 part/models.py:389 part/serializers.py:343 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2822 templates/js/translated/search.js:130 -#: templates/navbar.html:24 users/models.py:203 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:190 msgid "Parts" msgstr "" -#: part/admin.py:378 +#: part/admin.py:383 msgid "BOM Level" msgstr "" -#: part/admin.py:381 +#: part/admin.py:386 msgid "BOM Item ID" msgstr "" -#: part/admin.py:391 +#: part/admin.py:396 msgid "Parent IPN" msgstr "" -#: part/admin.py:405 -msgid "Part Revision" +#: part/admin.py:407 part/models.py:3853 +msgid "Part IPN" msgstr "" -#: part/admin.py:418 part/serializers.py:1346 +#: part/admin.py:420 part/serializers.py:1182 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:423 part/serializers.py:1361 +#: part/admin.py:425 part/serializers.py:1197 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:104 -msgid "Starred" -msgstr "" - -#: part/api.py:106 -msgid "Filter by starred categories" -msgstr "" - -#: part/api.py:123 stock/api.py:310 -msgid "Depth" -msgstr "" - -#: part/api.py:123 -msgid "Filter by category depth" -msgstr "" - -#: part/api.py:141 stock/api.py:328 -msgid "Top Level" -msgstr "" - -#: part/api.py:143 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:158 -msgid "Include sub-categories in filtered results" -msgstr "" - -#: part/api.py:179 templates/js/translated/part.js:311 -msgid "Parent" -msgstr "" - -#: part/api.py:181 -msgid "Filter by parent category" -msgstr "" - -#: part/api.py:214 -msgid "Exclude Tree" -msgstr "" - -#: part/api.py:216 -msgid "Exclude sub-categories under the specified category" -msgstr "" - -#: part/api.py:441 -msgid "Has Results" -msgstr "" - -#: part/api.py:608 +#: part/api.py:523 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:626 +#: part/api.py:541 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:642 +#: part/api.py:557 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:726 +#: part/api.py:641 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:874 -msgid "Validate entire Bill of Materials" -msgstr "" - -#: part/api.py:880 -msgid "This option must be selected" -msgstr "" - -#: part/api.py:916 -msgid "Is Revision" -msgstr "" - -#: part/api.py:926 -msgid "Has Revisions" -msgstr "" - -#: part/api.py:1117 -msgid "BOM Valid" -msgstr "" - -#: part/api.py:1523 part/models.py:1024 part/models.py:3489 part/models.py:4046 -#: part/serializers.py:430 part/serializers.py:1202 -#: part/templates/part/part_base.html:260 stock/api.py:781 -#: templates/InvenTree/settings/settings_staff_js.html:300 -#: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2383 -msgid "Category" -msgstr "" - -#: part/api.py:1761 -msgid "Assembly part is testable" +#: part/api.py:786 +msgid "Valid" msgstr "" -#: part/api.py:1770 -msgid "Component part is testable" +#: part/api.py:787 +msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:1821 -msgid "Uses" +#: part/api.py:793 +msgid "This option must be selected" msgstr "" -#: part/bom.py:178 part/models.py:107 part/models.py:1077 -#: part/templates/part/category.html:113 part/templates/part/part_base.html:376 -#: templates/js/translated/part.js:2397 +#: part/bom.py:170 part/models.py:107 part/models.py:922 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:179 part/serializers.py:905 -#: templates/email/low_stock_notification.html:16 +#: part/bom.py:171 templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" +#: part/bom.py:172 part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1893 +msgid "Available Stock" +msgstr "" + #: part/forms.py:49 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:88 part/models.py:4047 part/templates/part/category.html:16 +#: part/models.py:88 part/models.py:3801 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:89 part/templates/part/category.html:133 +#: part/models.py:89 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 -#: users/models.py:202 +#: users/models.py:189 msgid "Part Categories" msgstr "" @@ -6656,10 +5778,9 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:113 stock/models.py:187 templates/js/translated/part.js:2828 -#: templates/js/translated/stock.js:2856 -#: templates/js/translated/table_filters.js:246 -#: templates/js/translated/table_filters.js:290 +#: part/models.py:113 stock/models.py:167 templates/js/translated/stock.js:2743 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" @@ -6675,1114 +5796,957 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:131 stock/models.py:90 stock/models.py:169 -#: templates/InvenTree/settings/settings_staff_js.html:445 +#: part/models.py:131 stock/models.py:94 stock/models.py:150 +#: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:132 part/serializers.py:143 part/serializers.py:161 -#: stock/models.py:170 +#: part/models.py:132 stock/models.py:151 msgid "Icon (optional)" msgstr "" -#: part/models.py:178 +#: part/models.py:152 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:519 -msgid "Cannot delete this part as it is locked" -msgstr "" - -#: part/models.py:522 -msgid "Cannot delete this part as it is still active" -msgstr "" - -#: part/models.py:527 -msgid "Cannot delete this part as it is used in an assembly" -msgstr "" - -#: part/models.py:565 +#: part/models.py:479 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:613 part/models.py:620 +#: part/models.py:523 part/models.py:530 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:632 +#: part/models.py:542 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:695 +#: part/models.py:607 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:703 -msgid "Part cannot be a revision of itself" -msgstr "" - -#: part/models.py:710 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "" - -#: part/models.py:717 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:724 -msgid "Revisions are only allowed for assembly parts" -msgstr "" - -#: part/models.py:731 -msgid "Cannot make a revision of a template part" -msgstr "" - -#: part/models.py:737 -msgid "Parent part must point to the same template" -msgstr "" - -#: part/models.py:816 +#: part/models.py:687 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:917 +#: part/models.py:790 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:926 -msgid "Duplicate part revision already exists." -msgstr "" - -#: part/models.py:936 +#: part/models.py:800 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:951 +#: part/models.py:815 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:983 part/models.py:4102 +#: part/models.py:838 part/models.py:3852 msgid "Part name" msgstr "" -#: part/models.py:988 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:989 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:999 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1007 +#: part/models.py:862 msgid "Part description (optional)" msgstr "" -#: part/models.py:1015 +#: part/models.py:870 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1025 -msgid "Part category" +#: part/models.py:879 part/models.py:3359 part/models.py:3800 +#: part/serializers.py:358 part/serializers.py:1038 +#: part/templates/part/part_base.html:260 stock/api.py:705 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2377 +msgid "Category" msgstr "" -#: part/models.py:1040 -msgid "Part revision or version number" +#: part/models.py:880 +msgid "Part category" msgstr "" -#: part/models.py:1050 -msgid "Is this part a revision of another part?" +#: part/models.py:888 +msgid "Internal Part Number" msgstr "" -#: part/models.py:1051 part/templates/part/part_base.html:277 -msgid "Revision Of" +#: part/models.py:895 +msgid "Part revision or version number" msgstr "" -#: part/models.py:1075 +#: part/models.py:920 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1121 part/templates/part/part_base.html:385 +#: part/models.py:966 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:1122 +#: part/models.py:967 msgid "Default supplier part" msgstr "" -#: part/models.py:1129 +#: part/models.py:974 msgid "Default Expiry" msgstr "" -#: part/models.py:1130 +#: part/models.py:975 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1139 +#: part/models.py:984 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1148 +#: part/models.py:993 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1155 +#: part/models.py:1000 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1161 +#: part/models.py:1006 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1167 +#: part/models.py:1012 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1173 -msgid "Can this part have test results recorded against it?" -msgstr "" - -#: part/models.py:1179 +#: part/models.py:1018 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1185 +#: part/models.py:1024 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1189 +#: part/models.py:1028 msgid "Is this part active?" msgstr "" -#: part/models.py:1194 templates/js/translated/part.js:821 -#: templates/js/translated/table_filters.js:724 -msgid "Locked" -msgstr "" - -#: part/models.py:1195 -msgid "Locked parts cannot be edited" -msgstr "" - -#: part/models.py:1201 +#: part/models.py:1034 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1207 +#: part/models.py:1040 msgid "BOM checksum" msgstr "" -#: part/models.py:1208 +#: part/models.py:1041 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1216 +#: part/models.py:1049 msgid "BOM checked by" msgstr "" -#: part/models.py:1221 +#: part/models.py:1054 msgid "BOM checked date" msgstr "" -#: part/models.py:1237 +#: part/models.py:1070 msgid "Creation User" msgstr "" -#: part/models.py:1247 +#: part/models.py:1080 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1252 part/templates/part/part_base.html:348 +#: part/models.py:1085 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2490 +#: templates/js/translated/part.js:2471 msgid "Last Stocktake" msgstr "" -#: part/models.py:2125 +#: part/models.py:1958 msgid "Sell multiple" msgstr "" -#: part/models.py:3116 +#: part/models.py:2967 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3132 +#: part/models.py:2983 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3133 +#: part/models.py:2984 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3139 +#: part/models.py:2990 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3140 +#: part/models.py:2991 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3146 +#: part/models.py:2997 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3147 +#: part/models.py:2998 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3153 +#: part/models.py:3004 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3154 +#: part/models.py:3005 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3160 +#: part/models.py:3011 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3161 +#: part/models.py:3012 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3167 +#: part/models.py:3018 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3168 +#: part/models.py:3019 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3174 +#: part/models.py:3025 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3175 +#: part/models.py:3026 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3181 +#: part/models.py:3032 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3182 +#: part/models.py:3033 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3188 +#: part/models.py:3039 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3189 +#: part/models.py:3040 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3195 +#: part/models.py:3046 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3196 +#: part/models.py:3047 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3203 +#: part/models.py:3054 msgid "Override minimum cost" msgstr "" -#: part/models.py:3210 +#: part/models.py:3061 msgid "Override maximum cost" msgstr "" -#: part/models.py:3217 +#: part/models.py:3068 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3224 +#: part/models.py:3075 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3230 +#: part/models.py:3081 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3231 +#: part/models.py:3082 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3237 +#: part/models.py:3088 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3238 +#: part/models.py:3089 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3244 +#: part/models.py:3095 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3245 +#: part/models.py:3096 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3251 +#: part/models.py:3102 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3252 +#: part/models.py:3103 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3271 +#: part/models.py:3122 msgid "Part for stocktake" msgstr "" -#: part/models.py:3276 +#: part/models.py:3127 msgid "Item Count" msgstr "" -#: part/models.py:3277 +#: part/models.py:3128 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3285 +#: part/models.py:3136 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3289 part/models.py:3372 +#: part/models.py:3140 part/models.py:3223 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report.html:106 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 -#: templates/InvenTree/settings/settings_staff_js.html:543 -#: templates/js/translated/part.js:1092 templates/js/translated/pricing.js:826 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1801 -#: templates/js/translated/stock.js:2905 +#: templates/js/translated/purchase_order.js:1728 +#: templates/js/translated/stock.js:2792 msgid "Date" msgstr "" -#: part/models.py:3290 +#: part/models.py:3141 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3298 +#: part/models.py:3149 msgid "Additional notes" msgstr "" -#: part/models.py:3308 +#: part/models.py:3159 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3314 +#: part/models.py:3165 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3315 +#: part/models.py:3166 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3321 +#: part/models.py:3172 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3322 +#: part/models.py:3173 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3378 templates/InvenTree/settings/settings_staff_js.html:532 +#: part/models.py:3229 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3379 +#: part/models.py:3230 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3384 templates/InvenTree/settings/settings_staff_js.html:539 +#: part/models.py:3235 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3385 +#: part/models.py:3236 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3395 +#: part/models.py:3246 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3405 -msgid "Part Sale Price Break" -msgstr "" - -#: part/models.py:3517 -msgid "Part Test Template" -msgstr "" - -#: part/models.py:3543 -msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" - -#: part/models.py:3564 part/models.py:3733 -msgid "Choices must be unique" -msgstr "" - -#: part/models.py:3575 +#: part/models.py:3406 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3586 -msgid "Test template with the same key already exists for part" +#: part/models.py:3423 +msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3603 templates/js/translated/part.js:2898 +#: part/models.py:3444 templates/js/translated/part.js:2868 msgid "Test Name" msgstr "" -#: part/models.py:3604 +#: part/models.py:3445 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3610 -msgid "Test Key" -msgstr "" - -#: part/models.py:3611 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3618 +#: part/models.py:3452 msgid "Test Description" msgstr "" -#: part/models.py:3619 +#: part/models.py:3453 msgid "Enter description for this test" msgstr "" -#: part/models.py:3623 report/models.py:208 -#: templates/js/translated/part.js:2919 -#: templates/js/translated/table_filters.js:502 -msgid "Enabled" -msgstr "" - -#: part/models.py:3623 -msgid "Is this test enabled?" -msgstr "" - -#: part/models.py:3628 templates/js/translated/part.js:2927 -#: templates/js/translated/table_filters.js:498 +#: part/models.py:3458 templates/js/translated/part.js:2877 +#: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3629 +#: part/models.py:3459 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3634 templates/js/translated/part.js:2935 +#: part/models.py:3464 templates/js/translated/part.js:2885 msgid "Requires Value" msgstr "" -#: part/models.py:3635 +#: part/models.py:3465 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3640 templates/js/translated/part.js:2942 +#: part/models.py:3470 templates/js/translated/part.js:2892 msgid "Requires Attachment" msgstr "" -#: part/models.py:3642 +#: part/models.py:3472 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3648 part/models.py:3792 templates/js/translated/part.js:1643 -msgid "Choices" -msgstr "" - -#: part/models.py:3649 -msgid "Valid choices for this test (comma-separated)" -msgstr "" - -#: part/models.py:3681 -msgid "Part Parameter Template" -msgstr "" - -#: part/models.py:3708 +#: part/models.py:3519 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3713 +#: part/models.py:3524 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3750 +#: part/models.py:3544 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3561 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3765 +#: part/models.py:3576 msgid "Parameter Name" msgstr "" -#: part/models.py:3772 +#: part/models.py:3583 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3780 +#: part/models.py:3591 msgid "Parameter description" msgstr "" -#: part/models.py:3786 templates/js/translated/part.js:1634 -#: templates/js/translated/table_filters.js:837 +#: part/models.py:3597 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:817 msgid "Checkbox" msgstr "" -#: part/models.py:3787 +#: part/models.py:3598 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3793 -msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: part/models.py:3827 -msgid "Part Parameter" +#: part/models.py:3603 templates/js/translated/part.js:1636 +msgid "Choices" msgstr "" -#: part/models.py:3853 -msgid "Parameter cannot be modified - part is locked" +#: part/models.py:3604 +msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3889 +#: part/models.py:3681 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3938 +#: part/models.py:3724 msgid "Parent Part" msgstr "" -#: part/models.py:3946 part/models.py:4054 part/models.py:4055 +#: part/models.py:3732 part/models.py:3808 part/models.py:3809 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3952 -msgid "Parameter Value" +#: part/models.py:3737 +msgid "Data" msgstr "" -#: part/models.py:4002 -msgid "Part Category Parameter Template" +#: part/models.py:3738 +msgid "Parameter Value" msgstr "" -#: part/models.py:4061 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3815 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:4062 +#: part/models.py:3816 msgid "Default Parameter Value" msgstr "" -#: part/models.py:4100 +#: part/models.py:3850 msgid "Part ID or part name" msgstr "" -#: part/models.py:4101 +#: part/models.py:3851 msgid "Unique part ID value" msgstr "" -#: part/models.py:4103 +#: part/models.py:3853 msgid "Part IPN value" msgstr "" -#: part/models.py:4104 +#: part/models.py:3854 msgid "Level" msgstr "" -#: part/models.py:4104 +#: part/models.py:3854 msgid "BOM level" msgstr "" -#: part/models.py:4215 -msgid "BOM item cannot be modified - assembly is locked" -msgstr "" - -#: part/models.py:4222 -msgid "BOM item cannot be modified - variant assembly is locked" +#: part/models.py:3860 part/models.py:4296 stock/api.py:717 +msgid "BOM Item" msgstr "" -#: part/models.py:4232 +#: part/models.py:3944 msgid "Select parent part" msgstr "" -#: part/models.py:4242 +#: part/models.py:3954 msgid "Sub part" msgstr "" -#: part/models.py:4243 +#: part/models.py:3955 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4254 +#: part/models.py:3966 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4260 +#: part/models.py:3972 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4266 +#: part/models.py:3978 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4273 part/templates/part/upload_bom.html:55 +#: part/models.py:3985 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4274 +#: part/models.py:3986 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4281 +#: part/models.py:3993 msgid "BOM item reference" msgstr "" -#: part/models.py:4289 +#: part/models.py:4001 msgid "BOM item notes" msgstr "" -#: part/models.py:4295 +#: part/models.py:4007 msgid "Checksum" msgstr "" -#: part/models.py:4296 +#: part/models.py:4008 msgid "BOM line checksum" msgstr "" -#: part/models.py:4301 templates/js/translated/table_filters.js:181 +#: part/models.py:4013 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4302 +#: part/models.py:4014 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4307 part/templates/part/upload_bom.html:57 +#: part/models.py:4019 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 -#: templates/js/translated/table_filters.js:185 -#: templates/js/translated/table_filters.js:218 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4308 +#: part/models.py:4020 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4314 +#: part/models.py:4025 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4026 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4399 stock/models.py:685 +#: part/models.py:4111 stock/models.py:643 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4409 part/models.py:4411 +#: part/models.py:4121 part/models.py:4123 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4551 +#: part/models.py:4263 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4572 +#: part/models.py:4284 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4585 +#: part/models.py:4297 msgid "Parent BOM item" msgstr "" -#: part/models.py:4593 +#: part/models.py:4305 msgid "Substitute part" msgstr "" -#: part/models.py:4609 +#: part/models.py:4321 msgid "Part 1" msgstr "" -#: part/models.py:4617 +#: part/models.py:4329 msgid "Part 2" msgstr "" -#: part/models.py:4618 +#: part/models.py:4330 msgid "Select Related Part" msgstr "" -#: part/models.py:4637 +#: part/models.py:4349 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4642 +#: part/models.py:4354 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:124 -msgid "Parent Category" -msgstr "" - -#: part/serializers.py:125 templates/js/translated/part.js:312 -msgid "Parent part category" -msgstr "" - -#: part/serializers.py:132 part/serializers.py:158 -#: part/templates/part/category.html:119 part/templates/part/category.html:204 -#: part/templates/part/category_sidebar.html:7 -msgid "Subcategories" -msgstr "" - -#: part/serializers.py:197 -msgid "Results" -msgstr "" - -#: part/serializers.py:198 -msgid "Number of results recorded against this template" -msgstr "" - -#: part/serializers.py:225 part/serializers.py:243 stock/serializers.py:616 +#: part/serializers.py:178 part/serializers.py:196 stock/serializers.py:333 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:291 -msgid "Number of parts using this template" -msgstr "" - -#: part/serializers.py:421 +#: part/serializers.py:349 msgid "No parts selected" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:359 msgid "Select category" msgstr "" -#: part/serializers.py:466 +#: part/serializers.py:389 msgid "Original Part" msgstr "" -#: part/serializers.py:467 +#: part/serializers.py:390 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:472 +#: part/serializers.py:395 msgid "Copy Image" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:396 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:479 part/templates/part/detail.html:293 +#: part/serializers.py:402 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:403 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:486 +#: part/serializers.py:409 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:410 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:416 msgid "Copy Notes" msgstr "" -#: part/serializers.py:494 +#: part/serializers.py:417 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:512 +#: part/serializers.py:430 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:514 +#: part/serializers.py:432 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:521 +#: part/serializers.py:439 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:440 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:539 +#: part/serializers.py:452 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:555 +#: part/serializers.py:468 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:565 +#: part/serializers.py:478 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:485 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:581 +#: part/serializers.py:494 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:592 +#: part/serializers.py:505 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:599 +#: part/serializers.py:512 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:903 -msgid "Revisions" -msgstr "" - -#: part/serializers.py:908 -msgid "Unallocated Stock" -msgstr "" - -#: part/serializers.py:911 -msgid "Variant Stock" -msgstr "" - -#: part/serializers.py:941 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:474 +#: part/serializers.py:777 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:778 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 templates/js/translated/part.js:103 +#: part/serializers.py:784 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:785 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:791 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:792 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:964 +#: part/serializers.py:800 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:801 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:970 +#: part/serializers.py:806 msgid "Existing Image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:807 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:988 +#: part/serializers.py:824 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1194 +#: part/serializers.py:1030 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1204 +#: part/serializers.py:1040 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1214 +#: part/serializers.py:1050 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1220 +#: part/serializers.py:1056 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1057 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1226 +#: part/serializers.py:1062 msgid "Generate Report" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1063 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1232 +#: part/serializers.py:1068 msgid "Update Parts" msgstr "" -#: part/serializers.py:1233 +#: part/serializers.py:1069 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1241 +#: part/serializers.py:1077 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1183 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1354 +#: part/serializers.py:1190 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1362 +#: part/serializers.py:1198 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1205 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1398 +#: part/serializers.py:1234 msgid "Update" msgstr "" -#: part/serializers.py:1399 +#: part/serializers.py:1235 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1422 +#: part/serializers.py:1258 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1429 +#: part/serializers.py:1265 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1432 +#: part/serializers.py:1268 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1576 -msgid "Select the parent assembly" -msgstr "" - -#: part/serializers.py:1585 -msgid "Component Name" -msgstr "" - -#: part/serializers.py:1588 -msgid "Component IPN" -msgstr "" - -#: part/serializers.py:1591 -msgid "Component Description" -msgstr "" - -#: part/serializers.py:1597 -msgid "Select the component part" -msgstr "" - -#: part/serializers.py:1606 part/templates/part/part_base.html:235 -#: templates/js/translated/bom.js:1219 -msgid "Can Build" -msgstr "" - -#: part/serializers.py:1837 +#: part/serializers.py:1592 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1845 +#: part/serializers.py:1600 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1846 +#: part/serializers.py:1601 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1851 +#: part/serializers.py:1606 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1852 +#: part/serializers.py:1607 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1857 +#: part/serializers.py:1612 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1858 +#: part/serializers.py:1613 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1863 +#: part/serializers.py:1618 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1864 +#: part/serializers.py:1619 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1901 +#: part/serializers.py:1653 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1902 +#: part/serializers.py:1654 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1934 +#: part/serializers.py:1684 msgid "No part column specified" msgstr "" -#: part/serializers.py:1978 +#: part/serializers.py:1728 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1981 +#: part/serializers.py:1731 msgid "No matching part found" msgstr "" -#: part/serializers.py:1984 +#: part/serializers.py:1734 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1993 +#: part/serializers.py:1743 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:2001 +#: part/serializers.py:1751 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:2024 +#: part/serializers.py:1772 msgid "At least one BOM item is required" msgstr "" -#: part/stocktake.py:224 templates/js/translated/part.js:1073 -#: templates/js/translated/part.js:1828 templates/js/translated/part.js:1884 -#: templates/js/translated/purchase_order.js:2154 +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2081 msgid "Total Quantity" msgstr "" @@ -7828,65 +6792,70 @@ msgstr "" msgid "This BOM has not been validated." msgstr "" -#: part/templates/part/category.html:32 +#: part/templates/part/category.html:35 msgid "Perform stocktake for this part category" msgstr "" -#: part/templates/part/category.html:38 part/templates/part/category.html:42 +#: part/templates/part/category.html:41 part/templates/part/category.html:45 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:46 +#: part/templates/part/category.html:49 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:52 +#: part/templates/part/category.html:55 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:57 +#: part/templates/part/category.html:60 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:61 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:62 +#: part/templates/part/category.html:65 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:63 +#: part/templates/part/category.html:66 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:99 +#: part/templates/part/category.html:102 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:124 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:127 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:162 +#: part/templates/part/category.html:165 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:163 templates/js/translated/bom.js:444 +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 msgid "New Part" msgstr "" -#: part/templates/part/category.html:189 +#: part/templates/part/category.html:192 #: templates/InvenTree/settings/part_parameters.html:7 #: templates/InvenTree/settings/sidebar.html:49 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:208 +#: part/templates/part/category.html:211 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:209 +#: part/templates/part/category.html:212 msgid "New Category" msgstr "" @@ -7932,9 +6901,9 @@ msgid "Add stocktake information" msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 -#: stock/admin.py:255 templates/InvenTree/settings/part_stocktake.html:30 +#: stock/admin.py:249 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2301 users/models.py:204 +#: templates/js/translated/stock.js:2186 users/models.py:191 msgid "Stocktake" msgstr "" @@ -7946,105 +6915,101 @@ msgstr "" msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:106 -msgid "Part Test Statistics" -msgstr "" - -#: part/templates/part/detail.html:155 stock/templates/stock/item.html:49 +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:172 +#: part/templates/part/detail.html:156 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:187 +#: part/templates/part/detail.html:171 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:191 +#: part/templates/part/detail.html:175 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:192 +#: part/templates/part/detail.html:176 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:215 +#: part/templates/part/detail.html:199 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:60 +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:271 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:276 +#: part/templates/part/detail.html:260 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:280 templates/js/translated/bom.js:340 +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:282 +#: part/templates/part/detail.html:266 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:288 +#: part/templates/part/detail.html:272 msgid "BOM actions" msgstr "" -#: part/templates/part/detail.html:292 +#: part/templates/part/detail.html:276 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:299 part/templates/part/detail.html:300 -#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:313 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:329 +#: part/templates/part/detail.html:313 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:354 stock/templates/stock/item.html:36 +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:368 +#: part/templates/part/detail.html:352 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:388 +#: part/templates/part/detail.html:372 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:672 +#: part/templates/part/detail.html:659 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:680 +#: part/templates/part/detail.html:667 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:765 +#: part/templates/part/detail.html:752 msgid "Add Test Result Template" msgstr "" @@ -8079,13 +7044,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 -#: templates/js/translated/order.js:154 templates/js/translated/tables.js:189 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 -#: templates/js/translated/order.js:155 +#: templates/js/translated/order.js:130 msgid "Select file format" msgstr "" @@ -8103,7 +7068,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:71 templates/js/translated/label.js:136 +#: stock/templates/stock/location.html:74 msgid "Print Label" msgstr "" @@ -8113,7 +7078,7 @@ msgstr "" #: part/templates/part/part_base.html:63 #: stock/templates/stock/item_base.html:110 -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:83 msgid "Stock actions" msgstr "" @@ -8125,7 +7090,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2299 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 msgid "Part actions" msgstr "" @@ -8169,12 +7134,20 @@ msgstr "" msgid "Part is not active" msgstr "" +#: part/templates/part/part_base.html:146 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/company.js:1565 +#: templates/js/translated/model_renderers.js:304 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:153 msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:690 +#: part/templates/part/part_base.html:682 msgid "Show Part Details" msgstr "" @@ -8188,47 +7161,51 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:300 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:331 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1271 templates/js/translated/part.js:2463 +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:361 +#: part/templates/part/part_base.html:352 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:365 +#: part/templates/part/part_base.html:356 #: stock/templates/stock/item_base.html:322 msgid "Search for serial number" msgstr "" -#: part/templates/part/part_base.html:453 +#: part/templates/part/part_base.html:444 msgid "Part QR Code" msgstr "" -#: part/templates/part/part_base.html:470 +#: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:520 +#: part/templates/part/part_base.html:512 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:537 +#: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:588 +#: part/templates/part/part_base.html:580 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:684 +#: part/templates/part/part_base.html:676 msgid "Hide Part Details" msgstr "" @@ -8282,13 +7259,13 @@ msgid "Variants" msgstr "" #: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:21 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/part.js:1249 templates/js/translated/part.js:2152 -#: templates/js/translated/part.js:2411 templates/js/translated/stock.js:1066 -#: templates/js/translated/stock.js:2155 templates/navbar.html:31 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2040 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -8324,17 +7301,17 @@ msgstr "" #: part/templates/part/prices.html:18 #: templates/InvenTree/settings/settings_staff_js.html:80 #: templates/InvenTree/settings/user.html:24 -#: templates/js/translated/helpers.js:103 +#: templates/js/translated/helpers.js:100 #: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 #: templates/notes_buttons.html:4 msgid "Edit" msgstr "" -#: part/templates/part/prices.html:28 stock/admin.py:251 +#: part/templates/part/prices.html:28 stock/admin.py:245 #: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1693 #: templates/js/translated/company.js:1703 -#: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2331 +#: templates/js/translated/stock.js:2216 msgid "Last Updated" msgstr "" @@ -8405,10 +7382,8 @@ msgstr "" msgid "Update Pricing" msgstr "" -#: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:228 -#: templates/js/translated/part.js:707 templates/js/translated/part.js:2147 -#: templates/js/translated/part.js:2149 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:704 +#: templates/js/translated/part.js:2140 templates/js/translated/part.js:2142 msgid "No Stock" msgstr "" @@ -8486,120 +7461,108 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:172 -msgid "Plugin cannot be deleted as it is currently active" -msgstr "" - -#: plugin/base/action/api.py:32 +#: plugin/base/action/api.py:24 msgid "No action specified" msgstr "" -#: plugin/base/action/api.py:41 +#: plugin/base/action/api.py:33 msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:125 plugin/base/barcodes/api.py:371 -#: plugin/base/barcodes/api.py:546 +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:129 +#: plugin/base/barcodes/api.py:128 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:163 plugin/base/barcodes/serializers.py:45 -msgid "Model is not supported" -msgstr "" - -#: plugin/base/barcodes/api.py:168 -msgid "Model instance not found" -msgstr "" - -#: plugin/base/barcodes/api.py:197 -#: templates/js/translated/purchase_order.js:1468 +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1402 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:336 +#: plugin/base/barcodes/api.py:293 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:353 +#: plugin/base/barcodes/api.py:310 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:357 +#: plugin/base/barcodes/api.py:314 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:381 +#: plugin/base/barcodes/api.py:338 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:430 +#: plugin/base/barcodes/api.py:387 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:467 +#: plugin/base/barcodes/api.py:424 msgid "No match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:510 +#: plugin/base/barcodes/api.py:467 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:513 +#: plugin/base/barcodes/api.py:470 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:551 plugin/base/barcodes/api.py:558 +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:569 +#: plugin/base/barcodes/api.py:526 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:593 templates/js/translated/build.js:2780 -#: templates/js/translated/sales_order.js:1953 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2585 +#: templates/js/translated/sales_order.js:1917 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:602 +#: plugin/base/barcodes/api.py:559 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:606 +#: plugin/base/barcodes/api.py:563 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:172 plugin/base/barcodes/mixins.py:204 +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 msgid "Found multiple matching supplier parts for barcode" msgstr "" -#: plugin/base/barcodes/mixins.py:222 +#: plugin/base/barcodes/mixins.py:197 #, python-brace-format msgid "Found multiple purchase orders matching '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:226 +#: plugin/base/barcodes/mixins.py:201 #, python-brace-format msgid "No matching purchase order for '{order}'" msgstr "" -#: plugin/base/barcodes/mixins.py:231 +#: plugin/base/barcodes/mixins.py:207 msgid "Purchase order does not match supplier" msgstr "" -#: plugin/base/barcodes/mixins.py:465 +#: plugin/base/barcodes/mixins.py:441 msgid "Failed to find pending line item for supplier part" msgstr "" -#: plugin/base/barcodes/mixins.py:496 +#: plugin/base/barcodes/mixins.py:472 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:504 +#: plugin/base/barcodes/mixins.py:480 msgid "Received purchase order line item" msgstr "" @@ -8607,121 +7570,76 @@ msgstr "" msgid "Scanned barcode data" msgstr "" -#: plugin/base/barcodes/serializers.py:30 -msgid "Model name to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:35 -msgid "Primary key of model object to generate barcode for" -msgstr "" - -#: plugin/base/barcodes/serializers.py:105 +#: plugin/base/barcodes/serializers.py:81 msgid "Purchase Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:111 +#: plugin/base/barcodes/serializers.py:87 msgid "Purchase order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:129 +#: plugin/base/barcodes/serializers.py:105 msgid "PurchaseOrder to receive items against" msgstr "" -#: plugin/base/barcodes/serializers.py:135 +#: plugin/base/barcodes/serializers.py:111 msgid "Purchase order has not been placed" msgstr "" -#: plugin/base/barcodes/serializers.py:143 +#: plugin/base/barcodes/serializers.py:119 msgid "Location to receive items into" msgstr "" -#: plugin/base/barcodes/serializers.py:149 +#: plugin/base/barcodes/serializers.py:125 msgid "Cannot select a structural location" msgstr "" -#: plugin/base/barcodes/serializers.py:163 +#: plugin/base/barcodes/serializers.py:139 msgid "Sales Order to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:169 +#: plugin/base/barcodes/serializers.py:145 msgid "Sales order is not pending" msgstr "" -#: plugin/base/barcodes/serializers.py:177 +#: plugin/base/barcodes/serializers.py:153 msgid "Sales order line item to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:184 +#: plugin/base/barcodes/serializers.py:160 msgid "Sales order shipment to allocate items against" msgstr "" -#: plugin/base/barcodes/serializers.py:190 +#: plugin/base/barcodes/serializers.py:166 msgid "Shipment has already been delivered" msgstr "" -#: plugin/base/barcodes/serializers.py:195 +#: plugin/base/barcodes/serializers.py:171 msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 templates/js/translated/label.js:148 +#: plugin/base/label/label.py:39 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:54 -msgid "Error rendering label to PDF" -msgstr "" - -#: plugin/base/label/mixins.py:68 -msgid "Error rendering label to HTML" -msgstr "" - -#: plugin/base/label/mixins.py:149 -msgid "No items provided to print" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:30 +#: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:22 -#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/inventree_label.py:23 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 #: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 msgid "InvenTree contributors" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:34 -msgid "Internal Barcode Format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:35 -msgid "Select an internal barcode format" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:37 -msgid "JSON barcodes (human readable)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:38 -msgid "Short barcodes (space optimized)" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:43 -msgid "Short Barcode Prefix" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:45 -msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" -msgstr "" - #: plugin/builtin/integration/core_notifications.py:34 msgid "InvenTree Notifications" msgstr "" @@ -8768,40 +7686,22 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:19 +#: plugin/builtin/labels/inventree_label.py:20 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:21 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:28 -#: plugin/builtin/labels/label_sheet.py:69 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 -#: plugin/builtin/labels/label_sheet.py:70 +#: plugin/builtin/labels/inventree_label.py:30 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:61 -msgid "InvenTree machine label printer" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:62 -msgid "Provides support for printing using a machine" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:149 -msgid "last used" -msgstr "" - -#: plugin/builtin/labels/inventree_machine.py:166 -msgid "Options" -msgstr "" - #: plugin/builtin/labels/label_sheet.py:29 msgid "Page size for the label sheet" msgstr "" @@ -8822,7 +7722,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:205 msgid "Landscape" msgstr "" @@ -8838,11 +7738,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:106 +#: plugin/builtin/labels/label_sheet.py:94 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:140 +#: plugin/builtin/labels/label_sheet.py:128 msgid "No labels were generated" msgstr "" @@ -8894,121 +7794,84 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:194 plugin/installer.py:282 -msgid "Only staff users can administer plugins" -msgstr "" - -#: plugin/installer.py:197 -msgid "Plugin installation is disabled" +#: plugin/installer.py:140 +msgid "Permission denied: only staff users can install plugins" msgstr "" -#: plugin/installer.py:248 +#: plugin/installer.py:189 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:254 +#: plugin/installer.py:195 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:273 -msgid "Plugin was not found in registry" -msgstr "" - -#: plugin/installer.py:276 -msgid "Plugin is not a packaged plugin" -msgstr "" - -#: plugin/installer.py:279 -msgid "Plugin package name not found" +#: plugin/installer.py:203 +msgid "Plugin installation failed" msgstr "" -#: plugin/installer.py:299 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:303 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" - -#: plugin/installer.py:316 -msgid "Uninstalled plugin successfully" -msgstr "" - -#: plugin/models.py:36 +#: plugin/models.py:29 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:37 +#: plugin/models.py:30 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:43 users/models.py:100 +#: plugin/models.py:33 users/models.py:89 msgid "Key" msgstr "" -#: plugin/models.py:44 +#: plugin/models.py:33 msgid "Key of plugin" msgstr "" -#: plugin/models.py:52 +#: plugin/models.py:41 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:59 plugin/serializers.py:90 -msgid "Package Name" -msgstr "" - -#: plugin/models.py:61 -msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" - -#: plugin/models.py:66 +#: plugin/models.py:45 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:157 templates/js/translated/table_filters.js:377 -#: templates/js/translated/table_filters.js:525 +#: plugin/models.py:139 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:500 msgid "Installed" msgstr "" -#: plugin/models.py:166 +#: plugin/models.py:148 msgid "Sample plugin" msgstr "" -#: plugin/models.py:174 +#: plugin/models.py:156 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:182 -msgid "Package Plugin" -msgstr "" - -#: plugin/models.py:220 report/models.py:474 -#: templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:180 templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:267 +#: plugin/models.py:227 msgid "Method" msgstr "" -#: plugin/plugin.py:270 +#: plugin/plugin.py:279 msgid "No author found" msgstr "" -#: plugin/registry.py:534 +#: plugin/registry.py:553 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:537 +#: plugin/registry.py:556 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:539 +#: plugin/registry.py:558 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -9053,1232 +7916,862 @@ msgstr "" msgid "InvenTree Contributors" msgstr "" -#: plugin/serializers.py:81 +#: plugin/serializers.py:79 msgid "Source URL" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:81 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:92 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" - -#: plugin/serializers.py:99 -#: templates/InvenTree/settings/plugin_settings.html:42 -#: templates/js/translated/plugin.js:86 -msgid "Version" +#: plugin/serializers.py:87 +msgid "Package Name" msgstr "" -#: plugin/serializers.py:101 -msgid "Version specifier for the plugin. Leave blank for latest version." +#: plugin/serializers.py:89 +msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:106 +#: plugin/serializers.py:93 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:108 +#: plugin/serializers.py:95 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:121 +#: plugin/serializers.py:108 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:123 +#: plugin/serializers.py:110 msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:161 +#: plugin/serializers.py:139 msgid "Full reload" msgstr "" -#: plugin/serializers.py:162 +#: plugin/serializers.py:140 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:168 +#: plugin/serializers.py:146 msgid "Force reload" msgstr "" -#: plugin/serializers.py:170 +#: plugin/serializers.py:148 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:177 -msgid "Collect plugins" -msgstr "" - -#: plugin/serializers.py:178 -msgid "Collect plugins and add them to the registry" -msgstr "" - -#: plugin/serializers.py:205 -msgid "Activate Plugin" -msgstr "" - -#: plugin/serializers.py:206 -msgid "Activate this plugin" -msgstr "" - -#: plugin/serializers.py:226 -msgid "Delete configuration" -msgstr "" - -#: plugin/serializers.py:227 -msgid "Delete the plugin configuration from the database" -msgstr "" - -#: report/api.py:88 -msgid "No valid objects provided to template" -msgstr "" - -#: report/api.py:103 report/models.py:438 report/serializers.py:98 -#: report/serializers.py:148 templates/js/translated/purchase_order.js:1817 -#: templates/js/translated/return_order.js:353 -#: templates/js/translated/sales_order.js:887 -#: templates/js/translated/sales_order.js:1047 -msgid "Items" -msgstr "" - -#: report/api.py:180 -msgid "Plugin not found" -msgstr "" - -#: report/api.py:182 -msgid "Plugin is not active" -msgstr "" - -#: report/api.py:184 -msgid "Plugin does not support label printing" -msgstr "" - -#: report/api.py:233 -msgid "Invalid label dimensions" -msgstr "" - -#: report/api.py:248 report/api.py:329 -msgid "No valid items provided to template" -msgstr "" - -#: report/api.py:283 -msgid "Error printing label" -msgstr "" - -#: report/api.py:375 report/api.py:411 -#, python-brace-format -msgid "Template file '{template}' is missing or does not exist" -msgstr "" - -#: report/helpers.py:43 -msgid "A4" +#: plugin/serializers.py:155 +msgid "Collect plugins" msgstr "" -#: report/helpers.py:44 -msgid "A3" +#: plugin/serializers.py:156 +msgid "Collect plugins and add them to the registry" msgstr "" -#: report/helpers.py:45 -msgid "Legal" +#: plugin/serializers.py:178 +msgid "Activate Plugin" msgstr "" -#: report/helpers.py:46 -msgid "Letter" +#: plugin/serializers.py:179 +msgid "Activate this plugin" msgstr "" -#: report/models.py:118 -msgid "Template file with this name already exists" +#: report/api.py:175 +msgid "No valid objects provided to template" msgstr "" -#: report/models.py:150 -msgid "Template name" +#: report/api.py:214 report/api.py:251 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/models.py:156 -msgid "Template description" +#: report/api.py:331 +msgid "Test report" msgstr "" -#: report/models.py:162 -msgid "Revision number (auto-increments)" +#: report/helpers.py:15 +msgid "A4" msgstr "" -#: report/models.py:202 -msgid "Filename Pattern" +#: report/helpers.py:16 +msgid "A3" msgstr "" -#: report/models.py:203 -msgid "Pattern for generating filenames" +#: report/helpers.py:17 +msgid "Legal" msgstr "" -#: report/models.py:208 -msgid "Template is enabled" +#: report/helpers.py:18 +msgid "Letter" msgstr "" -#: report/models.py:214 -msgid "Target model type for template" +#: report/models.py:173 +msgid "Template name" msgstr "" -#: report/models.py:234 -msgid "Filters" +#: report/models.py:179 +msgid "Report template file" msgstr "" -#: report/models.py:235 -msgid "Template query filters (comma-separated list of key=value pairs)" +#: report/models.py:186 +msgid "Report template description" msgstr "" -#: report/models.py:294 report/models.py:361 -msgid "Template file" +#: report/models.py:192 +msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:302 +#: report/models.py:200 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:308 +#: report/models.py:206 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:367 -msgid "Width [mm]" +#: report/models.py:309 +msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:368 -msgid "Label width, specified in mm" +#: report/models.py:316 +msgid "Report template is enabled" msgstr "" -#: report/models.py:374 -msgid "Height [mm]" +#: report/models.py:338 +msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:375 -msgid "Label height, specified in mm" +#: report/models.py:345 +msgid "Include Installed Tests" msgstr "" -#: report/models.py:438 -msgid "Number of items to process" +#: report/models.py:347 +msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:444 -msgid "Report generation is complete" +#: report/models.py:415 +msgid "Build Filters" msgstr "" -#: report/models.py:448 templates/js/translated/build.js:2349 -msgid "Progress" +#: report/models.py:416 +msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:448 -msgid "Report generation progress" +#: report/models.py:455 +msgid "Part Filters" msgstr "" #: report/models.py:456 -msgid "Report Template" -msgstr "" - -#: report/models.py:463 report/models.py:486 -msgid "Output File" +msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:464 report/models.py:487 -msgid "Generated output file" +#: report/models.py:488 +msgid "Purchase order query filters" msgstr "" -#: report/models.py:475 -msgid "Label output plugin" +#: report/models.py:524 +msgid "Sales order query filters" msgstr "" -#: report/models.py:479 -msgid "Label Template" +#: report/models.py:560 +msgid "Return order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:608 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:609 msgid "Report snippet file" msgstr "" -#: report/models.py:510 +#: report/models.py:616 msgid "Snippet file description" msgstr "" -#: report/models.py:528 +#: report/models.py:653 msgid "Asset" msgstr "" -#: report/models.py:529 +#: report/models.py:654 msgid "Report asset file" msgstr "" -#: report/models.py:536 +#: report/models.py:661 msgid "Asset file description" msgstr "" -#: report/serializers.py:91 -msgid "Select report template" -msgstr "" - -#: report/serializers.py:99 report/serializers.py:149 -msgid "List of item primary keys to include in the report" -msgstr "" - -#: report/serializers.py:132 -msgid "Select label template" -msgstr "" - -#: report/serializers.py:140 -msgid "Printing Plugin" -msgstr "" - -#: report/serializers.py:141 -msgid "Select plugin to use for label printing" -msgstr "" - -#: report/templates/label/part_label.html:31 -#: report/templates/label/stockitem_qr.html:21 -#: report/templates/label/stocklocation_qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: report/templates/label/part_label_code128.html:31 -#: report/templates/label/stocklocation_qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" +#: report/models.py:683 +msgid "stock location query filters (comma-separated list of key=value pairs)" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_report.html:146 +#: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:15 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:30 -#: report/templates/report/inventree_sales_order_report.html:30 -#: templates/js/translated/order.js:341 templates/js/translated/pricing.js:527 +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2185 -#: templates/js/translated/sales_order.js:1873 +#: templates/js/translated/purchase_order.js:2112 +#: templates/js/translated/sales_order.js:1837 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:55 -#: report/templates/report/inventree_return_order_report.html:48 -#: report/templates/report/inventree_sales_order_report.html:55 +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_purchase_order_report.html:72 -#: report/templates/report/inventree_sales_order_report.html:72 -#: templates/js/translated/purchase_order.js:2087 -#: templates/js/translated/sales_order.js:1842 -#: templates/test_statistics_table.html:8 -#: templates/test_statistics_table.html:19 +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2014 +#: templates/js/translated/sales_order.js:1806 msgid "Total" msgstr "" -#: report/templates/report/inventree_stock_location_report.html:97 +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:804 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1359 +#: templates/js/translated/build.js:2348 +#: templates/js/translated/model_renderers.js:222 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report.html:21 +#: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report.html:97 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report.html:102 -#: templates/js/translated/stock.js:1580 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2341 templates/js/translated/stock.js:1475 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report.html:103 stock/models.py:2544 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2345 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report.html:129 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report.html:131 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report.html:138 +#: report/templates/report/inventree_test_report_base.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report.html:140 +#: report/templates/report/inventree_test_report_base.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:599 stock/templates/stock/stock_sidebar.html:16 +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report.html:167 stock/admin.py:161 -#: templates/js/translated/stock.js:706 templates/js/translated/stock.js:877 -#: templates/js/translated/stock.js:3194 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:160 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3081 msgid "Serial" msgstr "" -#: report/templatetags/report.py:98 +#: report/templatetags/report.py:95 msgid "Asset file does not exist" msgstr "" -#: report/templatetags/report.py:154 report/templatetags/report.py:233 +#: report/templatetags/report.py:151 report/templatetags/report.py:216 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:258 +#: report/templatetags/report.py:241 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:299 +#: report/templatetags/report.py:282 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/admin.py:51 stock/admin.py:171 +#: stock/admin.py:52 stock/admin.py:170 msgid "Location ID" msgstr "" -#: stock/admin.py:63 stock/templates/stock/location.html:128 -#: stock/templates/stock/location.html:134 +#: stock/admin.py:54 stock/admin.py:174 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 msgid "Location Path" msgstr "" -#: stock/admin.py:148 +#: stock/admin.py:147 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:167 +#: stock/admin.py:166 msgid "Status Code" msgstr "" -#: stock/admin.py:179 +#: stock/admin.py:178 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:184 -msgid "Supplier Part SKU" +#: stock/admin.py:183 +msgid "Supplier ID" msgstr "" #: stock/admin.py:189 -msgid "Supplier ID" +msgid "Supplier Name" msgstr "" -#: stock/admin.py:200 +#: stock/admin.py:194 msgid "Customer ID" msgstr "" -#: stock/admin.py:205 stock/models.py:825 +#: stock/admin.py:199 stock/models.py:784 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" -#: stock/admin.py:210 +#: stock/admin.py:204 msgid "Build ID" msgstr "" -#: stock/admin.py:220 +#: stock/admin.py:214 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:225 +#: stock/admin.py:219 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:240 +#: stock/admin.py:234 msgid "Review Needed" msgstr "" -#: stock/admin.py:245 +#: stock/admin.py:239 msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:260 stock/models.py:919 +#: stock/admin.py:254 stock/models.py:878 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2315 users/models.py:124 +#: templates/js/translated/stock.js:2200 users/models.py:113 msgid "Expiry Date" msgstr "" -#: stock/api.py:310 -msgid "Filter by location depth" -msgstr "" - -#: stock/api.py:330 -msgid "Filter by top-level locations" -msgstr "" - -#: stock/api.py:345 -msgid "Include sub-locations in filtered results" -msgstr "" - -#: stock/api.py:367 stock/serializers.py:1186 -msgid "Parent Location" -msgstr "" - -#: stock/api.py:368 -msgid "Filter by parent location" -msgstr "" - -#: stock/api.py:615 templates/js/translated/table_filters.js:434 +#: stock/api.py:540 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:803 +#: stock/api.py:725 msgid "Part Tree" msgstr "" -#: stock/api.py:833 +#: stock/api.py:753 msgid "Expiry date before" msgstr "" -#: stock/api.py:837 +#: stock/api.py:757 msgid "Expiry date after" msgstr "" -#: stock/api.py:840 stock/serializers.py:604 -#: stock/templates/stock/item_base.html:439 -#: templates/js/translated/table_filters.js:448 +#: stock/api.py:760 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:927 +#: stock/api.py:846 msgid "Quantity is required" msgstr "" -#: stock/api.py:933 +#: stock/api.py:852 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:964 +#: stock/api.py:883 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:974 +#: stock/api.py:893 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1005 +#: stock/api.py:924 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:64 +#: stock/models.py:68 msgid "Stock Location type" msgstr "" -#: stock/models.py:65 +#: stock/models.py:69 msgid "Stock Location types" msgstr "" -#: stock/models.py:91 +#: stock/models.py:95 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:131 stock/models.py:807 +#: stock/models.py:127 stock/models.py:766 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:132 stock/templates/stock/location.html:183 +#: stock/models.py:128 stock/templates/stock/location.html:179 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 -#: users/models.py:205 +#: users/models.py:192 msgid "Stock Locations" msgstr "" -#: stock/models.py:180 stock/models.py:968 +#: stock/models.py:160 stock/models.py:927 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:181 stock/models.py:969 +#: stock/models.py:161 stock/models.py:928 msgid "Select Owner" msgstr "" -#: stock/models.py:189 +#: stock/models.py:169 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:196 templates/js/translated/stock.js:2865 -#: templates/js/translated/table_filters.js:250 +#: stock/models.py:176 templates/js/translated/stock.js:2752 +#: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:197 +#: stock/models.py:177 msgid "This is an external stock location" msgstr "" -#: stock/models.py:203 templates/js/translated/stock.js:2874 -#: templates/js/translated/table_filters.js:253 +#: stock/models.py:183 templates/js/translated/stock.js:2761 +#: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:207 +#: stock/models.py:187 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:279 +#: stock/models.py:256 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:664 +#: stock/models.py:620 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:691 stock/serializers.py:480 +#: stock/models.py:650 stock/serializers.py:224 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:708 +#: stock/models.py:667 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:718 stock/models.py:731 +#: stock/models.py:677 stock/models.py:690 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:721 +#: stock/models.py:680 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:743 +#: stock/models.py:704 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:748 +#: stock/models.py:709 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:761 +#: stock/models.py:722 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:777 +#: stock/models.py:736 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:789 +#: stock/models.py:748 msgid "Base part" msgstr "" -#: stock/models.py:799 +#: stock/models.py:758 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:811 +#: stock/models.py:770 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:819 stock/serializers.py:1580 +#: stock/models.py:778 stock/serializers.py:1252 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:830 +#: stock/models.py:789 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:849 +#: stock/models.py:808 msgid "Serial number for this item" msgstr "" -#: stock/models.py:863 stock/serializers.py:1563 +#: stock/models.py:822 stock/serializers.py:1235 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:868 +#: stock/models.py:827 msgid "Stock Quantity" msgstr "" -#: stock/models.py:878 +#: stock/models.py:837 msgid "Source Build" msgstr "" -#: stock/models.py:881 +#: stock/models.py:840 msgid "Build for this stock item" msgstr "" -#: stock/models.py:888 stock/templates/stock/item_base.html:363 +#: stock/models.py:847 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:891 +#: stock/models.py:850 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:900 +#: stock/models.py:859 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:904 +#: stock/models.py:863 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:910 +#: stock/models.py:869 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:921 +#: stock/models.py:880 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:939 +#: stock/models.py:898 msgid "Delete on deplete" msgstr "" -#: stock/models.py:940 +#: stock/models.py:899 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:960 +#: stock/models.py:919 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:991 +#: stock/models.py:950 msgid "Converted to part" msgstr "" -#: stock/models.py:1511 +#: stock/models.py:1460 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1466 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1525 +#: stock/models.py:1474 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1531 +#: stock/models.py:1480 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1536 +#: stock/models.py:1485 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1544 stock/serializers.py:726 +#: stock/models.py:1493 stock/serializers.py:456 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1641 -msgid "Test template does not exist" -msgstr "" - -#: stock/models.py:1659 +#: stock/models.py:1560 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1663 +#: stock/models.py:1564 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1567 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1669 +#: stock/models.py:1570 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1672 +#: stock/models.py:1573 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1675 +#: stock/models.py:1576 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1682 stock/serializers.py:1469 +#: stock/models.py:1583 stock/serializers.py:1149 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1686 +#: stock/models.py:1587 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1694 +#: stock/models.py:1595 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1699 +#: stock/models.py:1600 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1960 +#: stock/models.py:1804 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2343 -msgid "Stock Item Tracking" -msgstr "" - -#: stock/models.py:2376 +#: stock/models.py:2261 msgid "Entry notes" msgstr "" -#: stock/models.py:2416 -msgid "Stock Item Test Result" -msgstr "" - -#: stock/models.py:2449 +#: stock/models.py:2320 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2454 +#: stock/models.py:2326 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2459 -msgid "Invalid value for this test" +#: stock/models.py:2341 +msgid "Test name" msgstr "" -#: stock/models.py:2544 +#: stock/models.py:2345 msgid "Test result" msgstr "" -#: stock/models.py:2551 +#: stock/models.py:2352 msgid "Test output value" msgstr "" -#: stock/models.py:2559 +#: stock/models.py:2360 msgid "Test result attachment" msgstr "" -#: stock/models.py:2563 +#: stock/models.py:2364 msgid "Test notes" msgstr "" -#: stock/models.py:2571 templates/js/translated/stock.js:1633 -msgid "Test station" -msgstr "" - -#: stock/models.py:2572 -msgid "The identifier of the test station where the test was performed" -msgstr "" - -#: stock/models.py:2578 -msgid "Started" -msgstr "" - -#: stock/models.py:2579 -msgid "The timestamp of the test start" -msgstr "" - -#: stock/models.py:2585 -msgid "Finished" -msgstr "" - -#: stock/models.py:2586 -msgid "The timestamp of the test finish" -msgstr "" - -#: stock/serializers.py:76 -msgid "Generated batch code" -msgstr "" - -#: stock/serializers.py:85 -msgid "Select build order" -msgstr "" - -#: stock/serializers.py:94 -msgid "Select stock item to generate batch code for" -msgstr "" - -#: stock/serializers.py:103 -msgid "Select location to generate batch code for" -msgstr "" - -#: stock/serializers.py:112 -msgid "Select part to generate batch code for" -msgstr "" - -#: stock/serializers.py:121 -msgid "Select purchase order" -msgstr "" - -#: stock/serializers.py:128 -msgid "Enter quantity for batch code" -msgstr "" - -#: stock/serializers.py:151 -msgid "Generated serial number" -msgstr "" - -#: stock/serializers.py:160 -msgid "Select part to generate serial number for" -msgstr "" - -#: stock/serializers.py:168 -msgid "Quantity of serial numbers to generate" -msgstr "" - -#: stock/serializers.py:233 -msgid "Test template for this result" -msgstr "" - -#: stock/serializers.py:254 -msgid "Template ID or test name must be provided" -msgstr "" - -#: stock/serializers.py:286 -msgid "The test finished time cannot be earlier than the test started time" -msgstr "" - -#: stock/serializers.py:323 +#: stock/serializers.py:118 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:452 stock/templates/stock/item_base.html:193 -msgid "Parent Item" -msgstr "" - -#: stock/serializers.py:453 -msgid "Parent stock item" -msgstr "" - -#: stock/serializers.py:472 +#: stock/serializers.py:216 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:596 stock/templates/stock/item_base.html:437 -#: templates/js/translated/table_filters.js:442 users/models.py:174 -msgid "Expired" -msgstr "" - -#: stock/serializers.py:602 stock/templates/stock/stock_sidebar.html:20 -msgid "Child Items" -msgstr "" - -#: stock/serializers.py:606 -msgid "Tracking Items" -msgstr "" - -#: stock/serializers.py:612 +#: stock/serializers.py:329 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:631 -msgid "Minimum Pricing" -msgstr "" - -#: stock/serializers.py:637 -msgid "Maximum Pricing" -msgstr "" - -#: stock/serializers.py:661 +#: stock/serializers.py:391 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:674 +#: stock/serializers.py:404 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:411 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:692 stock/serializers.py:1426 stock/serializers.py:1682 +#: stock/serializers.py:422 stock/serializers.py:1106 stock/serializers.py:1354 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:699 +#: stock/serializers.py:429 msgid "Optional note field" msgstr "" -#: stock/serializers.py:709 +#: stock/serializers.py:439 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:764 +#: stock/serializers.py:494 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:771 +#: stock/serializers.py:501 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:772 +#: stock/serializers.py:502 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:777 stock/serializers.py:857 stock/serializers.py:983 -#: stock/serializers.py:1033 +#: stock/serializers.py:507 stock/serializers.py:582 stock/serializers.py:678 +#: stock/serializers.py:728 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:785 +#: stock/serializers.py:515 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:793 +#: stock/serializers.py:523 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:804 +#: stock/serializers.py:530 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:817 +#: stock/serializers.py:542 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:852 +#: stock/serializers.py:577 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:903 -msgid "Unsupported statistic type: " -msgstr "" - -#: stock/serializers.py:917 +#: stock/serializers.py:612 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:930 +#: stock/serializers.py:625 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:947 +#: stock/serializers.py:642 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:978 +#: stock/serializers.py:673 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:1015 +#: stock/serializers.py:710 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1021 +#: stock/serializers.py:716 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1117 stock/serializers.py:1194 -#: stock/templates/stock/location.html:162 -#: stock/templates/stock/location.html:219 -#: stock/templates/stock/location_sidebar.html:5 -msgid "Sublocations" -msgstr "" - -#: stock/serializers.py:1187 templates/js/translated/stock.js:160 -msgid "Parent stock location" -msgstr "" - -#: stock/serializers.py:1298 +#: stock/serializers.py:978 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1302 +#: stock/serializers.py:982 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1306 +#: stock/serializers.py:986 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1010 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1016 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1344 +#: stock/serializers.py:1024 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1354 stock/serializers.py:1608 +#: stock/serializers.py:1034 stock/serializers.py:1280 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1433 +#: stock/serializers.py:1113 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1118 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1439 +#: stock/serializers.py:1119 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1444 +#: stock/serializers.py:1124 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1445 +#: stock/serializers.py:1125 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1455 +#: stock/serializers.py:1135 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1522 -msgid "No Change" -msgstr "" - -#: stock/serializers.py:1551 +#: stock/serializers.py:1223 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1570 +#: stock/serializers.py:1242 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1598 +#: stock/serializers.py:1270 msgid "Stock transaction notes" msgstr "" -#: stock/status_codes.py:11 -msgid "OK" -msgstr "" - -#: stock/status_codes.py:12 -msgid "Attention needed" -msgstr "" - -#: stock/status_codes.py:13 -msgid "Damaged" -msgstr "" - -#: stock/status_codes.py:14 -msgid "Destroyed" -msgstr "" - -#: stock/status_codes.py:15 -msgid "Rejected" -msgstr "" - -#: stock/status_codes.py:19 -msgid "Quarantined" -msgstr "" - -#: stock/status_codes.py:40 -msgid "Legacy stock tracking entry" -msgstr "" - -#: stock/status_codes.py:42 templates/js/translated/stock.js:550 -msgid "Stock item created" -msgstr "" - -#: stock/status_codes.py:45 -msgid "Edited stock item" -msgstr "" - -#: stock/status_codes.py:46 -msgid "Assigned serial number" -msgstr "" - -#: stock/status_codes.py:49 -msgid "Stock counted" -msgstr "" - -#: stock/status_codes.py:50 -msgid "Stock manually added" -msgstr "" - -#: stock/status_codes.py:51 -msgid "Stock manually removed" -msgstr "" - -#: stock/status_codes.py:54 -msgid "Location changed" -msgstr "" - -#: stock/status_codes.py:55 -msgid "Stock updated" -msgstr "" - -#: stock/status_codes.py:58 -msgid "Installed into assembly" -msgstr "" - -#: stock/status_codes.py:59 -msgid "Removed from assembly" -msgstr "" - -#: stock/status_codes.py:61 -msgid "Installed component item" -msgstr "" - -#: stock/status_codes.py:62 -msgid "Removed component item" -msgstr "" - -#: stock/status_codes.py:65 -msgid "Split from parent item" -msgstr "" - -#: stock/status_codes.py:66 -msgid "Split child item" -msgstr "" - -#: stock/status_codes.py:69 templates/js/translated/stock.js:1943 -msgid "Merged stock items" -msgstr "" - -#: stock/status_codes.py:72 -msgid "Converted to variant" -msgstr "" - -#: stock/status_codes.py:75 -msgid "Build order output created" -msgstr "" - -#: stock/status_codes.py:76 -msgid "Build order output completed" -msgstr "" - -#: stock/status_codes.py:77 -msgid "Build order output rejected" -msgstr "" - -#: stock/status_codes.py:78 templates/js/translated/stock.js:1849 -msgid "Consumed by build order" -msgstr "" - -#: stock/status_codes.py:81 -msgid "Shipped against Sales Order" -msgstr "" - -#: stock/status_codes.py:84 -msgid "Received against Purchase Order" -msgstr "" - -#: stock/status_codes.py:87 -msgid "Returned against Return Order" -msgstr "" - -#: stock/status_codes.py:90 templates/js/translated/table_filters.js:382 -msgid "Sent to customer" -msgstr "" - -#: stock/status_codes.py:91 -msgid "Returned from customer" -msgstr "" - #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -10300,7 +8793,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:276 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:279 msgid "Delete Test Data" msgstr "" @@ -10316,15 +8809,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3354 +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3239 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:264 +#: stock/templates/stock/item.html:267 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:294 templates/js/translated/stock.js:1786 +#: stock/templates/stock/item.html:296 templates/js/translated/stock.js:1667 msgid "Add Test Result" msgstr "" @@ -10337,8 +8830,8 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:59 -#: stock/templates/stock/location.html:67 -#: templates/js/translated/filters.js:434 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 msgid "Printing actions" msgstr "" @@ -10347,17 +8840,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:87 templates/js/translated/stock.js:1909 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1792 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1891 +#: templates/js/translated/stock.js:1774 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:1783 msgid "Remove stock" msgstr "" @@ -10366,12 +8859,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:93 templates/js/translated/stock.js:1918 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1801 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1972 +#: templates/js/translated/stock.js:1855 msgid "Assign to customer" msgstr "" @@ -10412,10 +8905,14 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2295 templates/navbar.html:38 +#: templates/js/translated/build.js:2116 templates/navbar.html:38 msgid "Build" msgstr "" +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + #: stock/templates/stock/item_base.html:211 msgid "No manufacturer set" msgstr "" @@ -10425,7 +8922,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be msgstr "" #: stock/templates/stock/item_base.html:252 -#: stock/templates/stock/location.html:146 +#: stock/templates/stock/location.html:149 msgid "Read only" msgstr "" @@ -10469,8 +8966,12 @@ msgstr "" msgid "Navigate to next serial number" msgstr "" +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2552 +#: templates/js/translated/build.js:2373 msgid "No location set" msgstr "" @@ -10487,6 +8988,11 @@ msgstr "" msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:163 +msgid "Expired" +msgstr "" + #: stock/templates/stock/item_base.html:439 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" @@ -10496,40 +9002,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:504 -#: templates/js/translated/stock.js:2037 +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1922 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:527 +#: stock/templates/stock/item_base.html:532 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:536 +#: stock/templates/stock/item_base.html:541 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:547 +#: stock/templates/stock/item_base.html:552 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:611 +#: stock/templates/stock/item_base.html:616 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:614 +#: stock/templates/stock/item_base.html:619 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:620 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:623 +#: stock/templates/stock/item_base.html:628 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:656 +#: stock/templates/stock/item_base.html:662 msgid "Return to Stock" msgstr "" @@ -10541,84 +9047,86 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:38 msgid "Perform stocktake for this stock location" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:60 +#: stock/templates/stock/location.html:63 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:61 +#: stock/templates/stock/location.html:64 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:72 +#: stock/templates/stock/location.html:75 msgid "Print Location Report" msgstr "" -#: stock/templates/stock/location.html:101 +#: stock/templates/stock/location.html:104 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:103 +#: stock/templates/stock/location.html:106 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:108 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:135 +#: stock/templates/stock/location.html:138 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/location.html:144 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:145 +#: stock/templates/stock/location.html:148 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:173 -msgid "Location Type" +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:223 +#: stock/templates/stock/location.html:217 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:224 +#: stock/templates/stock/location.html:218 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:298 -#: templates/js/translated/stock.js:2657 +#: stock/templates/stock/location.html:289 +#: templates/js/translated/stock.js:2543 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:320 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:393 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:404 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -10634,6 +9142,10 @@ msgstr "" msgid "Allocations" msgstr "" +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -10840,12 +9352,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:36 +#: templates/InvenTree/settings/login.html:34 msgid "Single Sign On" msgstr "" @@ -10884,11 +9396,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" @@ -10922,36 +9434,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/plugin.html:35 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:44 -#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:41 +#: templates/InvenTree/settings/plugin.html:42 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:58 +#: templates/InvenTree/settings/plugin.html:55 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:73 +#: templates/InvenTree/settings/plugin.html:70 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:79 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:84 +#: templates/InvenTree/settings/plugin.html:81 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10960,6 +9472,11 @@ msgstr "" msgid "Plugin information" msgstr "" +#: templates/InvenTree/settings/plugin_settings.html:42 +#: templates/js/translated/plugin.js:86 +msgid "Version" +msgstr "" + #: templates/InvenTree/settings/plugin_settings.html:47 msgid "no version information supplied" msgstr "" @@ -10994,7 +9511,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:100 #: templates/js/translated/plugin.js:68 -#: templates/js/translated/table_filters.js:517 +#: templates/js/translated/table_filters.js:492 msgid "Builtin" msgstr "" @@ -11004,7 +9521,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 #: templates/js/translated/plugin.js:72 -#: templates/js/translated/table_filters.js:521 +#: templates/js/translated/table_filters.js:496 msgid "Sample" msgstr "" @@ -11038,20 +9555,20 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:35 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:39 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:47 -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:51 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" @@ -11107,9 +9624,9 @@ msgid "Rate" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 -#: templates/js/translated/forms.js:548 templates/js/translated/helpers.js:108 -#: templates/js/translated/part.js:395 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:252 users/models.py:406 +#: templates/js/translated/forms.js:543 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:399 msgid "Delete" msgstr "" @@ -11130,7 +9647,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2400 +#: templates/js/translated/build.js:2221 msgid "group" msgstr "" @@ -11149,12 +9666,12 @@ msgid "No category parameter templates found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:308 -#: templates/js/translated/part.js:1652 +#: templates/js/translated/part.js:1645 msgid "Edit Template" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:309 -#: templates/js/translated/part.js:1653 +#: templates/js/translated/part.js:1646 msgid "Delete Template" msgstr "" @@ -11162,41 +9679,41 @@ msgstr "" msgid "Edit Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:352 +#: templates/InvenTree/settings/settings_staff_js.html:353 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:387 +#: templates/InvenTree/settings/settings_staff_js.html:388 msgid "Create Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:416 +#: templates/InvenTree/settings/settings_staff_js.html:418 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:439 +#: templates/InvenTree/settings/settings_staff_js.html:440 msgid "No stock location types found" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:464 +#: templates/InvenTree/settings/settings_staff_js.html:461 msgid "Location count" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:469 -#: templates/InvenTree/settings/settings_staff_js.html:483 +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 msgid "Edit Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:470 +#: templates/InvenTree/settings/settings_staff_js.html:467 msgid "Delete Location type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:493 +#: templates/InvenTree/settings/settings_staff_js.html:490 msgid "Delete Location Type" msgstr "" -#: templates/InvenTree/settings/settings_staff_js.html:503 -#: templates/InvenTree/settings/stock.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:35 msgid "New Location Type" msgstr "" @@ -11218,7 +9735,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2200 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2155 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -11253,7 +9770,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:34 +#: templates/InvenTree/settings/stock.html:31 msgid "Stock Location Types" msgstr "" @@ -11267,6 +9784,18 @@ msgstr "" msgid "Change Password" msgstr "" +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + #: templates/InvenTree/settings/user.html:55 msgid "The following email addresses are associated with your account:" msgstr "" @@ -11280,7 +9809,7 @@ msgid "Unverified" msgstr "" #: templates/InvenTree/settings/user.html:80 -#: templates/js/translated/company.js:957 +#: templates/js/translated/company.js:947 msgid "Primary" msgstr "" @@ -11340,49 +9869,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:171 +#: templates/InvenTree/settings/user.html:168 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:177 +#: templates/InvenTree/settings/user.html:174 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:178 +#: templates/InvenTree/settings/user.html:175 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:187 +#: templates/InvenTree/settings/user.html:184 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:188 +#: templates/InvenTree/settings/user.html:185 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:192 +#: templates/InvenTree/settings/user.html:189 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:193 +#: templates/InvenTree/settings/user.html:190 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:194 +#: templates/InvenTree/settings/user.html:191 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:207 +#: templates/InvenTree/settings/user.html:204 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:209 +#: templates/InvenTree/settings/user.html:206 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:223 +#: templates/InvenTree/settings/user.html:218 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11532,7 +10061,7 @@ msgid "Submit Bug Report" msgstr "" #: templates/about.html:91 templates/clip.html:4 -#: templates/js/translated/helpers.js:592 +#: templates/js/translated/helpers.js:585 msgid "copy to clipboard" msgstr "" @@ -11554,7 +10083,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:775 +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:770 msgid "Confirm" msgstr "" @@ -11563,26 +10092,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:19 -#: templates/account/login.html:40 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:23 +#: templates/account/login.html:21 msgid "Not a member?" msgstr "" -#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 -#: templates/socialaccount/signup.html:23 +#: templates/socialaccount/signup.html:20 msgid "Sign Up" msgstr "" -#: templates/account/login.html:47 +#: templates/account/login.html:45 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:55 +#: templates/account/login.html:53 msgid "or log in with" msgstr "" @@ -11596,7 +10125,7 @@ msgid "Are you sure you want to sign out?" msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 -#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:45 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" msgstr "" @@ -11654,7 +10183,7 @@ msgstr "" #: templates/account/signup_closed.html:15 #: templates/socialaccount/authentication_error.html:19 -#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 +#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:27 msgid "Return to login page" msgstr "" @@ -11710,19 +10239,15 @@ msgstr "" msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." msgstr "" -#: templates/allauth_2fa/setup.html:20 -msgid "Secret: " -msgstr "" - -#: templates/allauth_2fa/setup.html:24 +#: templates/allauth_2fa/setup.html:23 msgid "Step 2" msgstr "" -#: templates/allauth_2fa/setup.html:28 +#: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" msgstr "" -#: templates/allauth_2fa/setup.html:38 +#: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "" @@ -11787,7 +10312,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2747 +#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2552 msgid "Required Quantity" msgstr "" @@ -11801,15 +10326,15 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3237 +#: templates/js/translated/part.js:3187 msgid "Minimum Quantity" msgstr "" -#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1135 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1136 +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 msgid "No response from the InvenTree server" msgstr "" @@ -11821,27 +10346,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1145 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1146 +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1150 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1151 +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1155 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1156 +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 msgid "The requested resource could not be located on the server" msgstr "" @@ -11853,11 +10378,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1160 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1161 +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 msgid "Connection timeout while requesting data from server" msgstr "" @@ -11889,27 +10414,27 @@ msgstr "" msgid "Delete attachments" msgstr "" -#: templates/js/translated/attachment.js:260 +#: templates/js/translated/attachment.js:253 msgid "Attachment actions" msgstr "" -#: templates/js/translated/attachment.js:294 +#: templates/js/translated/attachment.js:275 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:334 +#: templates/js/translated/attachment.js:315 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:365 +#: templates/js/translated/attachment.js:346 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:385 +#: templates/js/translated/attachment.js:366 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:393 +#: templates/js/translated/attachment.js:374 msgid "Delete attachment" msgstr "" @@ -11942,85 +10467,85 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:252 -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:403 +#: templates/js/translated/barcode.js:372 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:451 templates/navbar.html:114 +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:489 +#: templates/js/translated/barcode.js:458 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:529 +#: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:535 +#: templates/js/translated/barcode.js:504 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:598 templates/js/translated/stock.js:1188 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:641 +#: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:646 -#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:678 +#: templates/js/translated/barcode.js:647 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:718 +#: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:722 +#: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:729 +#: templates/js/translated/barcode.js:698 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:738 +#: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:757 +#: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:793 +#: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:837 +#: templates/js/translated/barcode.js:806 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:906 -#: templates/js/translated/barcode.js:915 +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" msgstr "" @@ -12037,9 +10562,9 @@ msgid "Row Data" msgstr "" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:629 -#: templates/js/translated/modals.js:757 templates/js/translated/modals.js:1065 -#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 +#: templates/js/translated/purchase_order.js:805 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -12156,7 +10681,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2673 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2496 msgid "Variant stock allowed" msgstr "" @@ -12176,183 +10701,179 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2812 -msgid "External stock" -msgstr "" - -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2786 -#: templates/js/translated/sales_order.js:1946 +#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2790 +#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2595 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2792 -#: templates/js/translated/part.js:1263 -#: templates/js/translated/sales_order.js:1943 +#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2597 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2794 +#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2599 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2777 +#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2582 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1285 +#: templates/js/translated/bom.js:1279 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1281 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1289 +#: templates/js/translated/bom.js:1283 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 +#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1293 +#: templates/js/translated/bom.js:1287 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1313 +#: templates/js/translated/bom.js:1307 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1397 +#: templates/js/translated/bom.js:1391 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2658 +#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2481 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1683 +#: templates/js/translated/bom.js:1677 msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:143 +#: templates/js/translated/build.js:142 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:191 +#: templates/js/translated/build.js:190 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:223 +#: templates/js/translated/build.js:222 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:232 +#: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:238 +#: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:297 +#: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:305 +#: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:310 +#: templates/js/translated/build.js:309 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:327 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:369 templates/js/translated/stock.js:127 -#: templates/js/translated/stock.js:301 +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:371 templates/js/translated/stock.js:129 -#: templates/js/translated/stock.js:303 +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:380 +#: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:381 +#: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:389 +#: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:390 +#: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:396 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:436 +#: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:444 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:453 +#: templates/js/translated/build.js:452 msgid "Scrap build output" msgstr "" -#: templates/js/translated/build.js:460 +#: templates/js/translated/build.js:459 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:480 +#: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" msgstr "" -#: templates/js/translated/build.js:498 +#: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:584 templates/js/translated/build.js:711 -#: templates/js/translated/build.js:836 +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:585 templates/js/translated/build.js:712 -#: templates/js/translated/build.js:837 +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:599 +#: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" msgstr "" -#: templates/js/translated/build.js:603 templates/js/translated/build.js:736 -#: templates/js/translated/build.js:859 +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 msgid "Output" msgstr "" @@ -12376,263 +10897,236 @@ msgstr "" msgid "The completion status of the build order will not be adjusted" msgstr "" -#: templates/js/translated/build.js:761 +#: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" msgstr "" -#: templates/js/translated/build.js:851 +#: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" msgstr "" -#: templates/js/translated/build.js:853 +#: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" msgstr "" -#: templates/js/translated/build.js:854 +#: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" msgstr "" -#: templates/js/translated/build.js:872 +#: templates/js/translated/build.js:873 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:959 -msgid "Delete allocations" -msgstr "" - -#: templates/js/translated/build.js:966 -msgid "Delete Stock Allocations" -msgstr "" - -#: templates/js/translated/build.js:989 -msgid "No allocated stock" -msgstr "" - -#: templates/js/translated/build.js:1045 -msgid "Stock item" -msgstr "" - -#: templates/js/translated/build.js:1070 -msgid "Edit build allocation" -msgstr "" - -#: templates/js/translated/build.js:1071 -msgid "Delete build allocation" -msgstr "" - -#: templates/js/translated/build.js:1089 -msgid "Edit Build Allocation" -msgstr "" - -#: templates/js/translated/build.js:1102 -msgid "Delete Build Allocation" +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:1133 -msgid "No build order allocations found" +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2337 +msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1178 +#: templates/js/translated/build.js:1003 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1200 +#: templates/js/translated/build.js:1025 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1218 +#: templates/js/translated/build.js:1043 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1236 +#: templates/js/translated/build.js:1061 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1289 +#: templates/js/translated/build.js:1115 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1290 +#: templates/js/translated/build.js:1116 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1120 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1470 +#: templates/js/translated/build.js:1289 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1563 +#: templates/js/translated/build.js:1382 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1577 +#: templates/js/translated/build.js:1396 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1749 -#: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1207 +#: templates/js/translated/build.js:1568 +#: templates/js/translated/purchase_order.js:630 +#: templates/js/translated/sales_order.js:1171 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1750 -#: templates/js/translated/sales_order.js:1208 +#: templates/js/translated/build.js:1569 +#: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1813 -#: templates/js/translated/sales_order.js:1157 +#: templates/js/translated/build.js:1632 +#: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1890 +#: templates/js/translated/build.js:1709 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1891 +#: templates/js/translated/build.js:1710 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1905 -#: templates/js/translated/sales_order.js:1222 +#: templates/js/translated/build.js:1724 +#: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1933 +#: templates/js/translated/build.js:1752 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1944 -#: templates/js/translated/sales_order.js:1319 +#: templates/js/translated/build.js:1763 +#: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2017 -#: templates/js/translated/sales_order.js:1398 +#: templates/js/translated/build.js:1836 +#: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2114 +#: templates/js/translated/build.js:1933 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2115 +#: templates/js/translated/build.js:1934 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2117 +#: templates/js/translated/build.js:1936 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2118 +#: templates/js/translated/build.js:1937 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2119 +#: templates/js/translated/build.js:1938 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2149 +#: templates/js/translated/build.js:1969 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2254 +#: templates/js/translated/build.js:2075 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2289 templates/js/translated/build.js:2652 -#: templates/js/translated/forms.js:2196 templates/js/translated/forms.js:2212 -#: templates/js/translated/part.js:2322 templates/js/translated/part.js:2761 -#: templates/js/translated/stock.js:2068 templates/js/translated/stock.js:2795 +#: templates/js/translated/build.js:2110 templates/js/translated/build.js:2475 +#: templates/js/translated/forms.js:2151 templates/js/translated/forms.js:2167 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1953 templates/js/translated/stock.js:2681 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2303 +#: templates/js/translated/build.js:2124 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2385 templates/js/translated/stock.js:3126 +#: templates/js/translated/build.js:2170 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2206 templates/js/translated/stock.js:3013 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2561 -#: templates/js/translated/sales_order.js:1682 +#: templates/js/translated/build.js:2382 +#: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2562 -#: templates/js/translated/sales_order.js:1683 +#: templates/js/translated/build.js:2383 +#: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2577 +#: templates/js/translated/build.js:2398 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2410 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2628 +#: templates/js/translated/build.js:2451 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2629 +#: templates/js/translated/build.js:2452 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2470 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2677 templates/js/translated/part.js:793 -#: templates/js/translated/part.js:1209 +#: templates/js/translated/build.js:2500 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2720 -msgid "Gets Inherited" -msgstr "" - -#: templates/js/translated/build.js:2730 +#: templates/js/translated/build.js:2535 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2782 -#: templates/js/translated/sales_order.js:1951 +#: templates/js/translated/build.js:2587 +#: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2837 -msgid "Consumable Item" +#: templates/js/translated/build.js:2613 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" msgstr "" -#: templates/js/translated/build.js:2844 -msgid "Tracked item" +#: templates/js/translated/build.js:2638 +msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2845 -msgid "Allocate tracked items against individual build outputs" +#: templates/js/translated/build.js:2643 +msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2853 -#: templates/js/translated/sales_order.js:2052 +#: templates/js/translated/build.js:2650 +#: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2858 templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:2655 templates/js/translated/stock.js:1836 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2862 -#: templates/js/translated/sales_order.js:2046 +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2866 +#: templates/js/translated/build.js:2663 msgid "Remove stock allocation" msgstr "" @@ -12655,7 +11149,7 @@ msgid "Add Supplier" msgstr "" #: templates/js/translated/company.js:243 -#: templates/js/translated/purchase_order.js:318 +#: templates/js/translated/purchase_order.js:352 msgid "Add Supplier Part" msgstr "" @@ -12667,329 +11161,329 @@ msgstr "" msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:466 +#: templates/js/translated/company.js:465 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:546 +#: templates/js/translated/company.js:536 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:555 +#: templates/js/translated/company.js:545 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:570 +#: templates/js/translated/company.js:560 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:619 +#: templates/js/translated/company.js:609 msgid "Create New Contact" msgstr "" -#: templates/js/translated/company.js:635 -#: templates/js/translated/company.js:758 +#: templates/js/translated/company.js:625 +#: templates/js/translated/company.js:748 msgid "Edit Contact" msgstr "" -#: templates/js/translated/company.js:672 +#: templates/js/translated/company.js:662 msgid "All selected contacts will be deleted" msgstr "" -#: templates/js/translated/company.js:678 -#: templates/js/translated/company.js:742 +#: templates/js/translated/company.js:668 +#: templates/js/translated/company.js:732 msgid "Role" msgstr "" -#: templates/js/translated/company.js:686 +#: templates/js/translated/company.js:676 msgid "Delete Contacts" msgstr "" -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:707 msgid "No contacts found" msgstr "" -#: templates/js/translated/company.js:730 +#: templates/js/translated/company.js:720 msgid "Phone Number" msgstr "" -#: templates/js/translated/company.js:736 +#: templates/js/translated/company.js:726 msgid "Email Address" msgstr "" -#: templates/js/translated/company.js:762 +#: templates/js/translated/company.js:752 msgid "Delete Contact" msgstr "" -#: templates/js/translated/company.js:859 +#: templates/js/translated/company.js:849 msgid "Create New Address" msgstr "" -#: templates/js/translated/company.js:874 -#: templates/js/translated/company.js:1035 +#: templates/js/translated/company.js:864 +#: templates/js/translated/company.js:1025 msgid "Edit Address" msgstr "" -#: templates/js/translated/company.js:909 +#: templates/js/translated/company.js:899 msgid "All selected addresses will be deleted" msgstr "" -#: templates/js/translated/company.js:923 +#: templates/js/translated/company.js:913 msgid "Delete Addresses" msgstr "" -#: templates/js/translated/company.js:950 +#: templates/js/translated/company.js:940 msgid "No addresses found" msgstr "" -#: templates/js/translated/company.js:989 +#: templates/js/translated/company.js:979 msgid "Postal city" msgstr "" -#: templates/js/translated/company.js:995 +#: templates/js/translated/company.js:985 msgid "State/province" msgstr "" -#: templates/js/translated/company.js:1007 +#: templates/js/translated/company.js:997 msgid "Courier notes" msgstr "" -#: templates/js/translated/company.js:1013 +#: templates/js/translated/company.js:1003 msgid "Internal notes" msgstr "" -#: templates/js/translated/company.js:1039 +#: templates/js/translated/company.js:1029 msgid "Delete Address" msgstr "" -#: templates/js/translated/company.js:1112 +#: templates/js/translated/company.js:1102 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:1127 +#: templates/js/translated/company.js:1117 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:1161 +#: templates/js/translated/company.js:1151 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:1175 +#: templates/js/translated/company.js:1165 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:1191 -#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2250 +#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1469 templates/js/translated/part.js:2244 msgid "Order parts" msgstr "" -#: templates/js/translated/company.js:1208 +#: templates/js/translated/company.js:1198 msgid "Delete manufacturer parts" msgstr "" -#: templates/js/translated/company.js:1240 +#: templates/js/translated/company.js:1230 msgid "Manufacturer part actions" msgstr "" -#: templates/js/translated/company.js:1259 +#: templates/js/translated/company.js:1249 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:1279 -#: templates/js/translated/company.js:1567 templates/js/translated/part.js:801 -#: templates/js/translated/part.js:1217 +#: templates/js/translated/company.js:1269 +#: templates/js/translated/company.js:1557 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:1283 -#: templates/js/translated/company.js:1571 templates/js/translated/part.js:805 -#: templates/js/translated/part.js:1221 +#: templates/js/translated/company.js:1273 +#: templates/js/translated/company.js:1561 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1471 +#: templates/js/translated/company.js:1393 templates/js/translated/part.js:1464 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1534 +#: templates/js/translated/company.js:1428 templates/js/translated/part.js:1527 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1535 +#: templates/js/translated/company.js:1429 templates/js/translated/part.js:1528 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1440 +#: templates/js/translated/company.js:1446 templates/js/translated/part.js:1433 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1556 +#: templates/js/translated/company.js:1455 templates/js/translated/part.js:1549 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:1496 +#: templates/js/translated/company.js:1486 msgid "Delete supplier parts" msgstr "" -#: templates/js/translated/company.js:1546 +#: templates/js/translated/company.js:1536 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1664 +#: templates/js/translated/company.js:1654 msgid "Base Units" msgstr "" -#: templates/js/translated/company.js:1694 +#: templates/js/translated/company.js:1684 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1725 +#: templates/js/translated/company.js:1715 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1726 +#: templates/js/translated/company.js:1716 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1779 +#: templates/js/translated/company.js:1769 #: templates/js/translated/pricing.js:694 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1789 +#: templates/js/translated/company.js:1779 #: templates/js/translated/pricing.js:712 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1804 +#: templates/js/translated/company.js:1794 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1833 +#: templates/js/translated/company.js:1823 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1840 +#: templates/js/translated/company.js:1830 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1841 +#: templates/js/translated/company.js:1831 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:189 -#: templates/js/translated/filters.js:670 +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 msgid "true" msgstr "" -#: templates/js/translated/filters.js:193 -#: templates/js/translated/filters.js:671 +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 msgid "false" msgstr "" -#: templates/js/translated/filters.js:217 +#: templates/js/translated/filters.js:214 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:440 +#: templates/js/translated/filters.js:437 msgid "Print Labels" msgstr "" -#: templates/js/translated/filters.js:444 +#: templates/js/translated/filters.js:441 msgid "Print Reports" msgstr "" -#: templates/js/translated/filters.js:456 +#: templates/js/translated/filters.js:453 msgid "Download table data" msgstr "" -#: templates/js/translated/filters.js:463 +#: templates/js/translated/filters.js:460 msgid "Reload table data" msgstr "" -#: templates/js/translated/filters.js:472 +#: templates/js/translated/filters.js:469 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:480 +#: templates/js/translated/filters.js:477 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:580 +#: templates/js/translated/filters.js:582 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:379 templates/js/translated/forms.js:394 -#: templates/js/translated/forms.js:408 templates/js/translated/forms.js:422 +#: templates/js/translated/forms.js:374 templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:403 templates/js/translated/forms.js:417 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:381 +#: templates/js/translated/forms.js:376 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:396 +#: templates/js/translated/forms.js:391 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:410 +#: templates/js/translated/forms.js:405 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:424 +#: templates/js/translated/forms.js:419 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:801 +#: templates/js/translated/forms.js:796 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:904 +#: templates/js/translated/forms.js:899 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1478 templates/modals.html:19 +#: templates/js/translated/forms.js:1469 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:2008 +#: templates/js/translated/forms.js:1967 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2318 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2271 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2532 +#: templates/js/translated/forms.js:2485 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3071 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3134 +#: templates/js/translated/forms.js:3071 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3146 +#: templates/js/translated/forms.js:3083 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:80 +#: templates/js/translated/helpers.js:77 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:83 +#: templates/js/translated/helpers.js:80 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:96 +#: templates/js/translated/helpers.js:93 msgid "True" msgstr "" -#: templates/js/translated/helpers.js:97 +#: templates/js/translated/helpers.js:94 msgid "False" msgstr "" @@ -12997,74 +11491,114 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:48 templates/js/translated/report.js:38 +#: templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:49 templates/js/translated/report.js:39 +#: templates/js/translated/label.js:54 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:143 +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 msgid "Labels sent to printer" msgstr "" -#: templates/js/translated/modals.js:59 templates/js/translated/modals.js:159 -#: templates/js/translated/modals.js:688 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:64 templates/js/translated/modals.js:158 -#: templates/js/translated/modals.js:756 templates/js/translated/modals.js:1064 +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:156 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:446 +#: templates/js/translated/modals.js:445 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:597 +#: templates/js/translated/modals.js:596 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:687 +#: templates/js/translated/modals.js:682 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:745 +#: templates/js/translated/modals.js:740 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:1016 +#: templates/js/translated/modals.js:1011 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:1028 +#: templates/js/translated/modals.js:1023 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1125 +#: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1140 +#: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1141 +#: templates/js/translated/modals.js:1136 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1164 +#: templates/js/translated/modals.js:1159 msgid "Error requesting form data" msgstr "" @@ -13074,7 +11608,7 @@ msgstr "" #: templates/js/translated/news.js:38 #: templates/js/translated/notification.js:46 -#: templates/js/translated/part.js:1611 +#: templates/js/translated/part.js:1604 msgid "ID" msgstr "" @@ -13102,404 +11636,396 @@ msgstr "" msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:48 -msgid "Hold Order" -msgstr "" - -#: templates/js/translated/order.js:53 -msgid "Are you sure you wish to place this order on hold?" -msgstr "" - -#: templates/js/translated/order.js:114 +#: templates/js/translated/order.js:89 msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:151 +#: templates/js/translated/order.js:126 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:266 +#: templates/js/translated/order.js:241 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:280 +#: templates/js/translated/order.js:255 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:293 +#: templates/js/translated/order.js:268 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:306 -#: templates/js/translated/purchase_order.js:2060 +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:394 +#: templates/js/translated/order.js:369 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:395 +#: templates/js/translated/order.js:370 msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:399 +#: templates/js/translated/order.js:374 msgid "Delete line" msgstr "" -#: templates/js/translated/part.js:91 +#: templates/js/translated/part.js:90 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:95 +#: templates/js/translated/part.js:94 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:99 +#: templates/js/translated/part.js:98 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:122 +#: templates/js/translated/part.js:121 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:334 templates/js/translated/stock.js:147 -#: templates/js/translated/stock.js:182 +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:355 +#: templates/js/translated/part.js:352 msgid "Create Part Category" msgstr "" -#: templates/js/translated/part.js:358 +#: templates/js/translated/part.js:355 msgid "Create new category after this one" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:356 msgid "Part category created" msgstr "" -#: templates/js/translated/part.js:373 +#: templates/js/translated/part.js:370 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:386 +#: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:391 +#: templates/js/translated/part.js:388 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:400 +#: templates/js/translated/part.js:397 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:404 +#: templates/js/translated/part.js:401 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:409 +#: templates/js/translated/part.js:406 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:433 +#: templates/js/translated/part.js:430 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:435 +#: templates/js/translated/part.js:432 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:436 +#: templates/js/translated/part.js:433 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:464 +#: templates/js/translated/part.js:461 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:466 +#: templates/js/translated/part.js:463 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:474 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:534 +#: templates/js/translated/part.js:531 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:549 +#: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:551 +#: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:552 +#: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:553 +#: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:557 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:596 +#: templates/js/translated/part.js:593 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:598 +#: templates/js/translated/part.js:595 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:603 +#: templates/js/translated/part.js:600 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:605 +#: templates/js/translated/part.js:602 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:632 +#: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:635 +#: templates/js/translated/part.js:632 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:660 +#: templates/js/translated/part.js:657 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:688 -#: templates/js/translated/table_filters.js:755 +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:743 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:691 +#: templates/js/translated/part.js:688 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:751 +#: templates/js/translated/part.js:748 msgid "Demand" msgstr "" -#: templates/js/translated/part.js:774 +#: templates/js/translated/part.js:771 msgid "Unit" msgstr "" -#: templates/js/translated/part.js:797 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:809 +#: templates/js/translated/part.js:806 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:813 +#: templates/js/translated/part.js:810 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:896 +#: templates/js/translated/part.js:889 msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:904 +#: templates/js/translated/part.js:897 msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:908 +#: templates/js/translated/part.js:901 msgid "Stocktake report scheduled" msgstr "" -#: templates/js/translated/part.js:1057 +#: templates/js/translated/part.js:1050 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:1115 templates/js/translated/part.js:1151 +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1119 templates/js/translated/part.js:1161 +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1288 +#: templates/js/translated/part.js:1281 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1606 +#: templates/js/translated/part.js:1599 msgid "No part parameter templates found" msgstr "" -#: templates/js/translated/part.js:1669 +#: templates/js/translated/part.js:1662 msgid "Edit Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1681 +#: templates/js/translated/part.js:1674 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/js/translated/part.js:1689 +#: templates/js/translated/part.js:1682 msgid "Delete Part Parameter Template" msgstr "" -#: templates/js/translated/part.js:1723 -#: templates/js/translated/purchase_order.js:1724 +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1651 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/part.js:1867 -#: templates/js/translated/purchase_order.js:2223 -#: templates/js/translated/return_order.js:754 -#: templates/js/translated/sales_order.js:1911 +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2150 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" msgstr "" -#: templates/js/translated/part.js:1913 -#: templates/js/translated/purchase_order.js:2290 +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2217 msgid "Receive line item" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:1969 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1998 +#: templates/js/translated/part.js:1991 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2086 templates/js/translated/part.js:2525 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:2207 +#: templates/js/translated/part.js:2200 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2212 +#: templates/js/translated/part.js:2205 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2241 +#: templates/js/translated/part.js:2235 msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2293 +#: templates/js/translated/part.js:2287 msgid "part" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2288 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2390 +#: templates/js/translated/part.js:2384 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2550 templates/js/translated/part.js:2680 -#: templates/js/translated/stock.js:2754 +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2640 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2566 +#: templates/js/translated/part.js:2547 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2664 +#: templates/js/translated/part.js:2645 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2700 templates/js/translated/stock.js:2774 +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2660 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2761 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2795 +#: templates/js/translated/part.js:2777 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2883 +#: templates/js/translated/part.js:2854 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2905 templates/js/translated/search.js:342 -msgid "results" -msgstr "" - -#: templates/js/translated/part.js:2955 -msgid "Edit test template" +#: templates/js/translated/part.js:2905 templates/js/translated/stock.js:1436 +msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2956 -msgid "Delete test template" +#: templates/js/translated/part.js:2906 templates/js/translated/stock.js:1437 +#: templates/js/translated/stock.js:1699 +msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2960 +#: templates/js/translated/part.js:2910 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2976 +#: templates/js/translated/part.js:2926 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2990 +#: templates/js/translated/part.js:2940 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3069 templates/js/translated/part.js:3070 +#: templates/js/translated/part.js:3019 templates/js/translated/part.js:3020 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3072 +#: templates/js/translated/part.js:3022 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3078 +#: templates/js/translated/part.js:3028 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3128 +#: templates/js/translated/part.js:3078 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3134 +#: templates/js/translated/part.js:3084 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3230 +#: templates/js/translated/part.js:3180 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3246 +#: templates/js/translated/part.js:3196 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3291 +#: templates/js/translated/part.js:3241 msgid "Minimum Stock Level" msgstr "" @@ -13619,229 +12145,227 @@ msgstr "" msgid "Duplication Options" msgstr "" -#: templates/js/translated/purchase_order.js:431 +#: templates/js/translated/purchase_order.js:450 msgid "Complete Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:448 +#: templates/js/translated/purchase_order.js:467 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:552 +#: templates/js/translated/sales_order.js:500 msgid "Mark this order as complete?" msgstr "" -#: templates/js/translated/purchase_order.js:454 +#: templates/js/translated/purchase_order.js:473 msgid "All line items have been received" msgstr "" -#: templates/js/translated/purchase_order.js:459 +#: templates/js/translated/purchase_order.js:478 msgid "This order has line items which have not been marked as received." msgstr "" -#: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/purchase_order.js:479 +#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" -#: templates/js/translated/purchase_order.js:483 +#: templates/js/translated/purchase_order.js:502 msgid "Cancel Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:488 +#: templates/js/translated/purchase_order.js:507 msgid "Are you sure you wish to cancel this purchase order?" msgstr "" -#: templates/js/translated/purchase_order.js:494 +#: templates/js/translated/purchase_order.js:513 msgid "This purchase order can not be cancelled" msgstr "" -#: templates/js/translated/purchase_order.js:515 +#: templates/js/translated/purchase_order.js:534 #: templates/js/translated/return_order.js:164 msgid "After placing this order, line items will no longer be editable." msgstr "" -#: templates/js/translated/purchase_order.js:520 +#: templates/js/translated/purchase_order.js:539 msgid "Issue Purchase Order" msgstr "" -#: templates/js/translated/purchase_order.js:612 +#: templates/js/translated/purchase_order.js:631 msgid "At least one purchaseable part must be selected" msgstr "" -#: templates/js/translated/purchase_order.js:637 +#: templates/js/translated/purchase_order.js:656 msgid "Quantity to order" msgstr "" -#: templates/js/translated/purchase_order.js:646 +#: templates/js/translated/purchase_order.js:665 msgid "New supplier part" msgstr "" -#: templates/js/translated/purchase_order.js:664 +#: templates/js/translated/purchase_order.js:683 msgid "New purchase order" msgstr "" -#: templates/js/translated/purchase_order.js:705 +#: templates/js/translated/purchase_order.js:715 msgid "Add to purchase order" msgstr "" -#: templates/js/translated/purchase_order.js:755 -msgid "Merge" -msgstr "" - -#: templates/js/translated/purchase_order.js:859 +#: templates/js/translated/purchase_order.js:863 msgid "No matching supplier parts" msgstr "" -#: templates/js/translated/purchase_order.js:878 +#: templates/js/translated/purchase_order.js:882 msgid "No matching purchase orders" msgstr "" -#: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:490 +#: templates/js/translated/purchase_order.js:1069 msgid "Select Line Items" msgstr "" -#: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/purchase_order.js:1070 +#: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/purchase_order.js:1104 +#: templates/js/translated/purchase_order.js:1100 msgid "Received Quantity" msgstr "" -#: templates/js/translated/purchase_order.js:1115 +#: templates/js/translated/purchase_order.js:1111 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/purchase_order.js:1170 -#: templates/js/translated/stock.js:1215 -msgid "Specify packaging for incoming stock items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1187 msgid "Stock Status" msgstr "" -#: templates/js/translated/purchase_order.js:1237 +#: templates/js/translated/purchase_order.js:1201 msgid "Add barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1238 +#: templates/js/translated/purchase_order.js:1202 msgid "Remove barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1241 +#: templates/js/translated/purchase_order.js:1205 msgid "Specify location" msgstr "" -#: templates/js/translated/purchase_order.js:1249 +#: templates/js/translated/purchase_order.js:1213 msgid "Add batch code" msgstr "" -#: templates/js/translated/purchase_order.js:1259 -msgid "Specify packaging" -msgstr "" - -#: templates/js/translated/purchase_order.js:1270 +#: templates/js/translated/purchase_order.js:1224 msgid "Add serial numbers" msgstr "" -#: templates/js/translated/purchase_order.js:1281 -msgid "Add note" -msgstr "" - -#: templates/js/translated/purchase_order.js:1338 +#: templates/js/translated/purchase_order.js:1276 msgid "Serials" msgstr "" -#: templates/js/translated/purchase_order.js:1368 +#: templates/js/translated/purchase_order.js:1301 msgid "Order Code" msgstr "" -#: templates/js/translated/purchase_order.js:1370 +#: templates/js/translated/purchase_order.js:1303 msgid "Quantity to Receive" msgstr "" -#: templates/js/translated/purchase_order.js:1395 -#: templates/js/translated/return_order.js:559 +#: templates/js/translated/purchase_order.js:1329 +#: templates/js/translated/return_order.js:561 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/purchase_order.js:1396 +#: templates/js/translated/purchase_order.js:1330 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/purchase_order.js:1464 +#: templates/js/translated/purchase_order.js:1398 msgid "Scan Item Barcode" msgstr "" -#: templates/js/translated/purchase_order.js:1465 +#: templates/js/translated/purchase_order.js:1399 msgid "Scan barcode on incoming item (must not match any existing stock items)" msgstr "" -#: templates/js/translated/purchase_order.js:1479 +#: templates/js/translated/purchase_order.js:1413 msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1751 -#: templates/js/translated/return_order.js:285 -#: templates/js/translated/sales_order.js:810 -#: templates/js/translated/sales_order.js:1034 +#: templates/js/translated/purchase_order.js:1678 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/purchase_order.js:1744 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1840 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/purchase_order.js:1858 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1986 -#: templates/js/translated/sales_order.js:2106 +#: templates/js/translated/purchase_order.js:1913 +#: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2001 -#: templates/js/translated/return_order.js:475 -#: templates/js/translated/return_order.js:667 -#: templates/js/translated/sales_order.js:2119 +#: templates/js/translated/purchase_order.js:1928 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2012 -#: templates/js/translated/return_order.js:680 -#: templates/js/translated/sales_order.js:2130 +#: templates/js/translated/purchase_order.js:1939 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2294 -#: templates/js/translated/sales_order.js:2060 +#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2295 -#: templates/js/translated/return_order.js:799 -#: templates/js/translated/sales_order.js:2061 +#: templates/js/translated/purchase_order.js:2222 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2296 -#: templates/js/translated/return_order.js:803 -#: templates/js/translated/sales_order.js:2067 +#: templates/js/translated/purchase_order.js:2223 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:49 -msgid "Print Report" +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:68 -msgid "Report print successful" +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:73 -msgid "Report printing failed" +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" #: templates/js/translated/return_order.js:60 @@ -13873,25 +12397,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:265 +#: templates/js/translated/return_order.js:266 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:299 -#: templates/js/translated/sales_order.js:824 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:560 +#: templates/js/translated/return_order.js:562 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:691 -#: templates/js/translated/sales_order.js:2267 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:796 +#: templates/js/translated/return_order.js:798 msgid "Mark item as received" msgstr "" @@ -13935,156 +12459,140 @@ msgstr "" msgid "Skip" msgstr "" -#: templates/js/translated/sales_order.js:484 -msgid "Ship Sales Order" -msgstr "" - -#: templates/js/translated/sales_order.js:500 -msgid "Ship this order?" -msgstr "" - -#: templates/js/translated/sales_order.js:506 -msgid "Order cannot be shipped as there are incomplete shipments" -msgstr "" - #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:514 -msgid "Shipping this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/sales_order.js:572 +#: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:577 +#: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:596 +#: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:601 +#: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:655 +#: templates/js/translated/sales_order.js:618 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:764 +#: templates/js/translated/sales_order.js:728 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:944 +#: templates/js/translated/sales_order.js:908 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:947 +#: templates/js/translated/sales_order.js:911 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:916 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:969 +#: templates/js/translated/sales_order.js:933 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:984 +#: templates/js/translated/sales_order.js:948 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1017 +#: templates/js/translated/sales_order.js:981 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1042 +#: templates/js/translated/sales_order.js:1006 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1066 -#: templates/js/translated/sales_order.js:1565 +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1084 +#: templates/js/translated/sales_order.js:1048 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1088 +#: templates/js/translated/sales_order.js:1052 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1255 +#: templates/js/translated/sales_order.js:1219 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1306 +#: templates/js/translated/sales_order.js:1270 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1307 +#: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1513 +#: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1583 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1620 +#: templates/js/translated/sales_order.js:1584 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1659 -#: templates/js/translated/sales_order.js:1746 -#: templates/js/translated/stock.js:1861 +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1744 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1667 -#: templates/js/translated/sales_order.js:1755 +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2044 +#: templates/js/translated/sales_order.js:2008 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2048 +#: templates/js/translated/sales_order.js:2012 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2057 -#: templates/js/translated/sales_order.js:2245 +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2071 +#: templates/js/translated/sales_order.js:2035 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2074 +#: templates/js/translated/sales_order.js:2038 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2145 +#: templates/js/translated/sales_order.js:2109 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2253 +#: templates/js/translated/sales_order.js:2217 msgid "Update Unit Price" msgstr "" @@ -14100,6 +12608,10 @@ msgstr "" msgid "result" msgstr "" +#: templates/js/translated/search.js:342 +msgid "results" +msgstr "" + #: templates/js/translated/search.js:352 msgid "Minimize results" msgstr "" @@ -14108,751 +12620,730 @@ msgstr "" msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:106 +#: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:137 +#: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 msgid "Add Location type" msgstr "" -#: templates/js/translated/stock.js:209 +#: templates/js/translated/stock.js:202 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:224 +#: templates/js/translated/stock.js:217 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:219 msgid "Create another location after this one" msgstr "" -#: templates/js/translated/stock.js:227 +#: templates/js/translated/stock.js:220 msgid "Stock location created" msgstr "" -#: templates/js/translated/stock.js:241 +#: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:248 +#: templates/js/translated/stock.js:241 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:257 +#: templates/js/translated/stock.js:250 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:261 +#: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:266 +#: templates/js/translated/stock.js:259 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:320 +#: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:356 +#: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:445 +#: templates/js/translated/stock.js:439 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:465 +#: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:481 +#: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:486 +#: templates/js/translated/stock.js:480 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:501 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:549 +#: templates/js/translated/stock.js:543 msgid "Create another item after this one" msgstr "" -#: templates/js/translated/stock.js:561 +#: templates/js/translated/stock.js:555 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:574 +#: templates/js/translated/stock.js:568 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:599 +#: templates/js/translated/stock.js:593 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:603 templates/js/translated/stock.js:604 +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:620 +#: templates/js/translated/stock.js:614 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:640 +#: templates/js/translated/stock.js:634 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:649 +#: templates/js/translated/stock.js:643 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:757 +#: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:835 +#: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:836 +#: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:838 +#: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:839 +#: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:933 +#: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:934 +#: templates/js/translated/stock.js:929 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:1031 +#: templates/js/translated/stock.js:1024 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:1032 +#: templates/js/translated/stock.js:1025 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:1038 +#: templates/js/translated/stock.js:1031 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:1039 +#: templates/js/translated/stock.js:1032 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1036 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:1044 +#: templates/js/translated/stock.js:1037 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:1048 +#: templates/js/translated/stock.js:1041 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1049 users/models.py:396 +#: templates/js/translated/stock.js:1042 users/models.py:389 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:1053 +#: templates/js/translated/stock.js:1046 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1152 +#: templates/js/translated/stock.js:1143 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1168 -msgid "Adjust batch code" -msgstr "" - -#: templates/js/translated/stock.js:1178 -msgid "Adjust packaging" -msgstr "" - -#: templates/js/translated/stock.js:1256 templates/js/translated/stock.js:3382 +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3267 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1257 +#: templates/js/translated/stock.js:1178 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1303 +#: templates/js/translated/stock.js:1224 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1448 +#: templates/js/translated/stock.js:1360 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1362 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1455 +#: templates/js/translated/stock.js:1367 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1535 +#: templates/js/translated/stock.js:1429 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1538 +#: templates/js/translated/stock.js:1432 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1541 -msgid "Edit test result" -msgstr "" - -#: templates/js/translated/stock.js:1542 templates/js/translated/stock.js:1816 -msgid "Delete test result" -msgstr "" - -#: templates/js/translated/stock.js:1561 +#: templates/js/translated/stock.js:1456 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1520 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1638 -msgid "Test started" -msgstr "" - -#: templates/js/translated/stock.js:1647 -msgid "Test finished" -msgstr "" - -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1682 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1821 +#: templates/js/translated/stock.js:1704 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1853 +#: templates/js/translated/stock.js:1736 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1857 +#: templates/js/translated/stock.js:1740 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1865 +#: templates/js/translated/stock.js:1748 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1871 +#: templates/js/translated/stock.js:1754 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1927 +#: templates/js/translated/stock.js:1810 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1936 +#: templates/js/translated/stock.js:1819 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1985 +#: templates/js/translated/stock.js:1868 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:2038 +#: templates/js/translated/stock.js:1923 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/stock.js:1928 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:2054 +#: templates/js/translated/stock.js:1939 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:1983 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2176 +#: templates/js/translated/stock.js:2061 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2181 +#: templates/js/translated/stock.js:2066 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2069 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2187 +#: templates/js/translated/stock.js:2072 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:2074 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2191 +#: templates/js/translated/stock.js:2076 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2194 +#: templates/js/translated/stock.js:2079 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2196 +#: templates/js/translated/stock.js:2081 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2085 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2087 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2207 +#: templates/js/translated/stock.js:2092 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2209 +#: templates/js/translated/stock.js:2094 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2211 +#: templates/js/translated/stock.js:2096 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2215 -#: templates/js/translated/table_filters.js:357 +#: templates/js/translated/stock.js:2100 +#: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2380 +#: templates/js/translated/stock.js:2265 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2427 +#: templates/js/translated/stock.js:2312 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2555 +#: templates/js/translated/stock.js:2440 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2658 +#: templates/js/translated/stock.js:2544 msgid "stock locations" msgstr "" -#: templates/js/translated/stock.js:2813 +#: templates/js/translated/stock.js:2699 msgid "Load Sublocations" msgstr "" -#: templates/js/translated/stock.js:2930 +#: templates/js/translated/stock.js:2817 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2934 +#: templates/js/translated/stock.js:2821 msgid "No changes" msgstr "" -#: templates/js/translated/stock.js:2946 +#: templates/js/translated/stock.js:2833 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2968 +#: templates/js/translated/stock.js:2855 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2985 +#: templates/js/translated/stock.js:2872 msgid "Build order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3000 +#: templates/js/translated/stock.js:2887 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3017 +#: templates/js/translated/stock.js:2904 msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3034 +#: templates/js/translated/stock.js:2921 msgid "Return Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:3053 +#: templates/js/translated/stock.js:2940 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:3071 +#: templates/js/translated/stock.js:2958 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:3089 +#: templates/js/translated/stock.js:2976 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:3097 +#: templates/js/translated/stock.js:2984 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:3169 +#: templates/js/translated/stock.js:3056 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:3223 templates/js/translated/stock.js:3259 +#: templates/js/translated/stock.js:3108 templates/js/translated/stock.js:3143 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:3280 +#: templates/js/translated/stock.js:3165 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:3301 +#: templates/js/translated/stock.js:3186 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:3302 +#: templates/js/translated/stock.js:3187 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:3304 +#: templates/js/translated/stock.js:3189 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:3305 +#: templates/js/translated/stock.js:3190 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:3306 +#: templates/js/translated/stock.js:3191 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:3307 +#: templates/js/translated/stock.js:3192 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:3320 +#: templates/js/translated/stock.js:3205 msgid "Select part to install" msgstr "" -#: templates/js/translated/stock.js:3383 +#: templates/js/translated/stock.js:3268 msgid "Select one or more stock items" msgstr "" -#: templates/js/translated/stock.js:3396 +#: templates/js/translated/stock.js:3281 msgid "Selected stock items" msgstr "" -#: templates/js/translated/stock.js:3400 +#: templates/js/translated/stock.js:3285 msgid "Change Stock Status" msgstr "" -#: templates/js/translated/stock.js:3477 -msgid "This week" -msgstr "" - -#: templates/js/translated/stock.js:3485 -msgid "This month" -msgstr "" - -#: templates/js/translated/table_filters.js:73 +#: templates/js/translated/table_filters.js:74 msgid "Has project code" msgstr "" -#: templates/js/translated/table_filters.js:88 -#: templates/js/translated/table_filters.js:608 -#: templates/js/translated/table_filters.js:620 -#: templates/js/translated/table_filters.js:661 +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:601 +#: templates/js/translated/table_filters.js:613 +#: templates/js/translated/table_filters.js:654 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:161 -msgid "Testable Part" +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:618 +#: templates/js/translated/table_filters.js:644 +#: templates/js/translated/table_filters.js:659 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 +msgid "Assigned to me" msgstr "" -#: templates/js/translated/table_filters.js:165 +#: templates/js/translated/table_filters.js:158 msgid "Trackable Part" msgstr "" -#: templates/js/translated/table_filters.js:169 +#: templates/js/translated/table_filters.js:162 msgid "Assembled Part" msgstr "" -#: templates/js/translated/table_filters.js:173 +#: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" msgstr "" -#: templates/js/translated/table_filters.js:241 -#: templates/js/translated/table_filters.js:352 +#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:775 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 msgid "Include sublocations" msgstr "" -#: templates/js/translated/table_filters.js:242 +#: templates/js/translated/table_filters.js:235 msgid "Include locations" msgstr "" -#: templates/js/translated/table_filters.js:274 +#: templates/js/translated/table_filters.js:267 msgid "Has location type" msgstr "" -#: templates/js/translated/table_filters.js:285 -#: templates/js/translated/table_filters.js:286 -#: templates/js/translated/table_filters.js:714 +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:707 msgid "Include subcategories" msgstr "" -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:767 +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:755 msgid "Subscribed" msgstr "" -#: templates/js/translated/table_filters.js:305 -#: templates/js/translated/table_filters.js:387 +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 msgid "Is Serialized" msgstr "" -#: templates/js/translated/table_filters.js:308 -#: templates/js/translated/table_filters.js:394 +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" msgstr "" -#: templates/js/translated/table_filters.js:309 -#: templates/js/translated/table_filters.js:395 +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:312 -#: templates/js/translated/table_filters.js:398 +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:399 +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" msgstr "" -#: templates/js/translated/table_filters.js:316 -#: templates/js/translated/table_filters.js:317 -#: templates/js/translated/table_filters.js:390 -#: templates/js/translated/table_filters.js:391 +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 msgid "Serial number" msgstr "" -#: templates/js/translated/table_filters.js:321 -#: templates/js/translated/table_filters.js:412 +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 msgid "Batch code" msgstr "" -#: templates/js/translated/table_filters.js:332 -#: templates/js/translated/table_filters.js:703 +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:696 msgid "Active parts" msgstr "" -#: templates/js/translated/table_filters.js:333 +#: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" msgstr "" -#: templates/js/translated/table_filters.js:338 +#: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" msgstr "" -#: templates/js/translated/table_filters.js:342 +#: templates/js/translated/table_filters.js:335 msgid "Is allocated" msgstr "" -#: templates/js/translated/table_filters.js:343 +#: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" msgstr "" -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" msgstr "" -#: templates/js/translated/table_filters.js:353 +#: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" msgstr "" -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:372 +#: templates/js/translated/table_filters.js:365 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:378 +#: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:403 -#: templates/js/translated/table_filters.js:404 +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:407 +#: templates/js/translated/table_filters.js:400 msgid "Has batch code" msgstr "" -#: templates/js/translated/table_filters.js:416 +#: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" msgstr "" -#: templates/js/translated/table_filters.js:421 +#: templates/js/translated/table_filters.js:414 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:422 +#: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:426 +#: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" msgstr "" -#: templates/js/translated/table_filters.js:430 +#: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" msgstr "" -#: templates/js/translated/table_filters.js:443 +#: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:449 +#: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:463 +#: templates/js/translated/table_filters.js:456 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:467 +#: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:478 -msgid "Interval start" -msgstr "" - -#: templates/js/translated/table_filters.js:482 -msgid "Interval end" -msgstr "" - -#: templates/js/translated/table_filters.js:536 +#: templates/js/translated/table_filters.js:511 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:715 +#: templates/js/translated/table_filters.js:708 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:720 +#: templates/js/translated/table_filters.js:713 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:725 -msgid "Show locked parts" -msgstr "" - -#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:721 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:741 -#: templates/js/translated/table_filters.js:845 +#: templates/js/translated/table_filters.js:729 +#: templates/js/translated/table_filters.js:825 msgid "Has Units" msgstr "" -#: templates/js/translated/table_filters.js:742 +#: templates/js/translated/table_filters.js:730 msgid "Part has defined units" msgstr "" -#: templates/js/translated/table_filters.js:746 +#: templates/js/translated/table_filters.js:734 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:747 +#: templates/js/translated/table_filters.js:735 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:751 +#: templates/js/translated/table_filters.js:739 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:759 +#: templates/js/translated/table_filters.js:747 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:771 +#: templates/js/translated/table_filters.js:759 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/table_filters.js:841 +#: templates/js/translated/table_filters.js:821 msgid "Has Choices" msgstr "" @@ -14924,6 +13415,10 @@ msgstr "" msgid "Toggle" msgstr "" +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + #: templates/js/translated/tables.js:561 msgid "All" msgstr "" @@ -14944,7 +13439,7 @@ msgstr "" msgid "New Notifications" msgstr "" -#: templates/navbar.html:144 users/models.py:201 +#: templates/navbar.html:144 users/models.py:188 msgid "Admin" msgstr "" @@ -14960,22 +13455,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/pui_banner.html:9 -msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." -msgstr "" - -#: templates/pui_banner.html:12 -msgid "Platform UI - the new UI for InvenTree - is ready to be tested." -msgstr "" - -#: templates/pui_banner.html:15 -msgid "Try it out now" -msgstr "" - -#: templates/pui_banner.html:15 -msgid "here" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15048,13 +13527,11 @@ msgstr "" msgid "The selected SSO provider is invalid, or has not been correctly configured" msgstr "" -#: templates/socialaccount/signup.html:11 +#: templates/socialaccount/signup.html:10 #, python-format -msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" - -#: templates/socialaccount/signup.html:13 -msgid "As a final step, please complete the following form" +msgid "" +"You are about to use your %(provider_name)s account to login to\n" +"%(site_name)s.
    As a final step, please complete the following form:" msgstr "" #: templates/socialaccount/snippets/provider_list.html:26 @@ -15125,14 +13602,6 @@ msgstr "" msgid "Email settings not configured" msgstr "" -#: templates/test_statistics_table.html:13 -msgid "Passed" -msgstr "" - -#: templates/test_statistics_table.html:16 -msgid "Failed" -msgstr "" - #: templates/yesnolabel.html:4 msgid "Yes" msgstr "" @@ -15141,31 +13610,31 @@ msgstr "" msgid "No" msgstr "" -#: users/admin.py:104 +#: users/admin.py:103 msgid "Users" msgstr "" -#: users/admin.py:105 +#: users/admin.py:104 msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:249 +#: users/admin.py:248 msgid "The following users are members of multiple groups" msgstr "" -#: users/admin.py:283 +#: users/admin.py:282 msgid "Personal info" msgstr "" -#: users/admin.py:285 +#: users/admin.py:284 msgid "Permissions" msgstr "" -#: users/admin.py:288 +#: users/admin.py:287 msgid "Important dates" msgstr "" -#: users/authentication.py:29 users/models.py:138 +#: users/authentication.py:29 users/models.py:127 msgid "Token has been revoked" msgstr "" @@ -15173,67 +13642,66 @@ msgstr "" msgid "Token has expired" msgstr "" -#: users/models.py:81 +#: users/models.py:70 msgid "API Token" msgstr "" -#: users/models.py:82 +#: users/models.py:71 msgid "API Tokens" msgstr "" -#: users/models.py:118 +#: users/models.py:107 msgid "Token Name" msgstr "" -#: users/models.py:119 +#: users/models.py:108 msgid "Custom token name" msgstr "" -#: users/models.py:125 +#: users/models.py:114 msgid "Token expiry date" msgstr "" -#: users/models.py:133 +#: users/models.py:122 msgid "Last Seen" msgstr "" -#: users/models.py:134 +#: users/models.py:123 msgid "Last time the token was used" msgstr "" -#: users/models.py:138 +#: users/models.py:127 msgid "Revoked" msgstr "" -#: users/models.py:379 +#: users/models.py:372 msgid "Permission set" msgstr "" -#: users/models.py:388 +#: users/models.py:381 msgid "Group" msgstr "" -#: users/models.py:392 +#: users/models.py:385 msgid "View" msgstr "" -#: users/models.py:392 +#: users/models.py:385 msgid "Permission to view items" msgstr "" -#: users/models.py:396 +#: users/models.py:389 msgid "Permission to add items" msgstr "" -#: users/models.py:400 +#: users/models.py:393 msgid "Change" msgstr "" -#: users/models.py:402 +#: users/models.py:395 msgid "Permissions to edit items" msgstr "" -#: users/models.py:408 +#: users/models.py:401 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/machine/admin.py b/src/backend/InvenTree/machine/admin.py index 929f913a5e55..3437c7a38ab6 100755 --- a/src/backend/InvenTree/machine/admin.py +++ b/src/backend/InvenTree/machine/admin.py @@ -1,6 +1,7 @@ """Django admin interface for the machine app.""" from django.contrib import admin +from django.http.request import HttpRequest from machine import models diff --git a/src/backend/InvenTree/machine/apps.py b/src/backend/InvenTree/machine/apps.py index cfced400c346..3264ac6319c8 100755 --- a/src/backend/InvenTree/machine/apps.py +++ b/src/backend/InvenTree/machine/apps.py @@ -26,6 +26,7 @@ def ready(self) -> None: if ( not canAppAccessDatabase(allow_test=True) or not isPluginRegistryLoaded() + or not isInMainThread() or isRunningMigrations() or isImportingData() ): @@ -36,7 +37,7 @@ def ready(self) -> None: try: logger.info('Loading InvenTree machines') - registry.initialize(main=isInMainThread()) + registry.initialize() except (OperationalError, ProgrammingError): # Database might not yet be ready logger.warn('Database was not ready for initializing machines') diff --git a/src/backend/InvenTree/machine/machine_type.py b/src/backend/InvenTree/machine/machine_type.py index 9d9a456e81a3..35510e72096e 100644 --- a/src/backend/InvenTree/machine/machine_type.py +++ b/src/backend/InvenTree/machine/machine_type.py @@ -3,11 +3,7 @@ from typing import TYPE_CHECKING, Any, Literal, Union from generic.states import StatusCode -from InvenTree.helpers_mixin import ( - ClassProviderMixin, - ClassValidationMixin, - get_shared_class_instance_state_mixin, -) +from InvenTree.helpers_mixin import ClassProviderMixin, ClassValidationMixin # Import only for typechecking, otherwise this throws cyclic import errors if TYPE_CHECKING: @@ -48,11 +44,7 @@ class MachineStatus(StatusCode): """ -class BaseDriver( - ClassValidationMixin, - ClassProviderMixin, - get_shared_class_instance_state_mixin(lambda x: f'machine:driver:{x.SLUG}'), -): +class BaseDriver(ClassValidationMixin, ClassProviderMixin): """Base class for all machine drivers. Attributes: @@ -77,6 +69,8 @@ def __init__(self) -> None: """Base driver __init__ method.""" super().__init__() + self.errors: list[Union[str, Exception]] = [] + def init_driver(self): """This method gets called after all machines are created and can be used to initialize the driver. @@ -139,20 +133,10 @@ def handle_error(self, error: Union[Exception, str]): Arguments: error: Exception or string """ - self.set_shared_state('errors', self.errors + [error]) - - # --- state getters/setters - @property - def errors(self) -> list[Union[str, Exception]]: - """List of driver errors.""" - return self.get_shared_state('errors', []) + self.errors.append(error) -class BaseMachineType( - ClassValidationMixin, - ClassProviderMixin, - get_shared_class_instance_state_mixin(lambda x: f'machine:machine:{x.pk}'), -): +class BaseMachineType(ClassValidationMixin, ClassProviderMixin): """Base class for machine types. Attributes: @@ -194,6 +178,12 @@ def __init__(self, machine_config: MachineConfig) -> None: from machine import registry from machine.models import MachineSetting + self.errors: list[Union[str, Exception]] = [] + self.initialized = False + + self.status = self.default_machine_status + self.status_text: str = '' + self.pk = machine_config.pk self.driver = registry.get_driver_instance(machine_config.driver) @@ -218,6 +208,8 @@ def __init__(self, machine_config: MachineConfig) -> None: (self.driver_settings, MachineSetting.ConfigType.DRIVER), ] + self.restart_required = False + def __str__(self): """String representation of a machine.""" return f'{self.name}' @@ -280,32 +272,16 @@ def update(self, old_state: dict[str, Any]): try: self.driver.update_machine(old_state, self) - - # check if the active state has changed and initialize the machine if necessary - if old_state['active'] != self.active: - if self.initialized is False and self.active is True: - self.initialize() - elif self.initialized is True and self.active is False: - self.initialized = False except Exception as e: self.handle_error(e) def restart(self): - """Machine restart function, can be used to manually restart the machine from the admin ui. - - This will first reset the machines state (errors, status, status_text) and then call the drivers restart function. - """ + """Machine restart function, can be used to manually restart the machine from the admin ui.""" if self.driver is None: return try: - # reset the machine state self.restart_required = False - self.reset_errors() - self.set_status(self.default_machine_status) - self.set_status_text('') - - # call the driver restart function self.driver.restart_machine(self) except Exception as e: self.handle_error(e) @@ -317,11 +293,7 @@ def handle_error(self, error: Union[Exception, str]): Arguments: error: Exception or string """ - self.set_shared_state('errors', self.errors + [error]) - - def reset_errors(self): - """Helper function for resetting the error list for a machine.""" - self.set_shared_state('errors', []) + self.errors.append(error) def get_setting( self, key: str, config_type_str: Literal['M', 'D'], cache: bool = False @@ -392,7 +364,7 @@ def set_status(self, status: MachineStatus): Arguments: status: The new MachineStatus code to set """ - self.set_shared_state('status', status.value) + self.status = status def set_status_text(self, status_text: str): """Set the machine status text. It can be any arbitrary text. @@ -400,39 +372,4 @@ def set_status_text(self, status_text: str): Arguments: status_text: The new status text to set """ - self.set_shared_state('status_text', status_text) - - # --- state getters/setters - @property - def initialized(self) -> bool: - """Initialized state of the machine.""" - return self.get_shared_state('initialized', False) - - @initialized.setter - def initialized(self, value: bool): - self.set_shared_state('initialized', value) - - @property - def restart_required(self) -> bool: - """Restart required state of the machine.""" - return self.get_shared_state('restart_required', False) - - @restart_required.setter - def restart_required(self, value: bool): - self.set_shared_state('restart_required', value) - - @property - def errors(self) -> list[Union[str, Exception]]: - """List of machine errors.""" - return self.get_shared_state('errors', []) - - @property - def status(self) -> MachineStatus: - """Machine status code.""" - status_code = self.get_shared_state('status', self.default_machine_status.value) - return self.MACHINE_STATUS(status_code) - - @property - def status_text(self) -> str: - """Machine status text.""" - return self.get_shared_state('status_text', '') + self.status_text = status_text diff --git a/src/backend/InvenTree/machine/machine_types/label_printer.py b/src/backend/InvenTree/machine/machine_types/label_printer.py index 119da641afb2..bfbff04a4559 100644 --- a/src/backend/InvenTree/machine/machine_types/label_printer.py +++ b/src/backend/InvenTree/machine/machine_types/label_printer.py @@ -2,21 +2,18 @@ from typing import Union, cast -from django.contrib.auth.models import AnonymousUser -from django.db import models from django.db.models.query import QuerySet -from django.http import HttpRequest, HttpResponse, JsonResponse +from django.http import HttpResponse, JsonResponse from django.utils.translation import gettext_lazy as _ from PIL.Image import Image from rest_framework import serializers from rest_framework.request import Request -from generic.states import ColorEnum +from label.models import LabelTemplate from machine.machine_type import BaseDriver, BaseMachineType, MachineStatus from plugin import registry as plg_registry -from plugin.base.label.mixins import LabelPrintingMixin -from report.models import LabelTemplate +from plugin.base.label.mixins import LabelItemType, LabelPrintingMixin from stock.models import StockLocation @@ -35,7 +32,8 @@ def print_label( self, machine: 'LabelPrinterMachine', label: LabelTemplate, - item: models.Model, + item: LabelItemType, + request: Request, **kwargs, ) -> None: """Print a single label with the provided template and item. @@ -44,6 +42,7 @@ def print_label( machine: The LabelPrintingMachine instance that should be used for printing label: The LabelTemplate object to use for printing item: The database item to print (e.g. StockItem instance) + request: The HTTP request object which triggered this print job Keyword Arguments: printing_options (dict): The printing options set for this print job defined in the PrintingOptionsSerializer @@ -57,7 +56,8 @@ def print_labels( self, machine: 'LabelPrinterMachine', label: LabelTemplate, - items: QuerySet[models.Model], + items: QuerySet[LabelItemType], + request: Request, **kwargs, ) -> Union[None, JsonResponse]: """Print one or more labels with the provided template and items. @@ -66,6 +66,7 @@ def print_labels( machine: The LabelPrintingMachine instance that should be used for printing label: The LabelTemplate object to use for printing items: The list of database items to print (e.g. StockItem instances) + request: The HTTP request object which triggered this print job Keyword Arguments: printing_options (dict): The printing options set for this print job defined in the PrintingOptionsSerializer @@ -79,10 +80,10 @@ def print_labels( but this can be overridden by the particular driver. """ for item in items: - self.print_label(machine, label, item, **kwargs) + self.print_label(machine, label, item, request, **kwargs) def get_printers( - self, label: LabelTemplate, items: QuerySet, **kwargs + self, label: LabelTemplate, items: QuerySet[LabelItemType], **kwargs ) -> list['LabelPrinterMachine']: """Get all printers that would be available to print this job. @@ -121,50 +122,60 @@ def machine_plugin(self) -> LabelPrintingMixin: return cast(LabelPrintingMixin, plg) def render_to_pdf( - self, label: LabelTemplate, item: models.Model, **kwargs + self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs ) -> HttpResponse: """Helper method to render a label to PDF format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with + request: The HTTP request object which triggered this print job """ - request = self._get_dummy_request() - return self.machine_plugin.render_to_pdf(label, item, request, **kwargs) + label.object_to_print = item + response = self.machine_plugin.render_to_pdf(label, request, **kwargs) + label.object_to_print = None + return response def render_to_pdf_data( - self, label: LabelTemplate, item: models.Model, **kwargs + self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs ) -> bytes: """Helper method to render a label to PDF and return it as bytes for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with + request: The HTTP request object which triggered this print job """ return ( - self.render_to_pdf(label, item, **kwargs) + self.render_to_pdf(label, item, request, **kwargs) .get_document() # type: ignore .write_pdf() ) - def render_to_html(self, label: LabelTemplate, item: models.Model, **kwargs) -> str: + def render_to_html( + self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + ) -> str: """Helper method to render a label to HTML format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with + request: The HTTP request object which triggered this print job """ - request = self._get_dummy_request() - return self.machine_plugin.render_to_html(label, item, request, **kwargs) + label.object_to_print = item + html = self.machine_plugin.render_to_html(label, request, **kwargs) + label.object_to_print = None + return html def render_to_png( - self, label: LabelTemplate, item: models.Model, **kwargs - ) -> Union[Image, None]: + self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + ) -> Image: """Helper method to render a label to PNG format for a specific item. Arguments: label: The LabelTemplate object to render item: The item to render the label with + request: The HTTP request object which triggered this print job Keyword Arguments: pdf_data (bytes): The pdf document as bytes (optional) @@ -174,20 +185,10 @@ def render_to_png( pdf2image_kwargs (dict): Additional keyword arguments to pass to the [`pdf2image.convert_from_bytes`](https://pdf2image.readthedocs.io/en/latest/reference.html#pdf2image.pdf2image.convert_from_bytes) method (optional) """ - request = self._get_dummy_request() - return self.machine_plugin.render_to_png(label, item, request, **kwargs) - - def _get_dummy_request(self): - """Return a dummy request object to it work with legacy code. - - Note: this is a private method and can be removed at anytime - """ - r = HttpRequest() - r.META['SERVER_PORT'] = '80' - r.META['SERVER_NAME'] = 'localhost' - r.user = AnonymousUser() - - return r + label.object_to_print = item + png = self.machine_plugin.render_to_png(label, request, **kwargs) + label.object_to_print = None + return png required_overrides = [[print_label, print_labels]] @@ -229,12 +230,11 @@ class LabelPrinterStatus(MachineStatus): DISCONNECTED: The driver cannot establish a connection to the printer """ - CONNECTED = 100, _('Connected'), ColorEnum.success - UNKNOWN = 101, _('Unknown'), ColorEnum.secondary - PRINTING = 110, _('Printing'), ColorEnum.primary - NO_MEDIA = 301, _('No media'), ColorEnum.warning - PAPER_JAM = 302, _('Paper jam'), ColorEnum.warning - DISCONNECTED = 400, _('Disconnected'), ColorEnum.danger + CONNECTED = 100, _('Connected'), 'success' + UNKNOWN = 101, _('Unknown'), 'secondary' + PRINTING = 110, _('Printing'), 'primary' + NO_MEDIA = 301, _('No media'), 'warning' + DISCONNECTED = 400, _('Disconnected'), 'danger' class LabelPrinterMachine(BaseMachineType): diff --git a/src/backend/InvenTree/machine/registry.py b/src/backend/InvenTree/machine/registry.py index b9cdf1e0c935..c2d09a6e5b1c 100644 --- a/src/backend/InvenTree/machine/registry.py +++ b/src/backend/InvenTree/machine/registry.py @@ -1,20 +1,15 @@ """Machine registry.""" import logging -from typing import Union, cast +from typing import Union from uuid import UUID -from django.core.cache import cache - -from InvenTree.helpers_mixin import get_shared_class_instance_state_mixin from machine.machine_type import BaseDriver, BaseMachineType logger = logging.getLogger('inventree') -class MachineRegistry( - get_shared_class_instance_state_mixin(lambda _x: 'machine:registry') -): +class MachineRegistry: """Machine registry class.""" def __init__(self) -> None: @@ -28,27 +23,17 @@ def __init__(self) -> None: self.machines: dict[str, BaseMachineType] = {} self.base_drivers: list[type[BaseDriver]] = [] - - self._hash = None - - @property - def errors(self) -> list[Union[str, Exception]]: - """List of registry errors.""" - return cast(list[Union[str, Exception]], self.get_shared_state('errors', [])) + self.errors: list[Union[str, Exception]] = [] def handle_error(self, error: Union[Exception, str]): """Helper function for capturing errors with the machine registry.""" - self.set_shared_state('errors', self.errors + [error]) + self.errors.append(error) - def initialize(self, main: bool = False): + def initialize(self): """Initialize the machine registry.""" - # clear cache for machines (only needed for global redis cache) - if main and hasattr(cache, 'delete_pattern'): # pragma: no cover - cache.delete_pattern('machine:*') - self.discover_machine_types() self.discover_drivers() - self.load_machines(main=main) + self.load_machines() def discover_machine_types(self): """Discovers all machine types by inferring all classes that inherit the BaseMachineType class.""" @@ -128,39 +113,26 @@ def get_driver_instance(self, slug: str): return self.driver_instances.get(slug, None) - def load_machines(self, main: bool = False): + def load_machines(self): """Load all machines defined in the database into the machine registry.""" # Imports need to be in this level to prevent early db model imports from machine.models import MachineConfig for machine_config in MachineConfig.objects.all(): - self.add_machine( - machine_config, initialize=False, update_registry_hash=False - ) - - # initialize machines only in main thread - if main: - # initialize drivers - for driver in self.driver_instances.values(): - driver.init_driver() - - # initialize machines after all machine instances were created - for machine in self.machines.values(): - if machine.active: - machine.initialize() - - self._update_registry_hash() - logger.info('Initialized %s machines', len(self.machines.keys())) - else: - self._hash = None # reset hash to force reload hash - logger.info('Loaded %s machines', len(self.machines.keys())) - - def reload_machines(self): - """Reload all machines from the database.""" - self.machines = {} - self.load_machines() + self.add_machine(machine_config, initialize=False) - def add_machine(self, machine_config, initialize=True, update_registry_hash=True): + # initialize drivers + for driver in self.driver_instances.values(): + driver.init_driver() + + # initialize machines after all machine instances were created + for machine in self.machines.values(): + if machine.active: + machine.initialize() + + logger.info('Initialized %s machines', len(self.machines.keys())) + + def add_machine(self, machine_config, initialize=True): """Add a machine to the machine registry.""" machine_type = self.machine_types.get(machine_config.machine_type, None) if machine_type is None: @@ -173,19 +145,11 @@ def add_machine(self, machine_config, initialize=True, update_registry_hash=True if initialize and machine.active: machine.initialize() - if update_registry_hash: - self._update_registry_hash() - - def update_machine( - self, old_machine_state, machine_config, update_registry_hash=True - ): + def update_machine(self, old_machine_state, machine_config): """Notify the machine about an update.""" if machine := machine_config.machine: machine.update(old_machine_state) - if update_registry_hash: - self._update_registry_hash() - def restart_machine(self, machine): """Restart a machine.""" machine.restart() @@ -193,7 +157,6 @@ def restart_machine(self, machine): def remove_machine(self, machine: BaseMachineType): """Remove a machine from the registry.""" self.machines.pop(str(machine.pk), None) - self._update_registry_hash() def get_machines(self, **kwargs): """Get loaded machines from registry (By default only initialized machines). @@ -206,8 +169,6 @@ def get_machines(self, **kwargs): active: (bool) base_driver: base driver (class) """ - self._check_reload() - allowed_fields = [ 'name', 'machine_type', @@ -251,7 +212,6 @@ def filter_machine(machine: BaseMachineType): def get_machine(self, pk: Union[str, UUID]): """Get machine from registry by pk.""" - self._check_reload() return self.machines.get(str(pk), None) def get_drivers(self, machine_type: str): @@ -262,37 +222,5 @@ def get_drivers(self, machine_type: str): if driver.machine_type == machine_type ] - def _calculate_registry_hash(self): - """Calculate a hash of the machine registry state.""" - from hashlib import md5 - - data = md5() - - for pk, machine in self.machines.items(): - data.update(str(pk).encode()) - try: - data.update(str(machine.machine_config.active).encode()) - except: - # machine does not exist anymore, hash will be different - pass - - return str(data.hexdigest()) - - def _check_reload(self): - """Check if the registry needs to be reloaded, and reload it.""" - if not self._hash: - self._hash = self._calculate_registry_hash() - - last_hash = self.get_shared_state('hash', None) - - if last_hash and last_hash != self._hash: - logger.info('Machine registry has changed - reloading machines') - self.reload_machines() - - def _update_registry_hash(self): - """Save the current registry hash.""" - self._hash = self._calculate_registry_hash() - self.set_shared_state('hash', self._hash) - registry: MachineRegistry = MachineRegistry() diff --git a/src/backend/InvenTree/machine/test_api.py b/src/backend/InvenTree/machine/test_api.py index 1a2e40a51774..f67b48d005d4 100644 --- a/src/backend/InvenTree/machine/test_api.py +++ b/src/backend/InvenTree/machine/test_api.py @@ -80,18 +80,15 @@ def test_machine_type_list(self): machine_type = [t for t in response.data if t['slug'] == 'label-printer'] self.assertEqual(len(machine_type), 1) machine_type = machine_type[0] - self.assertEqual( - machine_type, + self.assertDictContainsSubset( { - **machine_type, - **{ - 'slug': 'label-printer', - 'name': 'Label Printer', - 'description': 'Directly print labels for various items.', - 'provider_plugin': None, - 'is_builtin': True, - }, + 'slug': 'label-printer', + 'name': 'Label Printer', + 'description': 'Directly print labels for various items.', + 'provider_plugin': None, + 'is_builtin': True, }, + machine_type, ) self.assertTrue( machine_type['provider_file'].endswith( @@ -105,20 +102,17 @@ def test_machine_driver_list(self): driver = [a for a in response.data if a['slug'] == 'test-label-printer-api'] self.assertEqual(len(driver), 1) driver = driver[0] - self.assertEqual( - driver, + self.assertDictContainsSubset( { - **driver, - **{ - 'slug': 'test-label-printer-api', - 'name': 'Test label printer', - 'description': 'This is a test label printer driver for testing.', - 'provider_plugin': None, - 'is_builtin': True, - 'machine_type': 'label-printer', - 'driver_errors': [], - }, + 'slug': 'test-label-printer-api', + 'name': 'Test label printer', + 'description': 'This is a test label printer driver for testing.', + 'provider_plugin': None, + 'is_builtin': True, + 'machine_type': 'label-printer', + 'driver_errors': [], }, + driver, ) self.assertEqual(driver['provider_file'], __file__) @@ -169,22 +163,19 @@ def test_machine_list(self): response = self.get(reverse('api-machine-list')) self.assertEqual(len(response.data), 1) - self.assertEqual( - response.data[0], + self.assertDictContainsSubset( { - **response.data[0], - **{ - 'name': 'Test Machine', - 'machine_type': 'label-printer', - 'driver': 'test-label-printer-api', - 'initialized': True, - 'active': True, - 'status': 101, - 'status_model': 'LabelPrinterStatus', - 'status_text': '', - 'is_driver_available': True, - }, + 'name': 'Test Machine', + 'machine_type': 'label-printer', + 'driver': 'test-label-printer-api', + 'initialized': True, + 'active': True, + 'status': 101, + 'status_model': 'LabelPrinterStatus', + 'status_text': '', + 'is_driver_available': True, }, + response.data[0], ) def test_machine_detail(self): @@ -204,21 +195,19 @@ def test_machine_detail(self): # Create a machine response = self.post(reverse('api-machine-list'), machine_data) - self.assertEqual(response.data, {**response.data, **machine_data}) + self.assertDictContainsSubset(machine_data, response.data) pk = response.data['pk'] # Retrieve the machine response = self.get(reverse('api-machine-detail', kwargs={'pk': pk})) - self.assertEqual(response.data, {**response.data, **machine_data}) + self.assertDictContainsSubset(machine_data, response.data) # Update the machine response = self.patch( reverse('api-machine-detail', kwargs={'pk': pk}), {'name': 'Updated Machine'}, ) - self.assertEqual( - response.data, {**response.data, **{'name': 'Updated Machine'}} - ) + self.assertDictContainsSubset({'name': 'Updated Machine'}, response.data) self.assertEqual(MachineConfig.objects.get(pk=pk).name, 'Updated Machine') # Delete the machine diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index 6075ee7118d7..ef37f5d5b376 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -10,6 +10,7 @@ from rest_framework import serializers from InvenTree.unit_test import InvenTreeAPITestCase +from label.models import PartLabel from machine.machine_type import BaseDriver, BaseMachineType, MachineStatus from machine.machine_types.label_printer import LabelPrinterBaseDriver from machine.models import MachineConfig @@ -17,7 +18,6 @@ from part.models import Part from plugin.models import PluginConfig from plugin.registry import registry as plg_registry -from report.models import LabelTemplate class TestMachineRegistryMixin(TestCase): @@ -32,7 +32,7 @@ def tearDown(self) -> None: registry.driver_instances = {} registry.machines = {} registry.base_drivers = [] - registry.set_shared_state('errors', []) + registry.errors = [] return super().tearDown() @@ -111,7 +111,7 @@ class TestingDriver(TestingMachineBaseDriver): self.machines = [self.machine1, self.machine2, self.machine3] # init registry - registry.initialize(main=True) + registry.initialize() # mock machine implementation self.machine_mocks = { @@ -230,7 +230,7 @@ def print_label(self, *args, **kwargs): active=True, ) - registry.initialize(main=True) + registry.initialize() driver_instance = cast( TestingLabelPrinterDriver, registry.get_driver_instance('testing-label-printer'), @@ -247,33 +247,31 @@ def test_print_label(self): plugin_ref = 'inventreelabelmachine' # setup the label app - apps.get_app_config('report').create_default_labels() # type: ignore + apps.get_app_config('label').create_defaults() # type: ignore plg_registry.reload_plugins() config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) # type: ignore config.active = True config.save() parts = Part.objects.all()[:2] - template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() + label = cast(PartLabel, PartLabel.objects.first()) - url = reverse('api-label-print') + url = reverse('api-part-label-print', kwargs={'pk': label.pk}) + url += f'/?plugin={plugin_ref}&part[]={parts[0].pk}&part[]={parts[1].pk}' self.post( url, { - 'plugin': config.key, - 'items': [a.pk for a in parts], - 'template': template.pk, 'machine': str(self.machine.pk), 'driver_options': {'copies': '1', 'test_option': '2'}, }, - expected_code=201, + expected_code=200, ) # test the print labels method call self.print_labels.assert_called_once() self.assertEqual(self.print_labels.call_args.args[0], self.machine.machine) - self.assertEqual(self.print_labels.call_args.args[1], template) + self.assertEqual(self.print_labels.call_args.args[1], label) # TODO re-activate test # self.assertQuerySetEqual( @@ -292,7 +290,7 @@ def test_print_label(self): # test the single print label method calls self.assertEqual(self.print_label.call_count, 2) self.assertEqual(self.print_label.call_args.args[0], self.machine.machine) - self.assertEqual(self.print_label.call_args.args[1], template) + self.assertEqual(self.print_label.call_args.args[1], label) self.assertEqual(self.print_label.call_args.args[2], parts[1]) self.assertIn('printing_options', self.print_labels.call_args.kwargs) self.assertEqual( diff --git a/src/backend/InvenTree/order/admin.py b/src/backend/InvenTree/order/admin.py index a26d7499a3b8..2345e8ca2abc 100644 --- a/src/backend/InvenTree/order/admin.py +++ b/src/backend/InvenTree/order/admin.py @@ -114,7 +114,7 @@ class PurchaseOrderAdmin(ImportExportModelAdmin): inlines = [PurchaseOrderLineItemInlineAdmin] - autocomplete_fields = ['supplier', 'project_code', 'contact', 'address'] + autocomplete_fields = ('supplier',) class SalesOrderResource( @@ -152,7 +152,7 @@ class SalesOrderAdmin(ImportExportModelAdmin): search_fields = ['reference', 'customer__name', 'description'] - autocomplete_fields = ['customer', 'project_code', 'contact', 'address'] + autocomplete_fields = ('customer',) class PurchaseOrderLineItemResource(PriceResourceMixin, InvenTreeResource): @@ -317,7 +317,7 @@ class ReturnOrderAdmin(ImportExportModelAdmin): search_fields = ['reference', 'customer__name', 'description'] - autocomplete_fields = ['customer', 'project_code', 'contact', 'address'] + autocomplete_fields = ['customer'] class ReturnOrderLineItemResource(PriceResourceMixin, InvenTreeResource): diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 7e08d72e7398..1d6692793e9f 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -3,7 +3,6 @@ from decimal import Decimal from typing import cast -from django.conf import settings from django.contrib.auth import authenticate, login from django.db import transaction from django.db.models import F, Q @@ -17,18 +16,21 @@ from rest_framework.exceptions import ValidationError from rest_framework.response import Response -import common.models -import common.settings -import company.models +import common.models as common_models +from common.settings import settings +from company.models import SupplierPart from generic.states.api import StatusView -from importer.mixins import DataExportViewMixin -from InvenTree.api import ListCreateDestroyAPIView, MetadataView +from InvenTree.api import ( + APIDownloadMixin, + AttachmentMixin, + ListCreateDestroyAPIView, + MetadataView, +) from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS -from InvenTree.helpers import str2bool +from InvenTree.helpers import DownloadFile, str2bool from InvenTree.helpers_model import construct_absolute_url, get_base_url from InvenTree.mixins import CreateAPI, ListAPI, ListCreateAPI, RetrieveUpdateDestroyAPI -from order import models, serializers -from order.status_codes import ( +from InvenTree.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, ReturnOrderLineStatus, @@ -36,11 +38,21 @@ SalesOrderStatus, SalesOrderStatusGroups, ) +from order import models, serializers +from order.admin import ( + PurchaseOrderExtraLineResource, + PurchaseOrderLineItemResource, + PurchaseOrderResource, + ReturnOrderResource, + SalesOrderExtraLineResource, + SalesOrderLineItemResource, + SalesOrderResource, +) from part.models import Part from users.models import Owner -class GeneralExtraLineList(DataExportViewMixin): +class GeneralExtraLineList(APIDownloadMixin): """General template for ExtraLine API classes.""" def get_serializer(self, *args, **kwargs): @@ -77,7 +89,7 @@ class OrderFilter(rest_filters.FilterSet): """Base class for custom API filters for the OrderList endpoint.""" # Filter against order status - status = rest_filters.NumberFilter(label=_('Order Status'), method='filter_status') + status = rest_filters.NumberFilter(label='Order Status', method='filter_status') def filter_status(self, queryset, name, value): """Filter by integer status code.""" @@ -85,11 +97,11 @@ def filter_status(self, queryset, name, value): # Exact match for reference reference = rest_filters.CharFilter( - label=_('Order Reference'), field_name='reference', lookup_expr='iexact' + label='Filter by exact reference', field_name='reference', lookup_expr='iexact' ) assigned_to_me = rest_filters.BooleanFilter( - label=_('Assigned to me'), method='filter_assigned_to_me' + label='assigned_to_me', method='filter_assigned_to_me' ) def filter_assigned_to_me(self, queryset, name, value): @@ -113,7 +125,7 @@ def filter_overdue(self, queryset, name, value): return queryset.exclude(self.Meta.model.overdue_filter()) outstanding = rest_filters.BooleanFilter( - label=_('Outstanding'), method='filter_outstanding' + label='outstanding', method='filter_outstanding' ) def filter_outstanding(self, queryset, name, value): @@ -123,13 +135,11 @@ def filter_outstanding(self, queryset, name, value): return queryset.exclude(status__in=self.Meta.model.get_status_class().OPEN) project_code = rest_filters.ModelChoiceFilter( - queryset=common.models.ProjectCode.objects.all(), - field_name='project_code', - label=_('Project Code'), + queryset=common_models.ProjectCode.objects.all(), field_name='project_code' ) has_project_code = rest_filters.BooleanFilter( - method='filter_has_project_code', label=_('Has Project Code') + label='has_project_code', method='filter_has_project_code' ) def filter_has_project_code(self, queryset, name, value): @@ -138,10 +148,6 @@ def filter_has_project_code(self, queryset, name, value): return queryset.exclude(project_code=None) return queryset.filter(project_code=None) - assigned_to = rest_filters.ModelChoiceFilter( - queryset=Owner.objects.all(), field_name='responsible', label=_('Responsible') - ) - class LineItemFilter(rest_filters.FilterSet): """Base class for custom API filters for order line item list(s).""" @@ -205,7 +211,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class PurchaseOrderList(PurchaseOrderMixin, DataExportViewMixin, ListCreateAPI): +class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of PurchaseOrder objects. - GET: Return list of PurchaseOrder objects (with filters) @@ -262,6 +268,16 @@ def create(self, request, *args, **kwargs): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) + def download_queryset(self, queryset, export_format): + """Download the filtered queryset as a file.""" + dataset = PurchaseOrderResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f'InvenTree_PurchaseOrders.{export_format}' + + return DownloadFile(filedata, filename) + def filter_queryset(self, queryset): """Custom queryset filtering.""" # Perform basic filtering @@ -286,13 +302,11 @@ def filter_queryset(self, queryset): if supplier_part is not None: try: - supplier_part = company.models.SupplierPart.objects.get( - pk=supplier_part - ) + supplier_part = SupplierPart.objects.get(pk=supplier_part) queryset = queryset.filter( id__in=[p.id for p in supplier_part.purchase_orders()] ) - except (ValueError, company.models.SupplierPart.DoesNotExist): + except (ValueError, SupplierPart.DoesNotExist): pass # Filter by 'date range' @@ -362,12 +376,6 @@ def get_serializer_context(self): return context -class PurchaseOrderHold(PurchaseOrderContextMixin, CreateAPI): - """API endpoint to place a PurchaseOrder on hold.""" - - serializer_class = serializers.PurchaseOrderHoldSerializer - - class PurchaseOrderCancel(PurchaseOrderContextMixin, CreateAPI): """API endpoint to 'cancel' a purchase order. @@ -437,9 +445,7 @@ def filter_order_complete(self, queryset, name, value): return queryset.exclude(order__status=PurchaseOrderStatus.COMPLETE.value) part = rest_filters.ModelChoiceFilter( - queryset=company.models.SupplierPart.objects.all(), - field_name='part', - label=_('Supplier Part'), + queryset=SupplierPart.objects.all(), field_name='part', label=_('Supplier Part') ) base_part = rest_filters.ModelChoiceFilter( @@ -519,7 +525,7 @@ def perform_update(self, serializer): class PurchaseOrderLineItemList( - PurchaseOrderLineItemMixin, DataExportViewMixin, ListCreateDestroyAPIView + PurchaseOrderLineItemMixin, APIDownloadMixin, ListCreateDestroyAPIView ): """API endpoint for accessing a list of PurchaseOrderLineItem objects. @@ -567,6 +573,16 @@ def create(self, request, *args, **kwargs): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) + def download_queryset(self, queryset, export_format): + """Download the requested queryset as a file.""" + dataset = PurchaseOrderLineItemResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f'InvenTree_PurchaseOrderItems.{export_format}' + + return DownloadFile(filedata, filename) + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { @@ -612,6 +628,14 @@ class PurchaseOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.PurchaseOrderExtraLine.objects.all() serializer_class = serializers.PurchaseOrderExtraLineSerializer + def download_queryset(self, queryset, export_format): + """Download this queryset as a file.""" + dataset = PurchaseOrderExtraLineResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f'InvenTree_ExtraPurchaseOrderLines.{export_format}' + + return DownloadFile(filedata, filename) + class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a PurchaseOrderExtraLine object.""" @@ -620,6 +644,22 @@ class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.PurchaseOrderExtraLineSerializer +class SalesOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a SalesOrderAttachment (file upload).""" + + queryset = models.SalesOrderAttachment.objects.all() + serializer_class = serializers.SalesOrderAttachmentSerializer + + filterset_fields = ['order'] + + +class SalesOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for SalesOrderAttachment.""" + + queryset = models.SalesOrderAttachment.objects.all() + serializer_class = serializers.SalesOrderAttachmentSerializer + + class SalesOrderFilter(OrderFilter): """Custom API filters for the SalesOrderList endpoint.""" @@ -661,7 +701,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class SalesOrderList(SalesOrderMixin, DataExportViewMixin, ListCreateAPI): +class SalesOrderList(SalesOrderMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of SalesOrder objects. - GET: Return list of SalesOrder objects (with filters) @@ -684,6 +724,16 @@ def create(self, request, *args, **kwargs): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) + def download_queryset(self, queryset, export_format): + """Download this queryset as a file.""" + dataset = SalesOrderResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f'InvenTree_SalesOrders.{export_format}' + + return DownloadFile(filedata, filename) + def filter_queryset(self, queryset): """Perform custom filtering operations on the SalesOrder queryset.""" queryset = super().filter_queryset(queryset) @@ -833,13 +883,20 @@ def get_queryset(self, *args, **kwargs): return queryset -class SalesOrderLineItemList( - SalesOrderLineItemMixin, DataExportViewMixin, ListCreateAPI -): +class SalesOrderLineItemList(SalesOrderLineItemMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of SalesOrderLineItem objects.""" filterset_class = SalesOrderLineItemFilter + def download_queryset(self, queryset, export_format): + """Download the requested queryset as a file.""" + dataset = SalesOrderLineItemResource().export(queryset=queryset) + filedata = dataset.export(export_format) + + filename = f'InvenTree_SalesOrderItems.{export_format}' + + return DownloadFile(filedata, filename) + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_fields = [ @@ -874,6 +931,14 @@ class SalesOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.SalesOrderExtraLine.objects.all() serializer_class = serializers.SalesOrderExtraLineSerializer + def download_queryset(self, queryset, export_format): + """Download this queryset as a file.""" + dataset = SalesOrderExtraLineResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f'InvenTree_ExtraSalesOrderLines.{export_format}' + + return DownloadFile(filedata, filename) + class SalesOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a SalesOrderExtraLine object.""" @@ -901,12 +966,6 @@ def get_serializer_context(self): return ctx -class SalesOrderHold(SalesOrderContextMixin, CreateAPI): - """API endpoint to place a SalesOrder on hold.""" - - serializer_class = serializers.SalesOrderHoldSerializer - - class SalesOrderCancel(SalesOrderContextMixin, CreateAPI): """API endpoint to cancel a SalesOrder.""" @@ -1056,9 +1115,7 @@ class SalesOrderShipmentList(ListCreateAPI): serializer_class = serializers.SalesOrderShipmentSerializer filterset_class = SalesOrderShipmentFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS - - ordering_fields = ['delivery_date', 'shipment_date'] + filter_backends = [rest_filters.DjangoFilterBackend] class SalesOrderShipmentDetail(RetrieveUpdateDestroyAPI): @@ -1089,6 +1146,22 @@ def get_serializer_context(self): return ctx +class PurchaseOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting) a PurchaseOrderAttachment (file upload).""" + + queryset = models.PurchaseOrderAttachment.objects.all() + serializer_class = serializers.PurchaseOrderAttachmentSerializer + + filterset_fields = ['order'] + + +class PurchaseOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for a PurchaseOrderAttachment.""" + + queryset = models.PurchaseOrderAttachment.objects.all() + serializer_class = serializers.PurchaseOrderAttachmentSerializer + + class ReturnOrderFilter(OrderFilter): """Custom API filters for the ReturnOrderList endpoint.""" @@ -1130,7 +1203,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class ReturnOrderList(ReturnOrderMixin, DataExportViewMixin, ListCreateAPI): +class ReturnOrderList(ReturnOrderMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of ReturnOrder objects.""" filterset_class = ReturnOrderFilter @@ -1149,6 +1222,14 @@ def create(self, request, *args, **kwargs): serializer.data, status=status.HTTP_201_CREATED, headers=headers ) + def download_queryset(self, queryset, export_format): + """Download this queryset as a file.""" + dataset = ReturnOrderResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f'InvenTree_ReturnOrders.{export_format}' + + return DownloadFile(filedata, filename) + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { @@ -1212,12 +1293,6 @@ class ReturnOrderCancel(ReturnOrderContextMixin, CreateAPI): serializer_class = serializers.ReturnOrderCancelSerializer -class ReturnOrderHold(ReturnOrderContextMixin, CreateAPI): - """API endpoint to hold a ReturnOrder.""" - - serializer_class = serializers.ReturnOrderHoldSerializer - - class ReturnOrderComplete(ReturnOrderContextMixin, CreateAPI): """API endpoint to complete a ReturnOrder.""" @@ -1289,12 +1364,18 @@ def get_queryset(self, *args, **kwargs): class ReturnOrderLineItemList( - ReturnOrderLineItemMixin, DataExportViewMixin, ListCreateAPI + ReturnOrderLineItemMixin, APIDownloadMixin, ListCreateAPI ): """API endpoint for accessing a list of ReturnOrderLineItemList objects.""" filterset_class = ReturnOrderLineItemFilter + def download_queryset(self, queryset, export_format): + """Download the requested queryset as a file.""" + raise NotImplementedError( + 'download_queryset not yet implemented for this endpoint' + ) + filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['reference', 'target_date', 'received_date'] @@ -1319,6 +1400,10 @@ class ReturnOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.ReturnOrderExtraLine.objects.all() serializer_class = serializers.ReturnOrderExtraLineSerializer + def download_queryset(self, queryset, export_format): + """Download this queryset as a file.""" + raise NotImplementedError('download_queryset not yet implemented') + class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a ReturnOrderExtraLine object.""" @@ -1327,6 +1412,22 @@ class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.ReturnOrderExtraLineSerializer +class ReturnOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a ReturnOrderAttachment (file upload).""" + + queryset = models.ReturnOrderAttachment.objects.all() + serializer_class = serializers.ReturnOrderAttachmentSerializer + + filterset_fields = ['order'] + + +class ReturnOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for the ReturnOrderAttachment model.""" + + queryset = models.ReturnOrderAttachment.objects.all() + serializer_class = serializers.ReturnOrderAttachmentSerializer + + class OrderCalendarExport(ICalFeed): """Calendar export for Purchase/Sales Orders. @@ -1409,9 +1510,7 @@ def title(self, obj): else: ordertype_title = _('Unknown') - company_name = common.settings.get_global_setting('INVENTREE_COMPANY_NAME') - - return f'{company_name} {ordertype_title}' + return f'{common_models.InvenTreeSetting.get_setting("INVENTREE_COMPANY_NAME")} {ordertype_title}' def product_id(self, obj): """Return calendar product id.""" @@ -1494,6 +1593,22 @@ def item_link(self, item): path( 'po/', include([ + # Purchase order attachments + path( + 'attachment/', + include([ + path( + '/', + PurchaseOrderAttachmentDetail.as_view(), + name='api-po-attachment-detail', + ), + path( + '', + PurchaseOrderAttachmentList.as_view(), + name='api-po-attachment-list', + ), + ]), + ), # Individual purchase order detail URLs path( '/', @@ -1501,7 +1616,6 @@ def item_link(self, item): path( 'cancel/', PurchaseOrderCancel.as_view(), name='api-po-cancel' ), - path('hold/', PurchaseOrderHold.as_view(), name='api-po-hold'), path( 'complete/', PurchaseOrderComplete.as_view(), @@ -1586,6 +1700,21 @@ def item_link(self, item): path( 'so/', include([ + path( + 'attachment/', + include([ + path( + '/', + SalesOrderAttachmentDetail.as_view(), + name='api-so-attachment-detail', + ), + path( + '', + SalesOrderAttachmentList.as_view(), + name='api-so-attachment-list', + ), + ]), + ), path( 'shipment/', include([ @@ -1631,7 +1760,6 @@ def item_link(self, item): SalesOrderAllocateSerials.as_view(), name='api-so-allocate-serials', ), - path('hold/', SalesOrderHold.as_view(), name='api-so-hold'), path('cancel/', SalesOrderCancel.as_view(), name='api-so-cancel'), path('issue/', SalesOrderIssue.as_view(), name='api-so-issue'), path( @@ -1722,6 +1850,21 @@ def item_link(self, item): path( 'ro/', include([ + path( + 'attachment/', + include([ + path( + '/', + ReturnOrderAttachmentDetail.as_view(), + name='api-return-order-attachment-detail', + ), + path( + '', + ReturnOrderAttachmentList.as_view(), + name='api-return-order-attachment-list', + ), + ]), + ), # Return Order detail endpoints path( '/', @@ -1731,7 +1874,6 @@ def item_link(self, item): ReturnOrderCancel.as_view(), name='api-return-order-cancel', ), - path('hold/', ReturnOrderHold.as_view(), name='api-ro-hold'), path( 'complete/', ReturnOrderComplete.as_view(), diff --git a/src/backend/InvenTree/order/migrations/0001_initial.py b/src/backend/InvenTree/order/migrations/0001_initial.py index 498aad298332..642b321d4747 100644 --- a/src/backend/InvenTree/order/migrations/0001_initial.py +++ b/src/backend/InvenTree/order/migrations/0001_initial.py @@ -30,7 +30,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Purchase Order' }, ), migrations.CreateModel( @@ -44,7 +43,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Purchase Order Line Item' }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py b/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py index 750642f6f9d2..25b43e222d17 100644 --- a/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py +++ b/src/backend/InvenTree/order/migrations/0016_purchaseorderattachment.py @@ -16,7 +16,7 @@ class Migration(migrations.Migration): name='PurchaseOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), + ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), ('comment', models.CharField(help_text='File comment', max_length=100)), ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.PurchaseOrder')), ], diff --git a/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py b/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py index 083c300df3cb..aef57a343774 100644 --- a/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py +++ b/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py @@ -35,7 +35,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Sales Order', }, ), migrations.AlterField( @@ -59,14 +58,13 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Sales Order Line Item', }, ), migrations.CreateModel( name='SalesOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), + ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), ('comment', models.CharField(help_text='File comment', max_length=100)), ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.SalesOrder')), ], diff --git a/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py b/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py index d3a4623b202b..ca8ed182d998 100644 --- a/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py +++ b/src/backend/InvenTree/order/migrations/0024_salesorderallocation.py @@ -22,8 +22,5 @@ class Migration(migrations.Migration): ('item', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='sales_order_allocation', to='stock.StockItem')), ('line', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='order.SalesOrderLineItem')), ], - options={ - 'verbose_name': 'Sales Order Allocation', - }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py b/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py index 3cba8ed07c96..cf9cd1e0e26f 100644 --- a/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py +++ b/src/backend/InvenTree/order/migrations/0028_auto_20200423_0956.py @@ -5,8 +5,6 @@ from django.db import migrations, models import django.db.models.deletion -from order.status_codes import PurchaseOrderStatus - class Migration(migrations.Migration): @@ -19,12 +17,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorder', name='status', - field=models.PositiveIntegerField( - choices=PurchaseOrderStatus.items(), - default=PurchaseOrderStatus.PENDING.value, - help_text='Purchase order status', - verbose_name='Status', - ), + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Placed'), (30, 'Complete'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status'), ), migrations.AlterField( model_name='salesorder', diff --git a/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py b/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py index efd157f5b648..121bdbe64f02 100644 --- a/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py +++ b/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py @@ -2,7 +2,6 @@ from django.db import migrations import djmoney.models.fields -import common.currency import common.settings @@ -17,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='purchaseorderlineitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), ), migrations.AddField( model_name='purchaseorderlineitem', name='purchase_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py b/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py index 0035f9a949ab..52b51b6ca949 100644 --- a/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py +++ b/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py @@ -2,7 +2,6 @@ from django.db import migrations import djmoney.models.fields -import common.currency import common.settings @@ -16,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderlineitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py b/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py index d97c9accc1f7..ef69235545eb 100644 --- a/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py +++ b/src/backend/InvenTree/order/migrations/0044_auto_20210404_2016.py @@ -67,7 +67,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), migrations.AlterField( model_name='purchaseorderattachment', @@ -187,7 +187,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='salesorderattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), migrations.AlterField( model_name='salesorderattachment', diff --git a/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py b/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py index 4faadf2715d2..c1e5f23df2e1 100644 --- a/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py +++ b/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py @@ -1,7 +1,6 @@ # Generated by Django 3.2 on 2021-05-04 19:46 from django.db import migrations -import common.currency import common.settings import djmoney.models.fields @@ -16,11 +15,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='salesorderlineitem', name='sale_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit sale price', max_digits=19, null=True, verbose_name='Sale Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit sale price', max_digits=19, null=True, verbose_name='Sale Price'), ), migrations.AddField( model_name='salesorderlineitem', name='sale_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py b/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py index a4e0ec30a03b..bbe029b4af0a 100644 --- a/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py +++ b/src/backend/InvenTree/order/migrations/0053_auto_20211128_0151.py @@ -25,11 +25,11 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), migrations.AlterField( model_name='salesorderattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0053_salesordershipment.py b/src/backend/InvenTree/order/migrations/0053_salesordershipment.py index 440b9fbeefaa..85ab90f46ad9 100644 --- a/src/backend/InvenTree/order/migrations/0053_salesordershipment.py +++ b/src/backend/InvenTree/order/migrations/0053_salesordershipment.py @@ -23,8 +23,5 @@ class Migration(migrations.Migration): ('checked_by', models.ForeignKey(blank=True, help_text='User who checked this shipment', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Checked By')), ('order', models.ForeignKey(help_text='Sales Order', on_delete=django.db.models.deletion.CASCADE, related_name='shipments', to='order.salesorder', verbose_name='Order')), ], - options={ - 'verbose_name': 'Sales Order Shipment', - }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py b/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py index 69ef6e6addca..0efab70da8cf 100644 --- a/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py +++ b/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py @@ -3,7 +3,7 @@ from django.db import migrations -from order.status_codes import SalesOrderStatus +from InvenTree.status_codes import SalesOrderStatus def add_shipment(apps, schema_editor): diff --git a/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py b/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py index 6c31d93099d2..1377a9a0b9b6 100644 --- a/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py +++ b/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py @@ -2,7 +2,7 @@ from django.db import migrations -from order.status_codes import SalesOrderStatus +from InvenTree.status_codes import SalesOrderStatus def calculate_shipped_quantity(apps, schema_editor): diff --git a/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py b/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py index 86784edf939d..1c3d2ff7435e 100644 --- a/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py +++ b/src/backend/InvenTree/order/migrations/0064_purchaseorderextraline_salesorderextraline.py @@ -86,7 +86,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Sales Order Extra Line', }, ), migrations.CreateModel( @@ -104,7 +103,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Purchase Order Extra Line', }, ), migrations.RunPython(convert_line_items, reverse_code=nunconvert_line_items), diff --git a/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py b/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py index ffc27b6b8e4a..0d1dd8041c36 100644 --- a/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py +++ b/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py @@ -8,7 +8,7 @@ from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money -from common.currency import currency_code_default +from common.settings import currency_code_default logger = logging.getLogger('inventree') diff --git a/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py b/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py index ed815aa5a95a..719a7a503759 100644 --- a/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py +++ b/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py @@ -39,7 +39,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Return Order', }, ), migrations.AlterField( @@ -51,7 +50,7 @@ class Migration(migrations.Migration): name='ReturnOrderAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), diff --git a/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py b/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py index dd6bf6976746..ba1d8c2812db 100644 --- a/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py +++ b/src/backend/InvenTree/order/migrations/0083_returnorderextraline.py @@ -30,7 +30,6 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, - 'verbose_name': 'Return Order Extra Line', }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py b/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py index 49290b4349ef..aa96291e33a8 100644 --- a/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py +++ b/src/backend/InvenTree/order/migrations/0084_auto_20230321_1111.py @@ -2,8 +2,6 @@ from django.db import migrations, models -from order.status_codes import ReturnOrderStatus - class Migration(migrations.Migration): @@ -25,11 +23,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='returnorder', name='status', - field=models.PositiveIntegerField( - choices=ReturnOrderStatus.items(), - default=ReturnOrderStatus.PENDING.value, - help_text='Return order status', verbose_name='Status' - ), + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'In Progress'), (30, 'Complete'), (40, 'Cancelled')], default=10, help_text='Return order status', verbose_name='Status'), ), migrations.AlterField( model_name='salesorder', diff --git a/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py b/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py index ea3ad7223dde..9a5f4a652fa2 100644 --- a/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py +++ b/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py @@ -44,7 +44,6 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('order', 'item')}, - 'verbose_name': 'Return Order Line Item', }, ), ] diff --git a/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py b/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py index dd6c0326bf33..eaf402991792 100644 --- a/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py +++ b/src/backend/InvenTree/order/migrations/0087_alter_salesorder_status.py @@ -2,8 +2,6 @@ from django.db import migrations, models -from order.status_codes import SalesOrderStatus - class Migration(migrations.Migration): @@ -15,10 +13,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='salesorder', name='status', - field=models.PositiveIntegerField( - choices=SalesOrderStatus.items(), - default=SalesOrderStatus.PENDING.value, - help_text='Sales order status', verbose_name='Status' - ), + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (15, 'In Progress'), (20, 'Shipped'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status', verbose_name='Status'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py b/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py index 9c80796a6f8a..ac958308074c 100644 --- a/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py +++ b/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.19 on 2023-06-04 17:43 from django.db import migrations, models -import order.status_codes +import InvenTree.status_codes class Migration(migrations.Migration): @@ -14,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='returnorderlineitem', name='outcome', - field=models.PositiveIntegerField(choices=order.status_codes.ReturnOrderLineStatus.items(), default=10, help_text='Outcome for this line item', verbose_name='Outcome'), + field=models.PositiveIntegerField(choices=InvenTree.status_codes.ReturnOrderLineStatus.items(), default=10, help_text='Outcome for this line item', verbose_name='Outcome'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py b/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py deleted file mode 100644 index bc5d52f44d45..000000000000 --- a/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-03 00:40 - -import django.core.validators -from django.db import migrations, models -import order.status_codes - - -class Migration(migrations.Migration): - - dependencies = [ - ('order', '0098_auto_20231024_1844'), - ] - - operations = [ - migrations.AlterField( - model_name='salesorder', - name='status', - field=models.PositiveIntegerField( - choices=order.status_codes.SalesOrderStatus.items(), - default=order.status_codes.SalesOrderStatus.PENDING.value, - help_text='Sales order status', verbose_name='Status' - ), - ), - ] diff --git a/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py b/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py deleted file mode 100644 index 01e5679ebd98..000000000000 --- a/src/backend/InvenTree/order/migrations/0100_remove_returnorderattachment_order_and_more.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-09 09:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('build', '0050_auto_20240508_0138'), - ('common', '0026_auto_20240608_1238'), - ('company', '0069_company_active'), - ('order', '0099_alter_salesorder_status'), - ('part', '0123_parttesttemplate_choices'), - ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') - ] - - operations = [ - migrations.DeleteModel( - name='PurchaseOrderAttachment', - ), - migrations.DeleteModel( - name='ReturnOrderAttachment', - ), - migrations.DeleteModel( - name='SalesOrderAttachment', - ), - ] diff --git a/src/backend/InvenTree/order/migrations/0101_purchaseorder_status_custom_key_and_more.py b/src/backend/InvenTree/order/migrations/0101_purchaseorder_status_custom_key_and_more.py deleted file mode 100644 index 26993943b5e8..000000000000 --- a/src/backend/InvenTree/order/migrations/0101_purchaseorder_status_custom_key_and_more.py +++ /dev/null @@ -1,100 +0,0 @@ -# Generated by Django 4.2.14 on 2024-08-07 22:40 - -from django.db import migrations - -import generic.states.fields -import InvenTree.status_codes - - -class Migration(migrations.Migration): - - dependencies = [ - ("order", "0100_remove_returnorderattachment_order_and_more"), - ] - - operations = [ - migrations.AddField( - model_name="purchaseorder", - name="status_custom_key", - field=generic.states.fields.ExtraInvenTreeCustomStatusModelField( - blank=True, - default=None, - help_text="Additional status information for this item", - null=True, - verbose_name="Custom status key", - ), - ), - migrations.AddField( - model_name="returnorder", - name="status_custom_key", - field=generic.states.fields.ExtraInvenTreeCustomStatusModelField( - blank=True, - default=None, - help_text="Additional status information for this item", - null=True, - verbose_name="Custom status key", - ), - ), - migrations.AddField( - model_name="returnorderlineitem", - name="outcome_custom_key", - field=generic.states.fields.ExtraInvenTreeCustomStatusModelField( - blank=True, - default=None, - help_text="Additional status information for this item", - null=True, - verbose_name="Custom status key", - ), - ), - migrations.AddField( - model_name="salesorder", - name="status_custom_key", - field=generic.states.fields.ExtraInvenTreeCustomStatusModelField( - blank=True, - default=None, - help_text="Additional status information for this item", - null=True, - verbose_name="Custom status key", - ), - ), - migrations.AlterField( - model_name="purchaseorder", - name="status", - field=generic.states.fields.InvenTreeCustomStatusModelField( - choices=InvenTree.status_codes.PurchaseOrderStatus.items(), - default=10, - help_text="Purchase order status", - verbose_name="Status", - ), - ), - migrations.AlterField( - model_name="returnorder", - name="status", - field=generic.states.fields.InvenTreeCustomStatusModelField( - choices=InvenTree.status_codes.ReturnOrderStatus.items(), - default=10, - help_text="Return order status", - verbose_name="Status", - ), - ), - migrations.AlterField( - model_name="returnorderlineitem", - name="outcome", - field=generic.states.fields.InvenTreeCustomStatusModelField( - choices=InvenTree.status_codes.ReturnOrderLineStatus.items(), - default=10, - help_text="Outcome for this line item", - verbose_name="Outcome", - ), - ), - migrations.AlterField( - model_name="salesorder", - name="status", - field=generic.states.fields.InvenTreeCustomStatusModelField( - choices=InvenTree.status_codes.SalesOrderStatus.items(), - default=10, - help_text="Sales order status", - verbose_name="Status", - ), - ), - ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 88b3325da690..94710c01a9a7 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -1,6 +1,7 @@ """Order model definitions.""" import logging +import os import sys from datetime import datetime from decimal import Decimal @@ -29,15 +30,12 @@ import InvenTree.tasks import InvenTree.validators import order.validators -import report.mixins import stock.models import users.models as UserModels -from common.currency import currency_code_default from common.notifications import InvenTreeNotificationBodies -from common.settings import get_global_setting +from common.settings import currency_code_default from company.models import Address, Company, Contact, SupplierPart from generic.states import StateTransitionMixin -from generic.states.fields import InvenTreeCustomStatusModelField from InvenTree.exceptions import log_error from InvenTree.fields import ( InvenTreeModelMoneyField, @@ -45,8 +43,8 @@ RoundingDecimalField, ) from InvenTree.helpers import decimal2string, pui_url -from InvenTree.helpers_model import notify_responsible -from order.status_codes import ( +from InvenTree.helpers_model import getSetting, notify_responsible +from InvenTree.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, ReturnOrderLineStatus, @@ -54,10 +52,11 @@ ReturnOrderStatusGroups, SalesOrderStatus, SalesOrderStatusGroups, + StockHistoryCode, + StockStatus, ) from part import models as PartModels from plugin.events import trigger_event -from stock.status_codes import StockHistoryCode, StockStatus logger = logging.getLogger('inventree') @@ -184,10 +183,8 @@ def calculate_total_price(self, target_currency=None): class Order( StateTransitionMixin, - InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, - report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.ReferenceIndexingMixin, InvenTree.models.InvenTreeModel, @@ -234,7 +231,9 @@ def clean(self): # Check if a responsible owner is required for this order type if self.REQUIRE_RESPONSIBLE_SETTING: - if get_global_setting(self.REQUIRE_RESPONSIBLE_SETTING, backup_value=False): + if common_models.InvenTreeSetting.get_setting( + self.REQUIRE_RESPONSIBLE_SETTING, backup_value=False + ): if not self.responsible: raise ValidationError({ 'responsible': _('Responsible user or group must be specified') @@ -247,17 +246,6 @@ def clean(self): 'contact': _('Contact does not match selected company') }) - def report_context(self): - """Generate context data for the reporting interface.""" - return { - 'description': self.description, - 'extra_lines': self.extra_lines, - 'lines': self.lines, - 'order': self, - 'reference': self.reference, - 'title': str(self), - } - @classmethod def overdue_filter(cls): """A generic implementation of an 'overdue' filter for the Model class. @@ -374,15 +362,6 @@ class PurchaseOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'PURCHASEORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'PURCHASEORDER_REQUIRE_RESPONSIBLE' - class Meta: - """Model meta options.""" - - verbose_name = _('Purchase Order') - - def report_context(self): - """Return report context data for this PurchaseOrder.""" - return {**super().report_context(), 'supplier': self.supplier} - def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: @@ -400,7 +379,7 @@ def get_status_class(cls): return PurchaseOrderStatusGroups @classmethod - def api_defaults(cls, request=None): + def api_defaults(cls, request): """Return default values for this model when issuing an API OPTIONS request.""" defaults = { 'reference': order.validators.generate_next_purchase_order_reference() @@ -408,11 +387,6 @@ def api_defaults(cls, request=None): return defaults - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'PO' - @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by 'minimum and maximum date range'. @@ -471,10 +445,9 @@ def __str__(self): validators=[order.validators.validate_purchase_order_reference], ) - status = InvenTreeCustomStatusModelField( + status = models.PositiveIntegerField( default=PurchaseOrderStatus.PENDING.value, choices=PurchaseOrderStatus.items(), - verbose_name=_('Status'), help_text=_('Purchase order status'), ) @@ -609,7 +582,7 @@ def _action_place(self, *args, **kwargs): Order must be currently PENDING. """ - if self.can_issue: + if self.is_pending: self.status = PurchaseOrderStatus.PLACED.value self.issue_date = InvenTree.helpers.current_date() self.save() @@ -642,19 +615,6 @@ def _action_complete(self, *args, **kwargs): trigger_event('purchaseorder.completed', id=self.pk) - @transaction.atomic - def issue_order(self): - """Equivalent to 'place_order'.""" - self.place_order() - - @property - def can_issue(self): - """Return True if this order can be issued.""" - return self.status in [ - PurchaseOrderStatus.PENDING.value, - PurchaseOrderStatus.ON_HOLD.value, - ] - @transaction.atomic def place_order(self): """Attempt to transition to PLACED status.""" @@ -669,13 +629,6 @@ def complete_order(self): self.status, PurchaseOrderStatus.COMPLETE.value, self, self._action_complete ) - @transaction.atomic - def hold_order(self): - """Attempt to transition to ON_HOLD status.""" - return self.handle_transition( - self.status, PurchaseOrderStatus.ON_HOLD.value, self, self._action_hold - ) - @transaction.atomic def cancel_order(self): """Attempt to transition to CANCELLED status.""" @@ -698,9 +651,12 @@ def can_cancel(self): """A PurchaseOrder can only be cancelled under the following circumstances. - Status is PLACED - - Status is PENDING (or ON_HOLD) + - Status is PENDING """ - return self.status in PurchaseOrderStatusGroups.OPEN + return self.status in [ + PurchaseOrderStatus.PLACED.value, + PurchaseOrderStatus.PENDING.value, + ] def _action_cancel(self, *args, **kwargs): """Marks the PurchaseOrder as CANCELLED.""" @@ -718,22 +674,6 @@ def _action_cancel(self, *args, **kwargs): content=InvenTreeNotificationBodies.OrderCanceled, ) - @property - def can_hold(self): - """Return True if this order can be placed on hold.""" - return self.status in [ - PurchaseOrderStatus.PENDING.value, - PurchaseOrderStatus.PLACED.value, - ] - - def _action_hold(self, *args, **kwargs): - """Mark this purchase order as 'on hold'.""" - if self.can_hold: - self.status = PurchaseOrderStatus.ON_HOLD.value - self.save() - - trigger_event('purchaseorder.hold', id=self.pk) - # endregion def pending_line_items(self): @@ -781,14 +721,6 @@ def receive_line_item( # Extract optional notes field notes = kwargs.get('notes', '') - # Extract optional packaging field - packaging = kwargs.get('packaging', None) - - if not packaging: - # Default to the packaging field for the linked supplier part - if line.part: - packaging = line.part.packaging - # Extract optional barcode field barcode = kwargs.get('barcode', None) @@ -838,7 +770,6 @@ def receive_line_item( purchase_order=self, status=status, batch=batch_code, - packaging=packaging, serial=sn, purchase_price=unit_purchase_price, ) @@ -868,7 +799,9 @@ def receive_line_item( # Has this order been completed? if len(self.pending_line_items()) == 0: - if get_global_setting('PURCHASEORDER_AUTO_COMPLETE', True): + if common_models.InvenTreeSetting.get_setting( + 'PURCHASEORDER_AUTO_COMPLETE', True + ): self.received_by = user self.complete_order() # This will save the model @@ -887,15 +820,6 @@ class SalesOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'SALESORDER_REQUIRE_RESPONSIBLE' - class Meta: - """Model meta options.""" - - verbose_name = _('Sales Order') - - def report_context(self): - """Generate report context data for this SalesOrder.""" - return {**super().report_context(), 'customer': self.customer} - def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: @@ -913,17 +837,12 @@ def get_status_class(cls): return SalesOrderStatusGroups @classmethod - def api_defaults(cls, request=None): + def api_defaults(cls, request): """Return default values for this model when issuing an API OPTIONS request.""" defaults = {'reference': order.validators.generate_next_sales_order_reference()} return defaults - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'SO' - @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by "minimum and maximum date range". @@ -997,11 +916,11 @@ def company(self): """Accessor helper for Order base.""" return self.customer - status = InvenTreeCustomStatusModelField( + status = models.PositiveIntegerField( default=SalesOrderStatus.PENDING.value, choices=SalesOrderStatus.items(), verbose_name=_('Status'), - help_text=_('Sales order status'), + help_text=_('Purchase order status'), ) @property @@ -1074,22 +993,22 @@ def can_complete(self, raise_error=False, allow_incomplete_lines=False): Throws a ValidationError if cannot be completed. """ try: - if self.status == SalesOrderStatus.COMPLETE.value: - raise ValidationError(_('Order is already complete')) - - if self.status == SalesOrderStatus.CANCELLED.value: - raise ValidationError(_('Order is already cancelled')) + # Order without line items cannot be completed + if self.lines.count() == 0: + raise ValidationError( + _('Order cannot be completed as no parts have been assigned') + ) # Only an open order can be marked as shipped - if self.is_open and not self.is_completed: + elif not self.is_open: raise ValidationError(_('Only an open order can be marked as complete')) - if self.pending_shipment_count > 0: + elif self.pending_shipment_count > 0: raise ValidationError( _('Order cannot be completed as there are incomplete shipments') ) - if not allow_incomplete_lines and self.pending_line_count > 0: + elif not allow_incomplete_lines and self.pending_line_count > 0: raise ValidationError( _('Order cannot be completed as there are incomplete line items') ) @@ -1107,39 +1026,15 @@ def place_order(self): """Deprecated version of 'issue_order'.""" self.issue_order() - @property - def can_issue(self): - """Return True if this order can be issued.""" - return self.status in [ - SalesOrderStatus.PENDING.value, - SalesOrderStatus.ON_HOLD.value, - ] - def _action_place(self, *args, **kwargs): """Change this order from 'PENDING' to 'IN_PROGRESS'.""" - if self.can_issue: + if self.status == SalesOrderStatus.PENDING: self.status = SalesOrderStatus.IN_PROGRESS.value self.issue_date = InvenTree.helpers.current_date() self.save() trigger_event('salesorder.issued', id=self.pk) - @property - def can_hold(self): - """Return True if this order can be placed on hold.""" - return self.status in [ - SalesOrderStatus.PENDING.value, - SalesOrderStatus.IN_PROGRESS.value, - ] - - def _action_hold(self, *args, **kwargs): - """Mark this sales order as 'on hold'.""" - if self.can_hold: - self.status = SalesOrderStatus.ON_HOLD.value - self.save() - - trigger_event('salesorder.onhold', id=self.pk) - def _action_complete(self, *args, **kwargs): """Mark this order as "complete.""" user = kwargs.pop('user', None) @@ -1147,23 +1042,15 @@ def _action_complete(self, *args, **kwargs): if not self.can_complete(**kwargs): return False - bypass_shipped = InvenTree.helpers.str2bool( - get_global_setting('SALESORDER_SHIP_COMPLETE') - ) - - if bypass_shipped or self.status == SalesOrderStatus.SHIPPED: - self.status = SalesOrderStatus.COMPLETE.value - else: - self.status = SalesOrderStatus.SHIPPED.value - self.shipped_by = user - self.shipment_date = InvenTree.helpers.current_date() + self.status = SalesOrderStatus.SHIPPED.value + self.shipped_by = user + self.shipment_date = InvenTree.helpers.current_date() self.save() # Schedule pricing update for any referenced parts for line in self.lines.all(): - if line.part: - line.part.schedule_pricing_update(create=True) + line.part.schedule_pricing_update(create=True) trigger_event('salesorder.completed', id=self.pk) @@ -1211,7 +1098,7 @@ def issue_order(self): ) @transaction.atomic - def ship_order(self, user, **kwargs): + def complete_order(self, user, **kwargs): """Attempt to transition to SHIPPED status.""" return self.handle_transition( self.status, @@ -1222,25 +1109,6 @@ def ship_order(self, user, **kwargs): **kwargs, ) - @transaction.atomic - def complete_order(self, user, **kwargs): - """Attempt to transition to COMPLETED status.""" - return self.handle_transition( - self.status, - SalesOrderStatus.COMPLETED.value, - self, - self._action_complete, - user=user, - **kwargs, - ) - - @transaction.atomic - def hold_order(self): - """Attempt to transition to ON_HOLD status.""" - return self.handle_transition( - self.status, SalesOrderStatus.ON_HOLD.value, self, self._action_hold - ) - @transaction.atomic def cancel_order(self): """Attempt to transition to CANCELLED status.""" @@ -1314,7 +1182,7 @@ def after_save_sales_order(sender, instance: SalesOrder, created: bool, **kwargs if created: # A new SalesOrder has just been created - if get_global_setting('SALESORDER_DEFAULT_SHIPMENT'): + if getSetting('SALESORDER_DEFAULT_SHIPMENT'): # Create default shipment SalesOrderShipment.objects.create(order=instance, reference='1') @@ -1322,6 +1190,40 @@ def after_save_sales_order(sender, instance: SalesOrder, created: bool, **kwargs notify_responsible(instance, sender, exclude=instance.created_by) +class PurchaseOrderAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a PurchaseOrder object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the PurchaseOrderAttachment model.""" + return reverse('api-po-attachment-list') + + def getSubdir(self): + """Return the directory path where PurchaseOrderAttachment files are located.""" + return os.path.join('po_files', str(self.order.id)) + + order = models.ForeignKey( + PurchaseOrder, on_delete=models.CASCADE, related_name='attachments' + ) + + +class SalesOrderAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a SalesOrder object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the SalesOrderAttachment class.""" + return reverse('api-so-attachment-list') + + def getSubdir(self): + """Return the directory path where SalesOrderAttachment files are located.""" + return os.path.join('so_files', str(self.order.id)) + + order = models.ForeignKey( + SalesOrder, on_delete=models.CASCADE, related_name='attachments' + ) + + class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): """Abstract model for an order line item. @@ -1440,11 +1342,6 @@ class PurchaseOrderLineItem(OrderLineItem): order: Reference to a PurchaseOrder object """ - class Meta: - """Model meta options.""" - - verbose_name = _('Purchase Order Line Item') - # Filter for determining if a particular PurchaseOrderLineItem is overdue OVERDUE_FILTER = ( Q(received__lt=F('quantity')) @@ -1582,11 +1479,6 @@ class PurchaseOrderExtraLine(OrderExtraLine): price: The unit price for this OrderLine """ - class Meta: - """Model meta options.""" - - verbose_name = _('Purchase Order Extra Line') - @staticmethod def get_api_url(): """Return the API URL associated with the PurchaseOrderExtraLine model.""" @@ -1611,11 +1503,6 @@ class SalesOrderLineItem(OrderLineItem): shipped: The number of items which have actually shipped against this line item """ - class Meta: - """Model meta options.""" - - verbose_name = _('Sales Order Line Item') - # Filter for determining if a particular SalesOrderLineItem is overdue OVERDUE_FILTER = ( Q(shipped__lt=F('quantity')) @@ -1749,7 +1636,6 @@ class Meta: # Shipment reference must be unique for a given sales order unique_together = ['order', 'reference'] - verbose_name = _('Sales Order Shipment') @staticmethod def get_api_url(): @@ -1907,11 +1793,6 @@ class SalesOrderExtraLine(OrderExtraLine): price: The unit price for this OrderLine """ - class Meta: - """Model meta options.""" - - verbose_name = _('Sales Order Extra Line') - @staticmethod def get_api_url(): """Return the API URL associated with the SalesOrderExtraLine model.""" @@ -1936,11 +1817,6 @@ class SalesOrderAllocation(models.Model): quantity: Quantity to take from the StockItem """ - class Meta: - """Model meta options.""" - - verbose_name = _('Sales Order Allocation') - @staticmethod def get_api_url(): """Return the API URL associated with the SalesOrderAllocation model.""" @@ -2086,15 +1962,6 @@ class ReturnOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'RETURNORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'RETURNORDER_REQUIRE_RESPONSIBLE' - class Meta: - """Model meta options.""" - - verbose_name = _('Return Order') - - def report_context(self): - """Generate report context data for this ReturnOrder.""" - return {**super().report_context(), 'customer': self.customer} - def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: @@ -2112,7 +1979,7 @@ def get_status_class(cls): return ReturnOrderStatusGroups @classmethod - def api_defaults(cls, request=None): + def api_defaults(cls, request): """Return default values for this model when issuing an API OPTIONS request.""" defaults = { 'reference': order.validators.generate_next_return_order_reference() @@ -2120,11 +1987,6 @@ def api_defaults(cls, request=None): return defaults - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'RO' - def __str__(self): """Render a string representation of this ReturnOrder.""" return f"{self.reference} - {self.customer.name if self.customer else _('no customer')}" @@ -2154,7 +2016,7 @@ def company(self): """Accessor helper for Order base class.""" return self.customer - status = InvenTreeCustomStatusModelField( + status = models.PositiveIntegerField( default=ReturnOrderStatus.PENDING.value, choices=ReturnOrderStatus.items(), verbose_name=_('Status'), @@ -2198,30 +2060,9 @@ def is_received(self): """Return True if this order is fully received.""" return not self.lines.filter(received_date=None).exists() - @property - def can_hold(self): - """Return True if this order can be placed on hold.""" - return self.status in [ - ReturnOrderStatus.PENDING.value, - ReturnOrderStatus.IN_PROGRESS.value, - ] - - def _action_hold(self, *args, **kwargs): - """Mark this order as 'on hold' (if allowed).""" - if self.can_hold: - self.status = ReturnOrderStatus.ON_HOLD.value - self.save() - - trigger_event('returnorder.hold', id=self.pk) - - @property - def can_cancel(self): - """Return True if this order can be cancelled.""" - return self.status in ReturnOrderStatusGroups.OPEN - def _action_cancel(self, *args, **kwargs): """Cancel this ReturnOrder (if not already cancelled).""" - if self.can_cancel: + if self.status != ReturnOrderStatus.CANCELLED: self.status = ReturnOrderStatus.CANCELLED.value self.save() @@ -2237,7 +2078,7 @@ def _action_cancel(self, *args, **kwargs): def _action_complete(self, *args, **kwargs): """Complete this ReturnOrder (if not already completed).""" - if self.status == ReturnOrderStatus.IN_PROGRESS.value: + if self.status == ReturnOrderStatus.IN_PROGRESS: self.status = ReturnOrderStatus.COMPLETE.value self.complete_date = InvenTree.helpers.current_date() self.save() @@ -2248,30 +2089,15 @@ def place_order(self): """Deprecated version of 'issue_order.""" self.issue_order() - @property - def can_issue(self): - """Return True if this order can be issued.""" - return self.status in [ - ReturnOrderStatus.PENDING.value, - ReturnOrderStatus.ON_HOLD.value, - ] - def _action_place(self, *args, **kwargs): """Issue this ReturnOrder (if currently pending).""" - if self.can_issue: + if self.status == ReturnOrderStatus.PENDING: self.status = ReturnOrderStatus.IN_PROGRESS.value self.issue_date = InvenTree.helpers.current_date() self.save() trigger_event('returnorder.issued', id=self.pk) - @transaction.atomic - def hold_order(self): - """Attempt to tranasition to ON_HOLD status.""" - return self.handle_transition( - self.status, ReturnOrderStatus.ON_HOLD.value, self, self._action_hold - ) - @transaction.atomic def issue_order(self): """Attempt to transition to IN_PROGRESS status.""" @@ -2360,7 +2186,6 @@ class ReturnOrderLineItem(OrderLineItem): class Meta: """Metaclass options for this model.""" - verbose_name = _('Return Order Line Item') unique_together = [('order', 'item')] @staticmethod @@ -2405,7 +2230,7 @@ def received(self): """Return True if this item has been received.""" return self.received_date is not None - outcome = InvenTreeCustomStatusModelField( + outcome = models.PositiveIntegerField( default=ReturnOrderLineStatus.PENDING.value, choices=ReturnOrderLineStatus.items(), verbose_name=_('Outcome'), @@ -2423,11 +2248,6 @@ def received(self): class ReturnOrderExtraLine(OrderExtraLine): """Model for a single ExtraLine in a ReturnOrder.""" - class Meta: - """Metaclass options for this model.""" - - verbose_name = _('Return Order Extra Line') - @staticmethod def get_api_url(): """Return the API URL associated with the ReturnOrderExtraLine model.""" @@ -2440,3 +2260,20 @@ def get_api_url(): verbose_name=_('Order'), help_text=_('Return Order'), ) + + +class ReturnOrderAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a ReturnOrder object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrderAttachment class.""" + return reverse('api-return-order-attachment-list') + + def getSubdir(self): + """Return the directory path where ReturnOrderAttachment files are located.""" + return os.path.join('return_files', str(self.order.id)) + + order = models.ForeignKey( + ReturnOrder, on_delete=models.CASCADE, related_name='attachments' + ) diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index d0d07c14d83d..42f6a3c69e75 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -1,5 +1,6 @@ """JSON serializers for the Order API.""" +from datetime import datetime from decimal import Decimal from django.core.exceptions import ValidationError as DjangoValidationError @@ -21,6 +22,7 @@ from sql_util.utils import SubqueryCount import order.models +import part.filters import part.filters as part_filters import part.models as part_models import stock.models @@ -32,9 +34,6 @@ ContactSerializer, SupplierPartSerializer, ) -from generic.states.fields import InvenTreeCustomStatusSerializerMixin -from importer.mixins import DataImportExportSerializerMixin -from importer.registry import register_importer from InvenTree.helpers import ( current_date, extract_serial_numbers, @@ -43,20 +42,20 @@ str2bool, ) from InvenTree.serializers import ( + InvenTreeAttachmentSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, InvenTreeMoneySerializer, - NotesFieldMixin, ) -from order.status_codes import ( +from InvenTree.status_codes import ( PurchaseOrderStatusGroups, ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatusGroups, + StockStatus, ) from part.serializers import PartBriefSerializer -from stock.status_codes import StockStatus from users.serializers import OwnerSerializer @@ -74,24 +73,20 @@ class TotalPriceMixin(serializers.Serializer): ) -class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Serializer): +class AbstractOrderSerializer(serializers.Serializer): """Abstract serializer class which provides fields common to all order types.""" - export_exclude_fields = ['notes'] - # Number of line items in this order - line_items = serializers.IntegerField(read_only=True, label=_('Line Items')) + line_items = serializers.IntegerField(read_only=True) # Number of completed line items (this is an annotated field) - completed_lines = serializers.IntegerField( - read_only=True, label=_('Completed Lines') - ) + completed_lines = serializers.IntegerField(read_only=True) # Human-readable status text (read-only) status_text = serializers.CharField(source='get_status_display', read_only=True) # status field cannot be set directly - status = serializers.IntegerField(read_only=True, label=_('Order Status')) + status = serializers.IntegerField(read_only=True) # Reference string is *required* reference = serializers.CharField(required=True) @@ -104,10 +99,6 @@ class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Seria source='responsible', read_only=True, many=False ) - project_code_label = serializers.CharField( - source='project_code.code', read_only=True, label='Project Code Label' - ) - # Detail for project code field project_code_detail = ProjectCodeSerializer( source='project_code', read_only=True, many=False @@ -123,9 +114,7 @@ class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Seria barcode_hash = serializers.CharField(read_only=True) - creation_date = serializers.DateField( - required=False, allow_null=True, label=_('Creation Date') - ) + creation_date = serializers.DateField(required=False, allow_null=True) def validate_reference(self, reference): """Custom validation for the reference field.""" @@ -151,7 +140,6 @@ def order_fields(extra_fields): 'completed_lines', 'link', 'project_code', - 'project_code_label', 'project_code_detail', 'reference', 'responsible', @@ -162,24 +150,13 @@ def order_fields(extra_fields): 'address_detail', 'status', 'status_text', - 'status_custom_key', 'notes', 'barcode_hash', 'overdue', ] + extra_fields -class AbstractLineItemSerializer: - """Abstract serializer for LineItem object.""" - - target_date = serializers.DateField( - required=False, allow_null=True, label=_('Target Date') - ) - - -class AbstractExtraLineSerializer( - DataImportExportSerializerMixin, serializers.Serializer -): +class AbstractExtraLineSerializer(serializers.Serializer): """Abstract Serializer for a ExtraLine object.""" def __init__(self, *args, **kwargs): @@ -189,7 +166,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if order_detail is not True: - self.fields.pop('order_detail', None) + self.fields.pop('order_detail') quantity = serializers.FloatField() @@ -216,13 +193,8 @@ class AbstractExtraLineMeta: ] -@register_importer() class PurchaseOrderSerializer( - NotesFieldMixin, - TotalPriceMixin, - InvenTreeCustomStatusSerializerMixin, - AbstractOrderSerializer, - InvenTreeModelSerializer, + TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): """Serializer for a PurchaseOrder object.""" @@ -237,7 +209,6 @@ class Meta: 'supplier', 'supplier_detail', 'supplier_reference', - 'supplier_name', 'total_price', 'order_currency', ]) @@ -256,7 +227,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if supplier_detail is not True: - self.fields.pop('supplier_detail', None) + self.fields.pop('supplier_detail') @staticmethod def annotate_queryset(queryset): @@ -285,61 +256,42 @@ def annotate_queryset(queryset): return queryset - supplier_name = serializers.CharField( - source='supplier.name', read_only=True, label=_('Supplier Name') - ) - supplier_detail = CompanyBriefSerializer( source='supplier', many=False, read_only=True ) -class OrderAdjustSerializer(serializers.Serializer): - """Generic serializer class for adjusting the status of an order.""" +class PurchaseOrderCancelSerializer(serializers.Serializer): + """Serializer for cancelling a PurchaseOrder.""" class Meta: - """Metaclass options. - - By default, there are no fields required for this serializer type. - """ - - fields = [] - - @property - def order(self): - """Return the order object associated with this serializer. - - Note: It is passed in via the serializer context data. - """ - return self.context['order'] - + """Metaclass options.""" -class PurchaseOrderHoldSerializer(OrderAdjustSerializer): - """Serializer for placing a PurchaseOrder on hold.""" - - def save(self): - """Save the serializer to 'hold' the order.""" - self.order.hold_order() + fields = ([],) + def get_context_data(self): + """Return custom context information about the order.""" + self.order = self.context['order'] -class PurchaseOrderCancelSerializer(OrderAdjustSerializer): - """Serializer for cancelling a PurchaseOrder.""" + return {'can_cancel': self.order.can_cancel} def save(self): """Save the serializer to 'cancel' the order.""" - if not self.order.can_cancel: + order = self.context['order'] + + if not order.can_cancel: raise ValidationError(_('Order cannot be cancelled')) - self.order.cancel_order() + order.cancel_order() -class PurchaseOrderCompleteSerializer(OrderAdjustSerializer): +class PurchaseOrderCompleteSerializer(serializers.Serializer): """Serializer for completing a purchase order.""" class Meta: """Metaclass options.""" - fields = ['accept_incomplete'] + fields = [] accept_incomplete = serializers.BooleanField( label=_('Accept Incomplete'), @@ -365,23 +317,25 @@ def get_context_data(self): def save(self): """Save the serializer to 'complete' the order.""" - self.order.complete_order() + order = self.context['order'] + order.complete_order() -class PurchaseOrderIssueSerializer(OrderAdjustSerializer): +class PurchaseOrderIssueSerializer(serializers.Serializer): """Serializer for issuing (sending) a purchase order.""" + class Meta: + """Metaclass options.""" + + fields = [] + def save(self): """Save the serializer to 'place' the order.""" - self.order.place_order() + order = self.context['order'] + order.place_order() -@register_importer() -class PurchaseOrderLineItemSerializer( - DataImportExportSerializerMixin, - AbstractLineItemSerializer, - InvenTreeModelSerializer, -): +class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): """Serializer class for the PurchaseOrderLineItem model.""" class Meta: @@ -391,13 +345,13 @@ class Meta: fields = [ 'pk', - 'part', 'quantity', 'reference', 'notes', 'order', 'order_detail', 'overdue', + 'part', 'part_detail', 'supplier_part_detail', 'received', @@ -410,26 +364,22 @@ class Meta: 'total_price', 'link', 'merge_items', - 'sku', - 'mpn', - 'ipn', - 'internal_part', - 'internal_part_name', ] def __init__(self, *args, **kwargs): """Initialization routine for the serializer.""" part_detail = kwargs.pop('part_detail', False) + order_detail = kwargs.pop('order_detail', False) super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail', None) - self.fields.pop('supplier_part_detail', None) + self.fields.pop('part_detail') + self.fields.pop('supplier_part_detail') if order_detail is not True: - self.fields.pop('order_detail', None) + self.fields.pop('order_detail') def skip_create_fields(self): """Return a list of fields to skip when creating a new object.""" @@ -453,18 +403,6 @@ def annotate_queryset(queryset): ) ) - queryset = queryset.prefetch_related( - 'order', - 'order__responsible', - 'order__stock_items', - 'part__tags', - 'part__supplier', - 'part__manufacturer_part', - 'part__manufacturer_part__manufacturer', - 'part__part__pricing_data', - 'part__part__tags', - ) - queryset = queryset.annotate( total_price=ExpressionWrapper( F('purchase_price') * F('quantity'), output_field=models.DecimalField() @@ -483,14 +421,6 @@ def annotate_queryset(queryset): return queryset - part = serializers.PrimaryKeyRelatedField( - queryset=part_models.SupplierPart.objects.all(), - many=False, - required=True, - allow_null=True, - label=_('Supplier Part'), - ) - quantity = serializers.FloatField(min_value=0, required=True) def validate_quantity(self, quantity): @@ -518,7 +448,7 @@ def validate_purchase_order(self, purchase_order): ) supplier_part_detail = SupplierPartSerializer( - source='part', brief=True, many=False, read_only=True + source='part', many=False, read_only=True ) purchase_price = InvenTreeMoneySerializer(allow_null=True) @@ -547,25 +477,6 @@ def validate_purchase_order(self, purchase_order): 'Merge items with the same part, destination and target date into one line item' ), default=True, - write_only=True, - ) - - sku = serializers.CharField(source='part.SKU', read_only=True, label=_('SKU')) - - mpn = serializers.CharField( - source='part.manufacturer_part.MPN', read_only=True, label=_('MPN') - ) - - ipn = serializers.CharField( - source='part.part.IPN', read_only=True, label=_('Internal Part Number') - ) - - internal_part = serializers.PrimaryKeyRelatedField( - source='part.part', read_only=True, many=False, label=_('Internal Part') - ) - - internal_part_name = serializers.CharField( - source='part.part.name', read_only=True, label=_('Internal Part Name') ) def validate(self, data): @@ -599,7 +510,6 @@ def validate(self, data): return data -@register_importer() class PurchaseOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -625,10 +535,7 @@ class Meta: 'location', 'quantity', 'status', - 'batch_code', - 'serial_numbers', - 'packaging', - 'note', + 'batch_code' 'serial_numbers', ] line_item = serializers.PrimaryKeyRelatedField( @@ -656,7 +563,7 @@ def validate_line_item(self, item): ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=Decimal(0), required=True + max_digits=15, decimal_places=5, min_value=0, required=True ) def validate_quantity(self, quantity): @@ -686,22 +593,6 @@ def validate_quantity(self, quantity): choices=StockStatus.items(), default=StockStatus.OK.value, label=_('Status') ) - packaging = serializers.CharField( - label=_('Packaging'), - help_text=_('Override packaging information for incoming stock items'), - required=False, - default='', - allow_blank=True, - ) - - note = serializers.CharField( - label=_('Note'), - help_text=_('Additional note for incoming stock items'), - required=False, - default='', - allow_blank=True, - ) - barcode = serializers.CharField( label=_('Barcode'), help_text=_('Scanned barcode'), @@ -854,22 +745,26 @@ def save(self): status=item['status'], barcode=item.get('barcode', ''), batch_code=item.get('batch_code', ''), - packaging=item.get('packaging', ''), serials=item.get('serials', None), - notes=item.get('note', None), ) except (ValidationError, DjangoValidationError) as exc: # Catch model errors and re-throw as DRF errors raise ValidationError(detail=serializers.as_serializer_error(exc)) -@register_importer() +class PurchaseOrderAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializers for the PurchaseOrderAttachment model.""" + + class Meta: + """Metaclass options.""" + + model = order.models.PurchaseOrderAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) + + class SalesOrderSerializer( - NotesFieldMixin, - TotalPriceMixin, - InvenTreeCustomStatusSerializerMixin, - AbstractOrderSerializer, - InvenTreeModelSerializer, + TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): """Serializer for the SalesOrder model class.""" @@ -898,7 +793,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if customer_detail is not True: - self.fields.pop('customer_detail', None) + self.fields.pop('customer_detail') @staticmethod def annotate_queryset(queryset): @@ -931,12 +826,18 @@ def annotate_queryset(queryset): ) -class SalesOrderIssueSerializer(OrderAdjustSerializer): +class SalesOrderIssueSerializer(serializers.Serializer): """Serializer for issuing a SalesOrder.""" + class Meta: + """Metaclass options.""" + + fields = [] + def save(self): """Save the serializer to 'issue' the order.""" - self.order.issue_order() + order = self.context['order'] + order.issue_order() class SalesOrderAllocationSerializer(InvenTreeModelSerializer): @@ -979,19 +880,19 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not order_detail: - self.fields.pop('order_detail', None) + self.fields.pop('order_detail') if not part_detail: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if not item_detail: - self.fields.pop('item_detail', None) + self.fields.pop('item_detail') if not location_detail: - self.fields.pop('location_detail', None) + self.fields.pop('location_detail') if not customer_detail: - self.fields.pop('customer_detail', None) + self.fields.pop('customer_detail') part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) order = serializers.PrimaryKeyRelatedField( @@ -1021,12 +922,7 @@ def __init__(self, *args, **kwargs): ) -@register_importer() -class SalesOrderLineItemSerializer( - DataImportExportSerializerMixin, - AbstractLineItemSerializer, - InvenTreeModelSerializer, -): +class SalesOrderLineItemSerializer(InvenTreeModelSerializer): """Serializer for a SalesOrderLineItem object.""" class Meta: @@ -1038,6 +934,8 @@ class Meta: 'pk', 'allocated', 'allocations', + 'available_stock', + 'available_variant_stock', 'customer_detail', 'quantity', 'reference', @@ -1052,11 +950,6 @@ class Meta: 'shipped', 'target_date', 'link', - # Annotated fields for part stocking information - 'available_stock', - 'available_variant_stock', - 'building', - 'on_order', ] def __init__(self, *args, **kwargs): @@ -1072,16 +965,16 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if part_detail is not True: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if order_detail is not True: - self.fields.pop('order_detail', None) + self.fields.pop('order_detail') if allocations is not True: - self.fields.pop('allocations', None) + self.fields.pop('allocations') if customer_detail is not True: - self.fields.pop('customer_detail', None) + self.fields.pop('customer_detail') @staticmethod def annotate_queryset(queryset): @@ -1089,8 +982,6 @@ def annotate_queryset(queryset): - "overdue" status (boolean field) - "available_quantity" - - "building" - - "on_order" """ queryset = queryset.annotate( overdue=Case( @@ -1106,11 +997,11 @@ def annotate_queryset(queryset): # Annotate each line with the available stock quantity # To do this, we need to look at the total stock and any allocations queryset = queryset.alias( - total_stock=part_filters.annotate_total_stock(reference='part__'), - allocated_to_sales_orders=part_filters.annotate_sales_order_allocations( + total_stock=part.filters.annotate_total_stock(reference='part__'), + allocated_to_sales_orders=part.filters.annotate_sales_order_allocations( reference='part__' ), - allocated_to_build_orders=part_filters.annotate_build_order_allocations( + allocated_to_build_orders=part.filters.annotate_build_order_allocations( reference='part__' ), ) @@ -1125,19 +1016,19 @@ def annotate_queryset(queryset): ) # Filter for "variant" stock: Variant stock items must be salable and active - variant_stock_query = part_filters.variant_stock_query( + variant_stock_query = part.filters.variant_stock_query( reference='part__' ).filter(part__salable=True, part__active=True) # Also add in available "variant" stock queryset = queryset.alias( - variant_stock_total=part_filters.annotate_variant_quantity( + variant_stock_total=part.filters.annotate_variant_quantity( variant_stock_query, reference='quantity' ), - variant_bo_allocations=part_filters.annotate_variant_quantity( + variant_bo_allocations=part.filters.annotate_variant_quantity( variant_stock_query, reference='sales_order_allocations__quantity' ), - variant_so_allocations=part_filters.annotate_variant_quantity( + variant_so_allocations=part.filters.annotate_variant_quantity( variant_stock_query, reference='allocations__quantity' ), ) @@ -1151,16 +1042,6 @@ def annotate_queryset(queryset): ) ) - # Add information about the quantity of parts currently on order - queryset = queryset.annotate( - on_order=part_filters.annotate_on_order_quantity(reference='part__') - ) - - # Add information about the quantity of parts currently in production - queryset = queryset.annotate( - building=part_filters.annotate_in_production_quantity(reference='part__') - ) - return queryset customer_detail = CompanyBriefSerializer( @@ -1176,8 +1057,6 @@ def annotate_queryset(queryset): overdue = serializers.BooleanField(required=False, read_only=True) available_stock = serializers.FloatField(read_only=True) available_variant_stock = serializers.FloatField(read_only=True) - on_order = serializers.FloatField(label=_('On Order'), read_only=True) - building = serializers.FloatField(label=_('In Production'), read_only=True) quantity = InvenTreeDecimalField() @@ -1192,8 +1071,7 @@ def annotate_queryset(queryset): ) -@register_importer() -class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer): +class SalesOrderShipmentSerializer(InvenTreeModelSerializer): """Serializer for the SalesOrderShipment class.""" class Meta: @@ -1323,7 +1201,7 @@ def validate_line_item(self, line_item): ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=Decimal(0), required=True + max_digits=15, decimal_places=5, min_value=0, required=True ) def validate_quantity(self, quantity): @@ -1357,14 +1235,9 @@ def validate(self, data): return data -class SalesOrderCompleteSerializer(OrderAdjustSerializer): +class SalesOrderCompleteSerializer(serializers.Serializer): """DRF serializer for manually marking a sales order as complete.""" - class Meta: - """Serializer metaclass options.""" - - fields = ['accept_incomplete'] - accept_incomplete = serializers.BooleanField( label=_('Accept Incomplete'), help_text=_('Allow order to be closed with incomplete line items'), @@ -1393,7 +1266,10 @@ def get_context_data(self): def validate(self, data): """Custom validation for the serializer.""" data = super().validate(data) - self.order.can_complete( + + order = self.context['order'] + + order.can_complete( raise_error=True, allow_incomplete_lines=str2bool(data.get('accept_incomplete', False)), ) @@ -1403,24 +1279,17 @@ def validate(self, data): def save(self): """Save the serializer to complete the SalesOrder.""" request = self.context['request'] + order = self.context['order'] data = self.validated_data user = getattr(request, 'user', None) - self.order.ship_order( + order.complete_order( user, allow_incomplete_lines=str2bool(data.get('accept_incomplete', False)) ) -class SalesOrderHoldSerializer(OrderAdjustSerializer): - """Serializer for placing a SalesOrder on hold.""" - - def save(self): - """Save the serializer to place the SalesOrder on hold.""" - self.order.hold_order() - - -class SalesOrderCancelSerializer(OrderAdjustSerializer): +class SalesOrderCancelSerializer(serializers.Serializer): """Serializer for marking a SalesOrder as cancelled.""" def get_context_data(self): @@ -1431,7 +1300,9 @@ def get_context_data(self): def save(self): """Save the serializer to cancel the order.""" - self.order.cancel_order() + order = self.context['order'] + + order.cancel_order() class SalesOrderSerialAllocationSerializer(serializers.Serializer): @@ -1636,7 +1507,6 @@ def save(self): allocation.save() -@register_importer() class SalesOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -1650,13 +1520,19 @@ class Meta(AbstractExtraLineMeta): order_detail = SalesOrderSerializer(source='order', many=False, read_only=True) -@register_importer() +class SalesOrderAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializers for the SalesOrderAttachment model.""" + + class Meta: + """Metaclass options.""" + + model = order.models.SalesOrderAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) + + class ReturnOrderSerializer( - NotesFieldMixin, - InvenTreeCustomStatusSerializerMixin, - AbstractOrderSerializer, - TotalPriceMixin, - InvenTreeModelSerializer, + AbstractOrderSerializer, TotalPriceMixin, InvenTreeModelSerializer ): """Serializer for the ReturnOrder model class.""" @@ -1682,7 +1558,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if customer_detail is not True: - self.fields.pop('customer_detail', None) + self.fields.pop('customer_detail') @staticmethod def annotate_queryset(queryset): @@ -1712,36 +1588,46 @@ def annotate_queryset(queryset): ) -class ReturnOrderHoldSerializer(OrderAdjustSerializer): - """Serializers for holding a ReturnOrder.""" - - def save(self): - """Save the serializer to 'hold' the order.""" - self.order.hold_order() +class ReturnOrderIssueSerializer(serializers.Serializer): + """Serializer for issuing a ReturnOrder.""" + class Meta: + """Metaclass options.""" -class ReturnOrderIssueSerializer(OrderAdjustSerializer): - """Serializer for issuing a ReturnOrder.""" + fields = [] def save(self): """Save the serializer to 'issue' the order.""" - self.order.issue_order() + order = self.context['order'] + order.issue_order() -class ReturnOrderCancelSerializer(OrderAdjustSerializer): +class ReturnOrderCancelSerializer(serializers.Serializer): """Serializer for cancelling a ReturnOrder.""" + class Meta: + """Metaclass options.""" + + fields = [] + def save(self): """Save the serializer to 'cancel' the order.""" - self.order.cancel_order() + order = self.context['order'] + order.cancel_order() -class ReturnOrderCompleteSerializer(OrderAdjustSerializer): +class ReturnOrderCompleteSerializer(serializers.Serializer): """Serializer for completing a ReturnOrder.""" + class Meta: + """Metaclass options.""" + + fields = [] + def save(self): """Save the serializer to 'complete' the order.""" - self.order.complete_order() + order = self.context['order'] + order.complete_order() class ReturnOrderLineItemReceiveSerializer(serializers.Serializer): @@ -1823,12 +1709,7 @@ def save(self): order.receive_line_item(line_item, location, request.user) -@register_importer() -class ReturnOrderLineItemSerializer( - DataImportExportSerializerMixin, - AbstractLineItemSerializer, - InvenTreeModelSerializer, -): +class ReturnOrderLineItemSerializer(InvenTreeModelSerializer): """Serializer for a ReturnOrderLineItem object.""" class Meta: @@ -1863,13 +1744,13 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not order_detail: - self.fields.pop('order_detail', None) + self.fields.pop('order_detail') if not item_detail: - self.fields.pop('item_detail', None) + self.fields.pop('item_detail') if not part_detail: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) item_detail = stock.serializers.StockItemSerializer( @@ -1881,7 +1762,6 @@ def __init__(self, *args, **kwargs): price_currency = InvenTreeCurrencySerializer(help_text=_('Line price currency')) -@register_importer() class ReturnOrderExtraLineSerializer( AbstractExtraLineSerializer, InvenTreeModelSerializer ): @@ -1893,3 +1773,14 @@ class Meta(AbstractExtraLineMeta): model = order.models.ReturnOrderExtraLine order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) + + +class ReturnOrderAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializer for the ReturnOrderAttachment model.""" + + class Meta: + """Metaclass options.""" + + model = order.models.ReturnOrderAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields(['order']) diff --git a/src/backend/InvenTree/order/status_codes.py b/src/backend/InvenTree/order/status_codes.py deleted file mode 100644 index 3dcbee01f518..000000000000 --- a/src/backend/InvenTree/order/status_codes.py +++ /dev/null @@ -1,113 +0,0 @@ -"""Order status codes.""" - -from django.utils.translation import gettext_lazy as _ - -from generic.states import ColorEnum, StatusCode - - -class PurchaseOrderStatus(StatusCode): - """Defines a set of status codes for a PurchaseOrder.""" - - # Order status codes - PENDING = 10, _('Pending'), ColorEnum.secondary # Order is pending (not yet placed) - PLACED = 20, _('Placed'), ColorEnum.primary # Order has been placed with supplier - ON_HOLD = 25, _('On Hold'), ColorEnum.warning # Order is on hold - COMPLETE = 30, _('Complete'), ColorEnum.success # Order has been completed - CANCELLED = 40, _('Cancelled'), ColorEnum.danger # Order was cancelled - LOST = 50, _('Lost'), ColorEnum.warning # Order was lost - RETURNED = 60, _('Returned'), ColorEnum.warning # Order was returned - - -class PurchaseOrderStatusGroups: - """Groups for PurchaseOrderStatus codes.""" - - # Open orders - OPEN = [ - PurchaseOrderStatus.PENDING.value, - PurchaseOrderStatus.ON_HOLD.value, - PurchaseOrderStatus.PLACED.value, - ] - - # Failed orders - FAILED = [ - PurchaseOrderStatus.CANCELLED.value, - PurchaseOrderStatus.LOST.value, - PurchaseOrderStatus.RETURNED.value, - ] - - -class SalesOrderStatus(StatusCode): - """Defines a set of status codes for a SalesOrder.""" - - PENDING = 10, _('Pending'), ColorEnum.secondary # Order is pending - IN_PROGRESS = ( - 15, - _('In Progress'), - ColorEnum.primary, - ) # Order has been issued, and is in progress - SHIPPED = 20, _('Shipped'), ColorEnum.success # Order has been shipped to customer - ON_HOLD = 25, _('On Hold'), ColorEnum.warning # Order is on hold - COMPLETE = 30, _('Complete'), ColorEnum.success # Order is complete - CANCELLED = 40, _('Cancelled'), ColorEnum.danger # Order has been cancelled - LOST = 50, _('Lost'), ColorEnum.warning # Order was lost - RETURNED = 60, _('Returned'), ColorEnum.warning # Order was returned - - -class SalesOrderStatusGroups: - """Groups for SalesOrderStatus codes.""" - - # Open orders - OPEN = [ - SalesOrderStatus.PENDING.value, - SalesOrderStatus.ON_HOLD.value, - SalesOrderStatus.IN_PROGRESS.value, - ] - - # Completed orders - COMPLETE = [SalesOrderStatus.SHIPPED.value, SalesOrderStatus.COMPLETE.value] - - -class ReturnOrderStatus(StatusCode): - """Defines a set of status codes for a ReturnOrder.""" - - # Order is pending, waiting for receipt of items - PENDING = 10, _('Pending'), ColorEnum.secondary - - # Items have been received, and are being inspected - IN_PROGRESS = 20, _('In Progress'), ColorEnum.primary - - ON_HOLD = 25, _('On Hold'), ColorEnum.warning - - COMPLETE = 30, _('Complete'), ColorEnum.success - CANCELLED = 40, _('Cancelled'), ColorEnum.danger - - -class ReturnOrderStatusGroups: - """Groups for ReturnOrderStatus codes.""" - - OPEN = [ - ReturnOrderStatus.PENDING.value, - ReturnOrderStatus.ON_HOLD.value, - ReturnOrderStatus.IN_PROGRESS.value, - ] - - -class ReturnOrderLineStatus(StatusCode): - """Defines a set of status codes for a ReturnOrderLineItem.""" - - PENDING = 10, _('Pending'), ColorEnum.secondary - - # Item is to be returned to customer, no other action - RETURN = 20, _('Return'), ColorEnum.success - - # Item is to be repaired, and returned to customer - REPAIR = 30, _('Repair'), ColorEnum.primary - - # Item is to be replaced (new item shipped) - REPLACE = 40, _('Replace'), ColorEnum.warning - - # Item is to be refunded (cannot be repaired) - REFUND = 50, _('Refund'), ColorEnum.info - - # Item is rejected - REJECT = 60, _('Reject'), ColorEnum.danger diff --git a/src/backend/InvenTree/order/tasks.py b/src/backend/InvenTree/order/tasks.py index 1e1231a810eb..0c0c8cea3087 100644 --- a/src/backend/InvenTree/order/tasks.py +++ b/src/backend/InvenTree/order/tasks.py @@ -7,8 +7,8 @@ import common.notifications import InvenTree.helpers_model import order.models +from InvenTree.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups from InvenTree.tasks import ScheduledTask, scheduled_task -from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups from plugin.events import trigger_event diff --git a/src/backend/InvenTree/order/templates/order/order_base.html b/src/backend/InvenTree/order/templates/order/order_base.html index 77e044120b08..173eaeb11944 100644 --- a/src/backend/InvenTree/order/templates/order/order_base.html +++ b/src/backend/InvenTree/order/templates/order/order_base.html @@ -63,28 +63,23 @@
  • {% trans "Edit order" %}
  • - {% if roles.purchase_order.add %} -
  • - {% trans "Duplicate order" %} -
  • - {% endif %} - {% if order.can_hold %} -
  • - {% trans "Hold order" %} -
  • - {% endif %} {% if order.can_cancel %}
  • {% trans "Cancel order" %}
  • {% endif %} + {% if roles.purchase_order.add %} +
  • + {% trans "Duplicate order" %} +
  • + {% endif %}
    -{% if order.can_issue %} +{% if order.is_pending %} -{% elif order.status == PurchaseOrderStatus.PLACED %} +{% elif order.is_open %} @@ -122,7 +117,7 @@ {% trans "Order Status" %} - {% display_status_label 'purchase_order' order.status_custom_key order.status %} + {% status_label 'purchase_order' order.status %} {% if order.is_overdue %} {% trans "Overdue" %} {% endif %} @@ -243,7 +238,7 @@ {% block js_ready %} {{ block.super }} -{% if order.status == PurchaseOrderStatus.PENDING or order.status == PurchaseOrderStatus.ON_HOLD %} +{% if order.status == PurchaseOrderStatus.PENDING %} $("#place-order").click(function() { issuePurchaseOrder( @@ -258,7 +253,11 @@ {% if report_enabled %} $('#print-order-report').click(function() { - printReports('purchaseorder', [{{ order.pk }}]); + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-po-report-list" %}', + }); }); {% endif %} @@ -286,7 +285,6 @@ ); }); -{% if order.can_cancel %} $("#cancel-order").click(function() { cancelPurchaseOrder( @@ -298,21 +296,6 @@ }, ); }); -{% endif %} - -{% if order.can_hold %} -$("#hold-order").click(function() { - - holdOrder( - '{% url "api-po-hold" order.pk %}', - { - onSuccess: function() { - window.location.reload(); - } - } - ); -}); -{% endif %} {% endif %} @@ -333,7 +316,7 @@ $('#show-qr-code').click(function() { showQRDialog( '{% trans "Purchase Order QR Code" escape %}', - '{{ order.barcode }}' + '{"purchaseorder": {{ order.pk }} }' ); }); diff --git a/src/backend/InvenTree/order/templates/order/purchase_order_detail.html b/src/backend/InvenTree/order/templates/order/purchase_order_detail.html index 78da5925ac7d..85065ff46f67 100644 --- a/src/backend/InvenTree/order/templates/order/purchase_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/purchase_order_detail.html @@ -120,8 +120,6 @@

    {% trans "Order Notes" %}

    'order-notes', '{% url "api-po-detail" order.pk %}', { - model_type: "purchaseorder", - model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} @@ -132,7 +130,17 @@

    {% trans "Order Notes" %}

    }); onPanelLoad('order-attachments', function() { - loadAttachmentTable('purchaseorder', {{ order.pk }}); + loadAttachmentTable('{% url "api-po-attachment-list" %}', { + filters: { + order: {{ order.pk }}, + }, + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + } + } + }); }); loadStockTable($("#stock-table"), { diff --git a/src/backend/InvenTree/order/templates/order/return_order_base.html b/src/backend/InvenTree/order/templates/order/return_order_base.html index 15755c4199d4..eb80a70d53e2 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_base.html +++ b/src/backend/InvenTree/order/templates/order/return_order_base.html @@ -74,14 +74,11 @@ - {% if order.can_issue %} + {% if order.status == ReturnOrderStatus.PENDING %} @@ -115,7 +112,7 @@ {% trans "Order Status" %} - {% display_status_label 'return_order' order.status_custom_key order.status %} + {% status_label 'return_order' order.status %} {% if order.is_overdue %} {% trans "Overdue" %} {% endif %} @@ -214,7 +211,7 @@ {% if roles.return_order.change %} -{% if order.can_issue %} +{% if order.status == ReturnOrderStatus.PENDING %} $('#issue-order').click(function() { issueReturnOrder({{ order.pk }}, { reload: true, @@ -237,7 +234,7 @@ }); }); -{% if order.can_cancel %} +{% if order.is_open %} $('#cancel-order').click(function() { cancelReturnOrder( {{ order.pk }}, @@ -247,22 +244,15 @@ ); }); {% endif %} - -{% if order.can_hold %} -$("#hold-order").click(function() { - holdOrder( - '{% url "api-ro-hold" order.pk %}', - { - reload: true, - } - ); - }); -{% endif %} {% endif %} {% if report_enabled %} $('#print-order-report').click(function() { - printReports('returnorder', [{{ order.pk }}]); + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-return-order-report-list" %}', + }); }); {% endif %} @@ -271,7 +261,7 @@ $('#show-qr-code').click(function() { showQRDialog( '{% trans "Return Order QR Code" escape %}', - '{{ order.barcode }}' + '{"returnorder": {{ order.pk }} }' ); }); diff --git a/src/backend/InvenTree/order/templates/order/return_order_detail.html b/src/backend/InvenTree/order/templates/order/return_order_detail.html index 279ddc66cc06..9c11ff627063 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/return_order_detail.html @@ -175,8 +175,6 @@

    {% trans "Order Notes" %}

    'order-notes', '{% url "api-return-order-detail" order.pk %}', { - model_type: 'returnorder', - model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} @@ -189,7 +187,17 @@

    {% trans "Order Notes" %}

    // Callback function when the 'attachments' panel is loaded onPanelLoad('order-attachments', function() { - loadAttachmentTable('returnorder', {{ order.pk }}); + loadAttachmentTable('{% url "api-return-order-attachment-list" %}', { + filters: { + order: {{ order.pk }}, + }, + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + }, + } + }); }); enableSidebar('returnorder'); diff --git a/src/backend/InvenTree/order/templates/order/sales_order_base.html b/src/backend/InvenTree/order/templates/order/sales_order_base.html index 987b2e49d2fd..f184d8d2bca4 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_base.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_base.html @@ -73,16 +73,13 @@
    - {% if order.status == SalesOrderStatus.PENDING or order.status == SalesOrderStatus.ON_HOLD %} + {% if order.is_pending %} @@ -92,10 +89,6 @@ {% trans "Ship Items" %} {% endif %} - - {% elif order.status == SalesOrderStatus.SHIPPED %} @@ -124,7 +117,7 @@ {% trans "Order Status" %} - {% display_status_label 'sales_order' order.status_custom_key order.status %} + {% status_label 'sales_order' order.status %} {% if order.is_overdue %} {% trans "Overdue" %} {% endif %} @@ -283,7 +276,6 @@ ); }); -{% if order.can_cancel %} $("#cancel-order").click(function() { cancelSalesOrder( @@ -293,29 +285,6 @@ } ); }); -{% endif %} - -{% if order.can_hold %} -$('#hold-order').click(function() { - holdOrder( - '{% url "api-so-hold" order.pk %}', - { - onSuccess: function() { - window.location.reload(); - } - } - ); -}); -{% endif %} - -$("#ship-order").click(function() { - shipSalesOrder( - {{ order.pk }}, - { - reload: true, - } - ); -}); $("#complete-order").click(function() { completeSalesOrder( @@ -328,7 +297,11 @@ {% if report_enabled %} $('#print-order-report').click(function() { - printReports('salesorder', [{{ order.pk }}]); + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-so-report-list" %}', + }); }); {% endif %} @@ -337,7 +310,7 @@ $('#show-qr-code').click(function() { showQRDialog( '{% trans "Sales Order QR Code" escape %}', - '{{ order.barcode }}' + '{"salesorder": {{ order.pk }} }' ); }); diff --git a/src/backend/InvenTree/order/templates/order/sales_order_detail.html b/src/backend/InvenTree/order/templates/order/sales_order_detail.html index c135211ab54e..4d9fac48f03e 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_detail.html @@ -190,8 +190,6 @@

    {% trans "Order Notes" %}

    'order-notes', '{% url "api-so-detail" order.pk %}', { - model_type: "salesorder", - model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} @@ -203,7 +201,17 @@

    {% trans "Order Notes" %}

    onPanelLoad('order-attachments', function() { - loadAttachmentTable('salesorder', {{ order.pk }}); + loadAttachmentTable('{% url "api-so-attachment-list" %}', { + filters: { + order: {{ order.pk }}, + }, + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + }, + } + }); }); loadBuildTable($("#builds-table"), { diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 4d8a78de8a80..d9f63d67c073 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -13,21 +13,21 @@ from icalendar import Calendar from rest_framework import status -from common.currency import currency_codes from common.models import InvenTreeSetting +from common.settings import currency_codes from company.models import Company, SupplierPart, SupplierPriceBreak -from InvenTree.unit_test import InvenTreeAPITestCase -from order import models -from order.status_codes import ( +from InvenTree.status_codes import ( PurchaseOrderStatus, ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatus, SalesOrderStatusGroups, + StockStatus, ) +from InvenTree.unit_test import InvenTreeAPITestCase +from order import models from part.models import Part from stock.models import StockItem -from stock.status_codes import StockStatus from users.models import Owner @@ -258,9 +258,9 @@ def test_po_reference(self): def test_po_attachments(self): """Test the list endpoint for the PurchaseOrderAttachment model.""" - url = reverse('api-attachment-list') + url = reverse('api-po-attachment-list') - response = self.get(url, {'model_type': 'purchaseorder'}) + response = self.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -418,7 +418,7 @@ def test_po_duplicate(self): po = models.PurchaseOrder.objects.get(pk=1) - self.assertGreater(po.lines.count(), 0) + self.assertTrue(po.lines.count() > 0) lines = [] @@ -484,9 +484,6 @@ def test_po_cancel(self): url = reverse('api-po-cancel', kwargs={'pk': po.pk}) - # Get an OPTIONS request from the endpoint - self.options(url, data={'context': True}, expected_code=200) - # Try to cancel the PO, but without required permissions self.post(url, {}, expected_code=403) @@ -793,14 +790,14 @@ class PurchaseOrderDownloadTest(OrderTest): """Unit tests for downloading PurchaseOrder data via the API endpoint.""" required_cols = [ - 'ID', - 'Line Items', - 'Description', - 'Issue Date', - 'Order Currency', - 'Reference', - 'Order Status', - 'Supplier Reference', + 'id', + 'line_items', + 'description', + 'issue_date', + 'notes', + 'reference', + 'status', + 'supplier_reference', ] excluded_cols = ['metadata'] @@ -818,7 +815,7 @@ def test_download_csv(self): reverse('api-po-list'), {'export': 'csv'}, expected_code=200, - expected_fn=r'InvenTree_PurchaseOrder_.+\.csv', + expected_fn='InvenTree_PurchaseOrders.csv', ) as file: data = self.process_csv( file, @@ -828,10 +825,10 @@ def test_download_csv(self): ) for row in data: - order = models.PurchaseOrder.objects.get(pk=row['ID']) + order = models.PurchaseOrder.objects.get(pk=row['id']) - self.assertEqual(order.description, row['Description']) - self.assertEqual(order.reference, row['Reference']) + self.assertEqual(order.description, row['description']) + self.assertEqual(order.reference, row['reference']) def test_download_line_items(self): """Test that the PurchaseOrderLineItems can be downloaded to a file.""" @@ -840,9 +837,9 @@ def test_download_line_items(self): {'export': 'xlsx'}, decode=False, expected_code=200, - expected_fn=r'InvenTree_PurchaseOrderLineItem.+\.xlsx', + expected_fn='InvenTree_PurchaseOrderItems.xlsx', ) as file: - self.assertIsInstance(file, io.BytesIO) + self.assertTrue(isinstance(file, io.BytesIO)) class PurchaseOrderReceiveTest(OrderTest): @@ -1111,7 +1108,7 @@ def test_serial_numbers(self): n = StockItem.objects.count() - self.post(self.url, data, expected_code=201, max_query_count=400) + self.post(self.url, data, expected_code=201) # Check that the expected number of stock items has been created self.assertEqual(n + 11, StockItem.objects.count()) @@ -1137,56 +1134,6 @@ def test_serial_numbers(self): self.assertEqual(item.quantity, 10) self.assertEqual(item.batch, 'B-xyz-789') - def test_packaging(self): - """Test that we can supply a 'packaging' value when receiving items.""" - line_1 = models.PurchaseOrderLineItem.objects.get(pk=1) - line_2 = models.PurchaseOrderLineItem.objects.get(pk=2) - - line_1.part.packaging = 'Reel' - line_1.part.save() - - line_2.part.packaging = 'Tube' - line_2.part.save() - - # Receive items without packaging data - data = { - 'items': [ - {'line_item': line_1.pk, 'quantity': 1}, - {'line_item': line_2.pk, 'quantity': 1}, - ], - 'location': 1, - } - - n = StockItem.objects.count() - - self.post(self.url, data, expected_code=201) - - item_1 = StockItem.objects.filter(supplier_part=line_1.part).first() - self.assertEqual(item_1.packaging, 'Reel') - - item_2 = StockItem.objects.filter(supplier_part=line_2.part).first() - self.assertEqual(item_2.packaging, 'Tube') - - # Receive items and override packaging data - data = { - 'items': [ - {'line_item': line_1.pk, 'quantity': 1, 'packaging': 'Bag'}, - {'line_item': line_2.pk, 'quantity': 1, 'packaging': 'Box'}, - ], - 'location': 1, - } - - self.post(self.url, data, expected_code=201) - - item_1 = StockItem.objects.filter(supplier_part=line_1.part).last() - self.assertEqual(item_1.packaging, 'Bag') - - item_2 = StockItem.objects.filter(supplier_part=line_2.part).last() - self.assertEqual(item_2.packaging, 'Box') - - # Check that the expected number of stock items has been created - self.assertEqual(n + 4, StockItem.objects.count()) - class SalesOrderTest(OrderTest): """Tests for the SalesOrder API.""" @@ -1313,12 +1260,9 @@ def test_so_detail(self): def test_so_attachments(self): """Test the list endpoint for the SalesOrderAttachment model.""" - url = reverse('api-attachment-list') + url = reverse('api-so-attachment-list') - # Filter by 'salesorder' - self.get( - url, data={'model_type': 'salesorder', 'model_id': 1}, expected_code=200 - ) + self.get(url) def test_so_operations(self): """Test that we can create / edit and delete a SalesOrder via the API.""" @@ -1523,86 +1467,15 @@ def test_export(self): order.save() # Download file, check we get a 200 response - for fmt in ['csv', 'xlsx', 'tsv']: + for fmt in ['csv', 'xls', 'xlsx']: self.download_file( reverse('api-so-list'), {'export': fmt}, decode=True if fmt == 'csv' else False, expected_code=200, - expected_fn=r'InvenTree_SalesOrder_.+', - ) - - def test_sales_order_complete(self): - """Tests for marking a SalesOrder as complete.""" - self.assignRole('sales_order.add') - - # Let's create a SalesOrder - customer = Company.objects.filter(is_customer=True).first() - so = models.SalesOrder.objects.create( - customer=customer, reference='SO-12345', description='Test SO' - ) - - self.assertEqual(so.status, SalesOrderStatus.PENDING.value) - - # Create a line item - part = Part.objects.filter(salable=True).first() - - line = models.SalesOrderLineItem.objects.create( - order=so, part=part, quantity=10, sale_price=Money(10, 'USD') - ) - - shipment = so.shipments.first() - - if shipment is None: - shipment = models.SalesOrderShipment.objects.create( - order=so, reference='SHIP-12345' + expected_fn=f'InvenTree_SalesOrders.{fmt}', ) - # Allocate some stock - item = StockItem.objects.create(part=part, quantity=100, location=None) - models.SalesOrderAllocation.objects.create( - quantity=10, line=line, item=item, shipment=shipment - ) - - # Ship the shipment - shipment.complete_shipment(self.user) - - # Ok, now we should be able to "complete" the shipment via the API - # The 'SALESORDER_SHIP_COMPLETE' setting determines if the outcome is "SHIPPED" or "COMPLETE" - InvenTreeSetting.set_setting('SALESORDER_SHIP_COMPLETE', False) - - url = reverse('api-so-complete', kwargs={'pk': so.pk}) - self.post(url, {}, expected_code=201) - - so.refresh_from_db() - self.assertEqual(so.status, SalesOrderStatus.SHIPPED.value) - - # Now, let's try to "complete" the shipment again - # This time it should get marked as "COMPLETE" - self.post(url, {}, expected_code=201) - - so.refresh_from_db() - self.assertEqual(so.status, SalesOrderStatus.COMPLETE.value) - - # Now, let's try *again* (it should fail as the order is already complete) - response = self.post(url, {}, expected_code=400) - - self.assertIn('Order is already complete', str(response.data)) - - # Next, we'll change the setting so that the order status jumps straight to "complete" - so.status = SalesOrderStatus.PENDING.value - so.save() - so.refresh_from_db() - self.assertEqual(so.status, SalesOrderStatus.PENDING.value) - - InvenTreeSetting.set_setting('SALESORDER_SHIP_COMPLETE', True) - - self.post(url, {}, expected_code=201) - - # The orders status should now be "complete" (not "shipped") - so.refresh_from_db() - self.assertEqual(so.status, SalesOrderStatus.COMPLETE.value) - class SalesOrderLineItemTest(OrderTest): """Tests for the SalesOrderLineItem API.""" @@ -1685,37 +1558,44 @@ def test_download_fail(self): with self.assertRaises(ValueError): self.download_file(url, {}, expected_code=200) - def test_download_xlsx(self): - """Test xlsx file download.""" + def test_download_xls(self): + """Test xls file download.""" url = reverse('api-so-list') # Download .xls file with self.download_file( - url, {'export': 'xlsx'}, expected_code=200, decode=False + url, + {'export': 'xls'}, + expected_code=200, + expected_fn='InvenTree_SalesOrders.xls', + decode=False, ) as file: - self.assertIsInstance(file, io.BytesIO) + self.assertTrue(isinstance(file, io.BytesIO)) def test_download_csv(self): """Test that the list of sales orders can be downloaded as a .csv file.""" url = reverse('api-so-list') required_cols = [ - 'Line Items', - 'ID', - 'Reference', - 'Customer', - 'Order Status', - 'Shipment Date', - 'Description', - 'Project Code', - 'Responsible', + 'line_items', + 'id', + 'reference', + 'customer', + 'status', + 'shipment_date', + 'notes', + 'description', ] excluded_cols = ['metadata'] # Download .xls file with self.download_file( - url, {'export': 'csv'}, expected_code=200, decode=True + url, + {'export': 'csv'}, + expected_code=200, + expected_fn='InvenTree_SalesOrders.csv', + decode=True, ) as file: data = self.process_csv( file, @@ -1725,14 +1605,18 @@ def test_download_csv(self): ) for line in data: - order = models.SalesOrder.objects.get(pk=line['ID']) + order = models.SalesOrder.objects.get(pk=line['id']) - self.assertEqual(line['Description'], order.description) - self.assertEqual(line['Order Status'], str(order.status)) + self.assertEqual(line['description'], order.description) + self.assertEqual(line['status'], str(order.status)) # Download only outstanding sales orders with self.download_file( - url, {'export': 'tsv', 'outstanding': True}, expected_code=200, decode=True + url, + {'export': 'tsv', 'outstanding': True}, + expected_code=200, + expected_fn='InvenTree_SalesOrders.tsv', + decode=True, ) as file: self.process_csv( file, @@ -1888,7 +1772,7 @@ def check_template(line_item): # At least one item should be allocated, and all should be variants self.assertGreater(self.order.stock_allocations.count(), 0) for allocation in self.order.stock_allocations.all(): - self.assertNotEqual(allocation.item.part.pk, allocation.line.part.pk) + self.assertNotEquals(allocation.item.part.pk, allocation.line.part.pk) def test_shipment_complete(self): """Test that we can complete a shipment via the API.""" @@ -2010,7 +1894,6 @@ class ReturnOrderTests(InvenTreeAPITestCase): 'supplier_part', 'stock', ] - roles = ['return_order.view'] def test_options(self): """Test the OPTIONS endpoint.""" @@ -2029,18 +1912,6 @@ def test_options(self): self.assertEqual(reference['required'], True) self.assertEqual(reference['type'], 'string') - def test_project_code(self): - """Test the 'project_code' serializer field.""" - self.assignRole('return_order.add') - response = self.options(reverse('api-return-order-list'), expected_code=200) - project_code = response.data['actions']['POST']['project_code'] - - self.assertFalse(project_code['required']) - self.assertFalse(project_code['read_only']) - self.assertEqual(project_code['type'], 'related field') - self.assertEqual(project_code['label'], 'Project Code') - self.assertEqual(project_code['model'], 'projectcode') - def test_list(self): """Tests for the list endpoint.""" url = reverse('api-return-order-list') diff --git a/src/backend/InvenTree/order/test_migrations.py b/src/backend/InvenTree/order/test_migrations.py index 7eafd2032fc5..407468cd5164 100644 --- a/src/backend/InvenTree/order/test_migrations.py +++ b/src/backend/InvenTree/order/test_migrations.py @@ -2,7 +2,7 @@ from django_test_migrations.contrib.unittest_case import MigratorTestCase -from order.status_codes import SalesOrderStatus +from InvenTree.status_codes import SalesOrderStatus class TestRefIntMigrations(MigratorTestCase): diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index b394147971c9..da8bcecb0ef9 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -211,7 +211,7 @@ def test_order_cancel(self): self.order.can_complete(raise_error=True) # Now try to ship it - should fail - result = self.order.ship_order(None) + result = self.order.complete_order(None) self.assertFalse(result) def test_complete_order(self): @@ -225,8 +225,8 @@ def test_complete_order(self): self.assertEqual(SalesOrderAllocation.objects.count(), 2) - # Attempt to ship the order (but shipments are not completed!) - result = self.order.ship_order(None) + # Attempt to complete the order (but shipments are not completed!) + result = self.order.complete_order(None) self.assertFalse(result) @@ -238,7 +238,7 @@ def test_complete_order(self): self.assertTrue(self.shipment.is_complete()) # Now, should be OK to ship - result = self.order.ship_order(None) + result = self.order.complete_order(None) self.assertTrue(result) diff --git a/src/backend/InvenTree/order/tests.py b/src/backend/InvenTree/order/tests.py index c797149ae517..1b6cdb908101 100644 --- a/src/backend/InvenTree/order/tests.py +++ b/src/backend/InvenTree/order/tests.py @@ -14,7 +14,7 @@ import common.models import order.tasks from company.models import Company, SupplierPart -from order.status_codes import PurchaseOrderStatus +from InvenTree.status_codes import PurchaseOrderStatus from part.models import Part from stock.models import StockItem, StockLocation from users.models import Owner diff --git a/src/backend/InvenTree/part/admin.py b/src/backend/InvenTree/part/admin.py index 89a23cefccaa..c0d32fb0a25b 100644 --- a/src/backend/InvenTree/part/admin.py +++ b/src/backend/InvenTree/part/admin.py @@ -250,8 +250,6 @@ class PartAdmin(ImportExportModelAdmin): 'category', 'default_location', 'default_supplier', - 'bom_checked_by', - 'creation_user', ] inlines = [PartParameterInline] @@ -262,7 +260,7 @@ class PartPricingAdmin(admin.ModelAdmin): list_display = ('part', 'overall_min', 'overall_max') - autocomplete_fields = ['part'] + autcomplete_fields = ['part'] class PartStocktakeAdmin(admin.ModelAdmin): @@ -353,6 +351,14 @@ class PartRelatedAdmin(admin.ModelAdmin): autocomplete_fields = ('part_1', 'part_2') +class PartAttachmentAdmin(admin.ModelAdmin): + """Admin class for the PartAttachment model.""" + + list_display = ('part', 'attachment', 'comment') + + autocomplete_fields = ('part',) + + class PartTestTemplateAdmin(admin.ModelAdmin): """Admin class for the PartTestTemplate model.""" @@ -401,9 +407,6 @@ class Meta: part_ipn = Field( attribute='sub_part__IPN', column_name=_('Part IPN'), readonly=True ) - part_revision = Field( - attribute='sub_part__revision', column_name=_('Part Revision'), readonly=True - ) part_name = Field( attribute='sub_part__name', column_name=_('Part Name'), readonly=True ) @@ -602,6 +605,7 @@ class Meta: admin.site.register(models.Part, PartAdmin) admin.site.register(models.PartCategory, PartCategoryAdmin) admin.site.register(models.PartRelated, PartRelatedAdmin) +admin.site.register(models.PartAttachment, PartAttachmentAdmin) admin.site.register(models.BomItem, BomItemAdmin) admin.site.register(models.PartParameterTemplate, ParameterTemplateAdmin) admin.site.register(models.PartParameter, ParameterAdmin) diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 1c7fe79d4a58..df0a3451f4c6 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -4,6 +4,7 @@ import re from django.db.models import Count, F, Q +from django.http import JsonResponse from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ @@ -18,18 +19,26 @@ import order.models import part.filters from build.models import Build, BuildItem -from build.status_codes import BuildStatusGroups -from importer.mixins import DataExportViewMixin -from InvenTree.api import ListCreateDestroyAPIView, MetadataView +from InvenTree.api import ( + APIDownloadMixin, + AttachmentMixin, + ListCreateDestroyAPIView, + MetadataView, +) from InvenTree.filters import ( ORDER_FILTER, - ORDER_FILTER_ALIAS, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, InvenTreeSearchFilter, ) -from InvenTree.helpers import increment_serial_number, isNull, str2bool +from InvenTree.helpers import ( + DownloadFile, + increment_serial_number, + is_ajax, + isNull, + str2bool, +) from InvenTree.mixins import ( CreateAPI, CustomRetrieveUpdateDestroyAPI, @@ -42,7 +51,12 @@ ) from InvenTree.permissions import RolePermission from InvenTree.serializers import EmptySerializer -from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups +from InvenTree.status_codes import ( + BuildStatusGroups, + PurchaseOrderStatusGroups, + SalesOrderStatusGroups, +) +from part.admin import PartCategoryResource, PartResource from stock.models import StockLocation from . import serializers as part_serializers @@ -51,6 +65,7 @@ BomItem, BomItemSubstitute, Part, + PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, @@ -137,21 +152,6 @@ def filter_depth(self, queryset, name, value): return queryset - top_level = rest_filters.BooleanFilter( - label=_('Top Level'), - method='filter_top_level', - help_text=_('Filter by top-level categories'), - ) - - def filter_top_level(self, queryset, name, value): - """Filter by top-level categories.""" - cascade = str2bool(self.data.get('cascade', False)) - - if value and not cascade: - return queryset.filter(parent=None) - - return queryset - cascade = rest_filters.BooleanFilter( label=_('Cascade'), method='filter_cascade', @@ -163,11 +163,10 @@ def filter_cascade(self, queryset, name, value): Note: If the "parent" filter is provided, we offload the logic to that method. """ - parent = str2bool(self.data.get('parent', None)) - top_level = str2bool(self.data.get('top_level', None)) + parent = self.data.get('parent', None) # If the parent is *not* provided, update the results based on the "cascade" value - if not parent or top_level: + if not parent: if not value: # If "cascade" is False, only return top-level categories queryset = queryset.filter(parent=None) @@ -228,7 +227,7 @@ def filter_exclude_tree(self, queryset, name, value): return queryset -class CategoryList(CategoryMixin, DataExportViewMixin, ListCreateAPI): +class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of PartCategory objects. - GET: Return a list of PartCategory objects @@ -237,6 +236,14 @@ class CategoryList(CategoryMixin, DataExportViewMixin, ListCreateAPI): filterset_class = CategoryFilter + def download_queryset(self, queryset, export_format): + """Download the filtered queryset as a data file.""" + dataset = PartCategoryResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f'InvenTree_Categories.{export_format}' + + return DownloadFile(filedata, filename) + filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['name', 'pathstring', 'level', 'tree_id', 'lft', 'part_count'] @@ -244,7 +251,7 @@ class CategoryList(CategoryMixin, DataExportViewMixin, ListCreateAPI): # Use hierarchical ordering by default ordering = ['tree_id', 'lft', 'name'] - search_fields = ['name', 'description', 'pathstring'] + search_fields = ['name', 'description'] class CategoryDetail(CategoryMixin, CustomRetrieveUpdateDestroyAPI): @@ -303,12 +310,10 @@ 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'] - ordering_field_aliases = {'level': ['level', 'name'], 'name': ['name', 'level']} - # Order by tree level (top levels first) and then name ordering = ['level', 'name'] @@ -319,7 +324,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class CategoryParameterList(DataExportViewMixin, ListCreateAPI): +class CategoryParameterList(ListCreateAPI): """API endpoint for accessing a list of PartCategoryParameterTemplate objects. - GET: Return a list of PartCategoryParameterTemplate objects @@ -374,7 +379,7 @@ class PartSalePriceDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.PartSalePriceSerializer -class PartSalePriceList(DataExportViewMixin, ListCreateAPI): +class PartSalePriceList(ListCreateAPI): """API endpoint for list view of PartSalePriceBreak model.""" queryset = PartSellPriceBreak.objects.all() @@ -393,7 +398,7 @@ class PartInternalPriceDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.PartInternalPriceSerializer -class PartInternalPriceList(DataExportViewMixin, ListCreateAPI): +class PartInternalPriceList(ListCreateAPI): """API endpoint for list view of PartInternalPriceBreak model.""" queryset = PartInternalPriceBreak.objects.all() @@ -406,6 +411,22 @@ class PartInternalPriceList(DataExportViewMixin, ListCreateAPI): ordering = 'quantity' +class PartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a PartAttachment (file upload).""" + + queryset = PartAttachment.objects.all() + serializer_class = part_serializers.PartAttachmentSerializer + + filterset_fields = ['part'] + + +class PartAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for PartAttachment model.""" + + queryset = PartAttachment.objects.all() + serializer_class = part_serializers.PartAttachmentSerializer + + class PartTestTemplateFilter(rest_filters.FilterSet): """Custom filterset class for the PartTestTemplateList endpoint.""" @@ -425,8 +446,7 @@ class Meta: def filter_part(self, queryset, name, part): """Filter by the 'part' field. - Note: If the 'include_inherited' query parameter is set, - we also include any parts "above" the specified part. + Note that for the 'part' field, we also include any parts "above" the specified part. """ include_inherited = str2bool( self.request.query_params.get('include_inherited', True) @@ -469,7 +489,7 @@ class PartTestTemplateDetail(PartTestTemplateMixin, RetrieveUpdateDestroyAPI): pass -class PartTestTemplateList(PartTestTemplateMixin, DataExportViewMixin, ListCreateAPI): +class PartTestTemplateList(PartTestTemplateMixin, ListCreateAPI): """API endpoint for listing (and creating) a PartTestTemplate.""" filterset_class = PartTestTemplateFilter @@ -910,27 +930,7 @@ class Meta: """Metaclass options for this filter set.""" model = Part - fields = ['revision_of'] - - is_revision = rest_filters.BooleanFilter( - label=_('Is Revision'), method='filter_is_revision' - ) - - def filter_is_revision(self, queryset, name, value): - """Filter by whether the Part is a revision or not.""" - if str2bool(value): - return queryset.exclude(revision_of=None) - return queryset.filter(revision_of=None) - - has_revisions = rest_filters.BooleanFilter( - label=_('Has Revisions'), method='filter_has_revisions' - ) - - def filter_has_revisions(self, queryset, name, value): - """Filter by whether the Part has any revisions or not.""" - if str2bool(value): - return queryset.exclude(revision_count=0) - return queryset.filter(revision_count=0) + fields = [] has_units = rest_filters.BooleanFilter(label='Has units', method='filter_has_units') @@ -1113,42 +1113,6 @@ def filter_depleted_stock(self, queryset, name, value): label='Default Location', queryset=StockLocation.objects.all() ) - bom_valid = rest_filters.BooleanFilter( - label=_('BOM Valid'), method='filter_bom_valid' - ) - - def filter_bom_valid(self, queryset, name, value): - """Filter by whether the BOM for the part is valid or not.""" - # Limit queryset to active assemblies - queryset = queryset.filter(active=True, assembly=True).distinct() - - # Iterate through the queryset - # TODO: We should cache BOM checksums to make this process more efficient - pks = [] - - for item in queryset: - if item.is_bom_valid() == value: - pks.append(item.pk) - - return queryset.filter(pk__in=pks) - - starred = rest_filters.BooleanFilter(label='Starred', method='filter_starred') - - def filter_starred(self, queryset, name, value): - """Filter by whether the Part is 'starred' by the current user.""" - if self.request.user.is_anonymous: - return queryset - - starred_parts = [ - star.part.pk - for star in self.request.user.starred_parts.all().prefetch_related('part') - ] - - if value: - return queryset.filter(pk__in=starred_parts) - else: - return queryset.exclude(pk__in=starred_parts) - is_template = rest_filters.BooleanFilter() assembly = rest_filters.BooleanFilter() @@ -1157,16 +1121,12 @@ def filter_starred(self, queryset, name, value): trackable = rest_filters.BooleanFilter() - testable = rest_filters.BooleanFilter() - purchaseable = rest_filters.BooleanFilter() salable = rest_filters.BooleanFilter() active = rest_filters.BooleanFilter() - locked = rest_filters.BooleanFilter() - virtual = rest_filters.BooleanFilter() tags_name = rest_filters.CharFilter(field_name='tags__name', lookup_expr='iexact') @@ -1189,6 +1149,7 @@ class PartMixin: queryset = Part.objects.all() starred_parts = None + is_create = False def get_queryset(self, *args, **kwargs): @@ -1197,10 +1158,6 @@ def get_queryset(self, *args, **kwargs): queryset = part_serializers.PartSerializer.annotate_queryset(queryset) - # Annotate with parameter template data? - if str2bool(self.request.query_params.get('parameters', False)): - queryset = queryset.prefetch_related('parameters', 'parameters__template') - return queryset def get_serializer(self, *args, **kwargs): @@ -1229,7 +1186,6 @@ def get_serializer(self, *args, **kwargs): kwargs['parameters'] = str2bool(params.get('parameters', None)) kwargs['category_detail'] = str2bool(params.get('category_detail', False)) - kwargs['location_detail'] = str2bool(params.get('location_detail', False)) kwargs['path_detail'] = str2bool(params.get('path_detail', False)) except AttributeError: @@ -1245,12 +1201,48 @@ def get_serializer_context(self): return context -class PartList(PartMixin, DataExportViewMixin, ListCreateAPI): +class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of Part objects, or creating a new Part instance.""" filterset_class = PartFilter is_create = True + def download_queryset(self, queryset, export_format): + """Download the filtered queryset as a data file.""" + dataset = PartResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + filename = f'InvenTree_Parts.{export_format}' + + return DownloadFile(filedata, filename) + + def list(self, request, *args, **kwargs): + """Override the 'list' method, as the PartCategory objects are very expensive to serialize! + + So we will serialize them first, and keep them in memory, so that they do not have to be serialized multiple times... + """ + queryset = self.filter_queryset(self.get_queryset()) + + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + else: + serializer = self.get_serializer(queryset, many=True) + + data = serializer.data + + """ + Determine the response type based on the request. + a) For HTTP requests (e.g. via the browsable API) return a DRF response + b) For AJAX requests, simply return a JSON rendered response. + """ + if page is not None: + return self.get_paginated_response(data) + elif is_ajax(request): + return JsonResponse(data, safe=False) + return Response(data) + def filter_queryset(self, queryset): """Perform custom filtering of the queryset.""" params = self.request.query_params @@ -1277,6 +1269,26 @@ def filter_queryset(self, queryset): queryset = queryset.exclude(pk__in=id_values) + # Filter by whether the BOM has been validated (or not) + bom_valid = params.get('bom_valid', None) + + # TODO: Querying bom_valid status may be quite expensive + # TODO: (It needs to be profiled!) + # TODO: It might be worth caching the bom_valid status to a database column + if bom_valid is not None: + bom_valid = str2bool(bom_valid) + + # Limit queryset to active assemblies + queryset = queryset.filter(active=True, assembly=True) + + pks = [] + + for prt in queryset: + if prt.is_bom_valid() == bom_valid: + pks.append(prt.pk) + + queryset = queryset.filter(pk__in=pks) + # Filter by 'related' parts? related = params.get('related', None) exclude_related = params.get('exclude_related', None) @@ -1310,6 +1322,20 @@ def filter_queryset(self, queryset): except (ValueError, Part.DoesNotExist): pass + # Filter by 'starred' parts? + starred = params.get('starred', None) + + if starred is not None: + starred = str2bool(starred) + starred_parts = [ + star.part.pk for star in self.request.user.starred_parts.all() + ] + + if starred: + queryset = queryset.filter(pk__in=starred_parts) + else: + queryset = queryset.exclude(pk__in=starred_parts) + # Cascade? (Default = True) cascade = str2bool(params.get('cascade', True)) @@ -1380,14 +1406,11 @@ def filter_parametric_data(self, queryset): 'total_in_stock', 'unallocated_stock', 'category', - 'default_location', 'last_stocktake', 'units', 'pricing_min', 'pricing_max', 'pricing_updated', - 'revision', - 'revision_count', ] ordering_field_aliases = { @@ -1423,6 +1446,21 @@ class PartChangeCategory(CreateAPI): class PartDetail(PartMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a single Part object.""" + def destroy(self, request, *args, **kwargs): + """Delete a Part instance via the API. + + - If the part is 'active' it cannot be deleted + - It must first be marked as 'inactive' + """ + part = Part.objects.get(pk=int(kwargs['pk'])) + # Check if inactive + if not part.active: + # Delete + return super(PartDetail, self).destroy(request, *args, **kwargs) + # Return 405 error + message = 'Part is active: cannot delete' + return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED, data=message) + def update(self, request, *args, **kwargs): """Custom update functionality for Part instance. @@ -1549,9 +1587,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class PartParameterTemplateList( - PartParameterTemplateMixin, DataExportViewMixin, ListCreateAPI -): +class PartParameterTemplateList(PartParameterTemplateMixin, ListCreateAPI): """API endpoint for accessing a list of PartParameterTemplate objects. - GET: Return list of PartParameterTemplate objects @@ -1632,7 +1668,7 @@ def filter_part(self, queryset, name, part): return queryset.filter(part=part) -class PartParameterList(PartParameterAPIMixin, DataExportViewMixin, ListCreateAPI): +class PartParameterList(PartParameterAPIMixin, ListCreateAPI): """API endpoint for accessing a list of PartParameter objects. - GET: Return list of PartParameter objects @@ -1750,28 +1786,20 @@ class Meta: # Filters for linked 'part' part_active = rest_filters.BooleanFilter( - label='Assembly part is active', field_name='part__active' + label='Master part is active', field_name='part__active' ) part_trackable = rest_filters.BooleanFilter( - label='Assembly part is trackable', field_name='part__trackable' - ) - - part_testable = rest_filters.BooleanFilter( - label=_('Assembly part is testable'), field_name='part__testable' + label='Master part is trackable', field_name='part__trackable' ) # Filters for linked 'sub_part' sub_part_trackable = rest_filters.BooleanFilter( - label='Component part is trackable', field_name='sub_part__trackable' - ) - - sub_part_testable = rest_filters.BooleanFilter( - label=_('Component part is testable'), field_name='sub_part__testable' + label='Sub part is trackable', field_name='sub_part__trackable' ) sub_part_assembly = rest_filters.BooleanFilter( - label='Component part is an assembly', field_name='sub_part__assembly' + label='Sub part is an assembly', field_name='sub_part__assembly' ) available_stock = rest_filters.BooleanFilter( @@ -1868,7 +1896,7 @@ def get_queryset(self, *args, **kwargs): return queryset -class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): +class BomList(BomMixin, ListCreateDestroyAPIView): """API endpoint for accessing a list of BomItem objects. - GET: Return list of BomItem objects @@ -1876,6 +1904,31 @@ class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): """ filterset_class = BomFilter + + def list(self, request, *args, **kwargs): + """Return serialized list response for this endpoint.""" + queryset = self.filter_queryset(self.get_queryset()) + + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + else: + serializer = self.get_serializer(queryset, many=True) + + data = serializer.data + + """ + Determine the response type based on the request. + a) For HTTP requests (e.g. via the browsable API) return a DRF response + b) For AJAX requests, simply return a JSON rendered response. + """ + if page is not None: + return self.get_paginated_response(data) + elif is_ajax(request): + return JsonResponse(data, safe=False) + return Response(data) + filter_backends = SEARCH_ORDER_FILTER_ALIAS search_fields = [ @@ -1889,7 +1942,6 @@ class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): ] ordering_fields = [ - 'can_build', 'quantity', 'sub_part', 'available_stock', @@ -1897,7 +1949,6 @@ class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): 'inherited', 'optional', 'consumable', - 'validated', 'pricing_min', 'pricing_max', 'pricing_min_total', @@ -1912,12 +1963,6 @@ class BomList(BomMixin, DataExportViewMixin, ListCreateDestroyAPIView): 'pricing_updated': 'sub_part__pricing_data__updated', } - def validate_delete(self, queryset, request) -> None: - """Ensure that there are no 'locked' items.""" - for bom_item in queryset: - # Note: Calling check_part_lock may raise a ValidationError - bom_item.check_part_lock(bom_item.part) - class BomDetail(BomMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a single BomItem object.""" @@ -2085,6 +2130,18 @@ class BomItemSubstituteDetail(RetrieveUpdateDestroyAPI): ), ]), ), + # Base URL for PartAttachment API endpoints + path( + 'attachment/', + include([ + path( + '/', + PartAttachmentDetail.as_view(), + name='api-part-attachment-detail', + ), + path('', PartAttachmentList.as_view(), name='api-part-attachment-list'), + ]), + ), # Base URL for part sale pricing path( 'sale-price/', diff --git a/src/backend/InvenTree/part/bom.py b/src/backend/InvenTree/part/bom.py index d692b66ad9db..88b67d17e043 100644 --- a/src/backend/InvenTree/part/bom.py +++ b/src/backend/InvenTree/part/bom.py @@ -117,14 +117,6 @@ def add_columns_to_dataset(columns, column_size): for bom_item in bom_items: substitutes = BomItemSubstitute.objects.filter(bom_item=bom_item) for s_idx, substitute in enumerate(substitutes): - """Create substitute part IPN column""" - name = f'{_("Substitute IPN")}{s_idx + 1}' - value = substitute.part.IPN - try: - substitute_cols[name].update({col_index: value}) - except KeyError: - substitute_cols[name] = {col_index: value} - """Create substitute part name column""" name = f'{_("Substitute Part")}{s_idx + 1}' value = substitute.part.name diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index 2a35b80714ab..4d247529b9f9 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -40,8 +40,11 @@ import part.models import stock.models -from build.status_codes import BuildStatusGroups -from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups +from InvenTree.status_codes import ( + BuildStatusGroups, + PurchaseOrderStatusGroups, + SalesOrderStatusGroups, +) def annotate_in_production_quantity(reference=''): @@ -296,12 +299,15 @@ def annotate_default_location(reference=''): rght__gt=OuterRef(f'{reference}rght'), level__lte=OuterRef(f'{reference}level'), parent__isnull=False, - default_location__isnull=False, - ).order_by('-level') + ) return Coalesce( F(f'{reference}default_location'), - Subquery(subquery.values('default_location')[:1]), + Subquery( + subquery.order_by('-level') + .filter(default_location__isnull=False) + .values('default_location') + ), Value(None), output_field=IntegerField(), ) diff --git a/src/backend/InvenTree/part/helpers.py b/src/backend/InvenTree/part/helpers.py index fcd24b0f2e39..ab20c795d758 100644 --- a/src/backend/InvenTree/part/helpers.py +++ b/src/backend/InvenTree/part/helpers.py @@ -7,8 +7,6 @@ from jinja2 import Environment, select_autoescape -from common.settings import get_global_setting - logger = logging.getLogger('inventree') @@ -22,10 +20,14 @@ def compile_full_name_template(*args, **kwargs): This function is called whenever the 'PART_NAME_FORMAT' setting is changed. """ + from common.models import InvenTreeSetting + global _part_full_name_template global _part_full_name_template_string - template_string = get_global_setting('PART_NAME_FORMAT', cache=True) + template_string = InvenTreeSetting.get_setting( + 'PART_NAME_FORMAT', backup_value='', cache=True + ) # Skip if the template string has not changed if ( diff --git a/src/backend/InvenTree/part/migrations/0014_partparameter.py b/src/backend/InvenTree/part/migrations/0014_partparameter.py index e9058bbdf6cb..a1eef38ec6e3 100644 --- a/src/backend/InvenTree/part/migrations/0014_partparameter.py +++ b/src/backend/InvenTree/part/migrations/0014_partparameter.py @@ -19,8 +19,5 @@ class Migration(migrations.Migration): ('data', models.CharField(help_text='Parameter Value', max_length=100)), ('part', models.ForeignKey(help_text='Parent Part', on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='part.Part')), ], - options={ - 'verbose_name': 'Part Parameter', - }, ), ] diff --git a/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py b/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py index a05555beb50d..b98135851901 100644 --- a/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py +++ b/src/backend/InvenTree/part/migrations/0015_auto_20190820_0251.py @@ -18,9 +18,6 @@ class Migration(migrations.Migration): ('name', models.CharField(help_text='Parameter Name', max_length=100)), ('units', models.CharField(blank=True, help_text='Parameter Units', max_length=25)), ], - options={ - 'verbose_name': 'Part Parameter Template', - }, ), migrations.RemoveField( model_name='partparameter', diff --git a/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py b/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py index 6b1403b0bebc..29fb25f1e779 100644 --- a/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py +++ b/src/backend/InvenTree/part/migrations/0032_auto_20200322_0453.py @@ -14,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to='attachments'), + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment), ), ] diff --git a/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py b/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py index 4471cf19c5d0..45e270c88c8a 100644 --- a/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py +++ b/src/backend/InvenTree/part/migrations/0040_parttesttemplate.py @@ -19,8 +19,5 @@ class Migration(migrations.Migration): ('required', models.BooleanField(default=True, help_text='Is this test required to pass?', verbose_name='Required')), ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='test_templates', to='part.Part')), ], - options={ - 'verbose_name': 'Part Test Template', - }, ), ] diff --git a/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py b/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py index 8332d353af7f..1d49dcbfac80 100644 --- a/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py +++ b/src/backend/InvenTree/part/migrations/0049_partsellpricebreak.py @@ -24,7 +24,6 @@ class Migration(migrations.Migration): ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='salepricebreaks', to='part.Part')), ], options={ - 'verbose_name': 'Part Sale Price Break', 'unique_together': {('part', 'quantity')}, }, ), diff --git a/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py b/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py index e6742dd6c885..6f2809af12b4 100644 --- a/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py +++ b/src/backend/InvenTree/part/migrations/0053_partcategoryparametertemplate.py @@ -19,9 +19,6 @@ class Migration(migrations.Migration): ('category', models.ForeignKey(help_text='Part Category', on_delete=django.db.models.deletion.CASCADE, related_name='parameter_templates', to='part.PartCategory')), ('parameter_template', models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='part_categories', to='part.PartParameterTemplate')), ], - options={ - 'verbose_name': 'Part Category Parameter Template', - }, ), migrations.AddConstraint( model_name='partcategoryparametertemplate', diff --git a/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py b/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py index 8bf472e4cbd2..911766ad6da4 100644 --- a/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py +++ b/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.currency +import common.settings class Migration(migrations.Migration): @@ -16,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='partsellpricebreak', name='price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), ), migrations.AddField( model_name='partsellpricebreak', name='price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py b/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py index 90cc04f8851e..57943347a156 100644 --- a/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py +++ b/src/backend/InvenTree/part/migrations/0064_auto_20210404_2016.py @@ -98,7 +98,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), migrations.AlterField( model_name='partattachment', diff --git a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py index d8dc4f3c56f9..f0e856173056 100644 --- a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py +++ b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py @@ -2,7 +2,6 @@ import InvenTree.fields import django.core.validators -import common.currency import common.settings from django.db import migrations, models import django.db.models.deletion @@ -21,8 +20,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('quantity', InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Price break quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Quantity')), - ('price_currency', djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3)), - ('price', djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price')), + ('price_currency', djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3)), + ('price', djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price')), ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='internalpricebreaks', to='part.part', verbose_name='Part')), ], options={ diff --git a/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py b/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py index f516846ae252..d484a7adceaa 100644 --- a/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py +++ b/src/backend/InvenTree/part/migrations/0075_auto_20211128_0151.py @@ -20,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='partattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py b/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py index 865153ffe2ae..7d25a1f558f1 100644 --- a/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py +++ b/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py @@ -1,14 +1,13 @@ # Generated by Django 3.2.16 on 2022-11-12 01:28 +import InvenTree.fields +import common.settings import django.core.validators from django.db import migrations, models import django.db.models.deletion import djmoney.models.fields import djmoney.models.validators -import InvenTree.fields -import common.currency -import common.settings class Migration(migrations.Migration): @@ -36,7 +35,7 @@ class Migration(migrations.Migration): name='PartPricing', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('currency', models.CharField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default, help_text='Currency used to cache pricing calculations', max_length=10, verbose_name='Currency')), + ('currency', models.CharField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default, help_text='Currency used to cache pricing calculations', max_length=10, verbose_name='Currency')), ('updated', models.DateTimeField(auto_now=True, help_text='Timestamp of last pricing update', verbose_name='Updated')), ('scheduled_for_update', models.BooleanField(default=False)), ('bom_cost_min_currency', djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3)), diff --git a/src/backend/InvenTree/part/migrations/0123_parttesttemplate_choices.py b/src/backend/InvenTree/part/migrations/0123_parttesttemplate_choices.py deleted file mode 100644 index df2605181214..000000000000 --- a/src/backend/InvenTree/part/migrations/0123_parttesttemplate_choices.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-05 01:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0122_parttesttemplate_enabled'), - ] - - operations = [ - migrations.AddField( - model_name='parttesttemplate', - name='choices', - field=models.CharField(blank=True, help_text='Valid choices for this test (comma-separated)', max_length=5000, verbose_name='Choices'), - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py b/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py deleted file mode 100644 index 5213211aa46e..000000000000 --- a/src/backend/InvenTree/part/migrations/0124_delete_partattachment.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-09 09:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('build', '0050_auto_20240508_0138'), - ('common', '0026_auto_20240608_1238'), - ('company', '0069_company_active'), - ('order', '0099_alter_salesorder_status'), - ('part', '0123_parttesttemplate_choices'), - ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') - ] - - operations = [ - migrations.DeleteModel( - name='PartAttachment', - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0125_part_locked.py b/src/backend/InvenTree/part/migrations/0125_part_locked.py deleted file mode 100644 index a5ac79876c97..000000000000 --- a/src/backend/InvenTree/part/migrations/0125_part_locked.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-27 01:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0124_delete_partattachment'), - ] - - operations = [ - migrations.AddField( - model_name='part', - name='locked', - field=models.BooleanField(default=False, help_text='Locked parts cannot be edited', verbose_name='Locked'), - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0126_part_revision_of.py b/src/backend/InvenTree/part/migrations/0126_part_revision_of.py deleted file mode 100644 index e5324d60a936..000000000000 --- a/src/backend/InvenTree/part/migrations/0126_part_revision_of.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.12 on 2024-07-07 04:42 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0125_part_locked'), - ] - - operations = [ - migrations.AddField( - model_name='part', - name='revision_of', - field=models.ForeignKey(help_text='Is this part a revision of another part?', null=True, blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='revisions', to='part.part', verbose_name='Revision Of'), - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py b/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py deleted file mode 100644 index 0e9e148fb241..000000000000 --- a/src/backend/InvenTree/part/migrations/0127_remove_partcategory_icon_partcategory__icon.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 4.2.11 on 2024-07-20 22:30 - -import common.icons -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0126_part_revision_of'), - ] - - operations = [ - migrations.SeparateDatabaseAndState( - database_operations=[], - state_operations=[ - migrations.RenameField( - model_name='partcategory', - old_name='icon', - new_name='_icon', - ), - migrations.AlterField( - model_name='partcategory', - name='_icon', - field=models.CharField(blank=True, db_column='icon', help_text='Icon (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), - ), - ], - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0128_part_testable.py b/src/backend/InvenTree/part/migrations/0128_part_testable.py deleted file mode 100644 index 094299a8dedf..000000000000 --- a/src/backend/InvenTree/part/migrations/0128_part_testable.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.15 on 2024-08-15 02:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0127_remove_partcategory_icon_partcategory__icon'), - ] - - operations = [ - migrations.AddField( - model_name='part', - name='testable', - field=models.BooleanField(default=False, help_text='Can this part have test results recorded against it?', verbose_name='Testable'), - ), - ] diff --git a/src/backend/InvenTree/part/migrations/0129_auto_20240815_0214.py b/src/backend/InvenTree/part/migrations/0129_auto_20240815_0214.py deleted file mode 100644 index 0f406286a3ba..000000000000 --- a/src/backend/InvenTree/part/migrations/0129_auto_20240815_0214.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 4.2.15 on 2024-08-15 02:14 - -from django.db import migrations - - -def set_testable(apps, schema_editor): - """Set the 'testable' status to True for certain parts. - - Prior to migration part.0128, the 'trackable' attribute - was used to determine if parts could have tests associated with them. - - However, 'trackable' comes with other restrictions - (such as requiring a unique serial number). - - So, we have added a new field 'testable' to the Part model, - which is updated in this migration to match the value of the 'trackable' field. - """ - - Part = apps.get_model('part', 'Part') - - # By default, 'testable' is False - so we only need to update parts marked as 'trackable' - trackable_parts = Part.objects.filter(trackable=True) - - if trackable_parts.count() > 0: - print(f"\nMarking {trackable_parts.count()} Part objects as 'testable'") - trackable_parts.update(testable=True) - - -class Migration(migrations.Migration): - - dependencies = [ - ('part', '0128_part_testable'), - ] - - operations = [ - migrations.RunPython(set_testable, reverse_code=migrations.RunPython.noop) - ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index ccda586f236c..b0e020efa3a7 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -4,12 +4,10 @@ import decimal import hashlib -import inspect import logging -import math import os import re -from datetime import timedelta +from datetime import datetime, timedelta from decimal import Decimal, InvalidOperation from django.conf import settings @@ -35,7 +33,6 @@ from stdimage.models import StdImageField from taggit.managers import TaggableManager -import common.currency import common.models import common.settings import InvenTree.conversion @@ -46,24 +43,22 @@ import InvenTree.tasks import part.helpers as part_helpers import part.settings as part_settings -import report.mixins import users.models from build import models as BuildModels -from build.status_codes import BuildStatusGroups -from common.currency import currency_code_default -from common.icons import validate_icon -from common.settings import get_global_setting +from common.models import InvenTreeSetting +from common.settings import currency_code_default from company.models import SupplierPart from InvenTree import helpers, validators from InvenTree.fields import InvenTreeURLField from InvenTree.helpers import decimal2money, decimal2string, normalize, str2bool -from order import models as OrderModels -from order.status_codes import ( +from InvenTree.status_codes import ( + BuildStatusGroups, PurchaseOrderStatus, PurchaseOrderStatusGroups, SalesOrderStatus, SalesOrderStatusGroups, ) +from order import models as OrderModels from stock import models as StockModels logger = logging.getLogger('inventree') @@ -81,8 +76,6 @@ class PartCategory(InvenTree.models.InvenTreeTree): ITEM_PARENT_KEY = 'category' - EXTRA_PATH_FIELDS = ['icon'] - class Meta: """Metaclass defines extra model properties.""" @@ -126,37 +119,13 @@ def delete(self, *args, **kwargs): help_text=_('Default keywords for parts in this category'), ) - _icon = models.CharField( + icon = models.CharField( blank=True, max_length=100, verbose_name=_('Icon'), help_text=_('Icon (optional)'), - validators=[validate_icon], - db_column='icon', ) - @property - def icon(self): - """Return the icon associated with this PartCategory or the default icon.""" - if self._icon: - return self._icon - - if default_icon := get_global_setting('PART_CATEGORY_DEFAULT_ICON', cache=True): - return default_icon - - return '' - - @icon.setter - def icon(self, value): - """Setter for icon field.""" - default_icon = get_global_setting('PART_CATEGORY_DEFAULT_ICON', cache=True) - - # if icon is not defined previously and new value is default icon, do not save it - if not self._icon and value == default_icon: - return - - self._icon = value - @staticmethod def get_api_url(): """Return the API url associated with the PartCategory model.""" @@ -312,7 +281,7 @@ def is_starred_by(self, user, **kwargs): """Returns True if the specified user subscribes to this category.""" return user in self.get_subscribers(**kwargs) - def set_starred(self, user, status: bool) -> None: + def set_starred(self, user, status): """Set the "subscription" status of this PartCategory against the specified user.""" if not user: return @@ -369,10 +338,8 @@ def get_queryset(self): @cleanup.ignore class Part( - InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, - report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, MPTTModel, @@ -404,9 +371,7 @@ class Part( component: Can this part be used to make other parts? purchaseable: Can this part be purchased from suppliers? trackable: Trackable parts can have unique serial numbers assigned, etc, etc - testable: Testable parts can have test results recorded against their stock items active: Is this part active? Parts are deactivated instead of being deleted - locked: This part is locked and cannot be edited virtual: Is this part "virtual"? e.g. a software product or similar notes: Additional notes field for this part creation_date: Date that this part was added to the database @@ -444,33 +409,8 @@ def api_instance_filters(self): """Return API query filters for limiting field results against this instance.""" return {'variant_of': {'exclude_tree': self.pk}} - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'PA' - - def report_context(self): - """Return custom report context information.""" - return { - 'bom_items': self.get_bom_items(), - 'category': self.category, - 'description': self.description, - 'IPN': self.IPN, - 'name': self.name, - 'parameters': self.parameters_map(), - 'part': self, - 'qr_data': self.barcode, - 'qr_url': self.get_absolute_url(), - 'revision': self.revision, - 'test_template_list': self.getTestTemplates(), - 'test_templates': self.getTestTemplateMap(), - } - def get_context_data(self, request, **kwargs): - """Return some useful context data about this part for template rendering. - - TODO: 2024-04-21 - Remove this method once the legacy UI code is removed - """ + """Return some useful context data about this part for template rendering.""" context = {} context['disabled'] = not self.active @@ -508,28 +448,6 @@ def get_context_data(self, request, **kwargs): return context - def delete(self, **kwargs): - """Custom delete method for the Part model. - - Prevents deletion of a Part if any of the following conditions are met: - - - The part is still active - - The part is used in a BOM for a different part. - """ - if self.locked: - raise ValidationError(_('Cannot delete this part as it is locked')) - - if self.active: - raise ValidationError(_('Cannot delete this part as it is still active')) - - if not get_global_setting('PART_ALLOW_DELETE_FROM_ASSEMBLY', cache=False): - if BomItem.objects.filter(sub_part=self).exists(): - raise ValidationError( - _('Cannot delete this part as it is used in an assembly') - ) - - super().delete() - def save(self, *args, **kwargs): """Overrides the save function for the Part model. @@ -687,7 +605,9 @@ def validate_ipn(self, raise_error=True): raise ValidationError({'IPN': exc.message}) # If we get to here, none of the plugins have raised an error - pattern = get_global_setting('PART_IPN_REGEX', '', create=False).strip() + pattern = common.models.InvenTreeSetting.get_setting( + 'PART_IPN_REGEX', '', create=False + ).strip() if pattern: match = re.search(pattern, self.IPN) @@ -695,49 +615,6 @@ def validate_ipn(self, raise_error=True): if match is None: raise ValidationError(_(f'IPN must match regex pattern {pattern}')) - def validate_revision(self): - """Check the 'revision' and 'revision_of' fields.""" - # Part cannot be a revision of itself - if self.revision_of: - if self.revision_of == self: - raise ValidationError({ - 'revision_of': _('Part cannot be a revision of itself') - }) - - # Part cannot be a revision of a part which is itself a revision - if self.revision_of.revision_of: - raise ValidationError({ - 'revision_of': _( - 'Cannot make a revision of a part which is already a revision' - ) - }) - - # If this part is a revision, it must have a revision code - if not self.revision: - raise ValidationError({ - 'revision': _('Revision code must be specified') - }) - - if get_global_setting('PART_REVISION_ASSEMBLY_ONLY'): - if not self.assembly or not self.revision_of.assembly: - raise ValidationError({ - 'revision_of': _( - 'Revisions are only allowed for assembly parts' - ) - }) - - # Cannot have a revision of a "template" part - if self.revision_of.is_template: - raise ValidationError({ - 'revision_of': _('Cannot make a revision of a template part') - }) - - # parent part must point to the same template (via variant_of) - if self.variant_of != self.revision_of.variant_of: - raise ValidationError({ - 'revision_of': _('Parent part must point to the same template') - }) - def validate_serial_number( self, serial: str, @@ -776,22 +653,7 @@ def validate_serial_number( for plugin in registry.with_mixin('validation'): # Run the serial number through each custom validator # If the plugin returns 'True' we will skip any subsequent validation - - result = False - - if hasattr(plugin, 'validate_serial_number'): - signature = inspect.signature(plugin.validate_serial_number) - - if 'stock_item' in signature.parameters: - # 2024-08-21: New method signature accepts a 'stock_item' parameter - result = plugin.validate_serial_number( - serial, self, stock_item=stock_item - ) - else: - # Old method signature - does not accept a 'stock_item' parameter - result = plugin.validate_serial_number(serial, self) - - if result is True: + if plugin.validate_serial_number(serial, self): return True except ValidationError as exc: if raise_error: @@ -813,7 +675,9 @@ def validate_serial_number( from part.models import Part from stock.models import StockItem - if get_global_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False): + if common.models.InvenTreeSetting.get_setting( + 'SERIAL_NUMBER_GLOBALLY_UNIQUE', False + ): # Serial number must be unique across *all* parts parts = Part.objects.all() else: @@ -867,7 +731,9 @@ def get_latest_serial_number(self): ) # Generate a query for any stock items for this part variant tree with non-empty serial numbers - if get_global_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False): + if common.models.InvenTreeSetting.get_setting( + 'SERIAL_NUMBER_GLOBALLY_UNIQUE', False + ): # Serial numbers are unique across all parts pass else: @@ -921,7 +787,9 @@ def validate_unique(self, exclude=None): super().validate_unique(exclude) # User can decide whether duplicate IPN (Internal Part Number) values are allowed - allow_duplicate_ipn = get_global_setting('PART_ALLOW_DUPLICATE_IPN') + allow_duplicate_ipn = common.models.InvenTreeSetting.get_setting( + 'PART_ALLOW_DUPLICATE_IPN' + ) # Raise an error if an IPN is set, and it is a duplicate if self.IPN and not allow_duplicate_ipn: @@ -933,24 +801,15 @@ def validate_unique(self, exclude=None): 'IPN': _('Duplicate IPN not allowed in part settings') }) - if self.revision_of and self.revision: - if ( - Part.objects.exclude(pk=self.pk) - .filter(revision_of=self.revision_of, revision=self.revision) - .exists() - ): - raise ValidationError(_('Duplicate part revision already exists.')) - # Ensure unique across (Name, revision, IPN) (as specified) - if self.revision or self.IPN: - if ( - Part.objects.exclude(pk=self.pk) - .filter(name=self.name, revision=self.revision, IPN=self.IPN) - .exists() - ): - raise ValidationError( - _('Part with this Name, IPN and Revision already exists.') - ) + if ( + Part.objects.exclude(pk=self.pk) + .filter(name=self.name, revision=self.revision, IPN=self.IPN) + .exists() + ): + raise ValidationError( + _('Part with this Name, IPN and Revision already exists.') + ) def clean(self): """Perform cleaning operations for the Part model. @@ -967,9 +826,6 @@ def clean(self): 'category': _('Parts cannot be assigned to structural part categories!') }) - # Check the 'revision' and 'revision_of' fields - self.validate_revision() - super().clean() # Strip IPN field @@ -1057,16 +913,6 @@ def ensure_trackable(self): verbose_name=_('Revision'), ) - revision_of = models.ForeignKey( - 'part.Part', - related_name='revisions', - null=True, - blank=True, - on_delete=models.SET_NULL, - help_text=_('Is this part a revision of another part?'), - verbose_name=_('Revision Of'), - ) - link = InvenTreeURLField( blank=True, null=True, @@ -1183,12 +1029,6 @@ def get_default_supplier(self): help_text=_('Does this part have tracking for unique items?'), ) - testable = models.BooleanField( - default=False, - verbose_name=_('Testable'), - help_text=_('Can this part have test results recorded against it?'), - ) - purchaseable = models.BooleanField( default=part_settings.part_purchaseable_default, verbose_name=_('Purchaseable'), @@ -1205,12 +1045,6 @@ def get_default_supplier(self): default=True, verbose_name=_('Active'), help_text=_('Is this part active?') ) - locked = models.BooleanField( - default=False, - verbose_name=_('Locked'), - help_text=_('Locked parts cannot be edited'), - ) - virtual = models.BooleanField( default=part_settings.part_virtual_default, verbose_name=_('Virtual'), @@ -2141,7 +1975,7 @@ def get_price_range( help_text=_('Sell multiple'), ) - get_price = common.currency.get_price + get_price = common.models.get_price @property def has_price_breaks(self): @@ -2173,7 +2007,7 @@ def add_price_break(self, quantity, price): def get_internal_price(self, quantity, moq=True, multiples=True, currency=None): """Return the internal price of this Part at the specified quantity.""" - return common.currency.get_price( + return common.models.get_price( self, quantity, moq, multiples, currency, break_name='internal_price_breaks' ) @@ -2339,6 +2173,24 @@ def getRequiredTests(self, include_parent=True, enabled=True): required=True, enabled=enabled, include_parent=include_parent ) + @property + def attachment_count(self): + """Count the number of attachments for this part. + + If the part is a variant of a template part, + include the number of attachments for the template part. + """ + return self.part_attachments.count() + + @property + def part_attachments(self): + """Return *all* attachments for this part, potentially including attachments for template parts above this one.""" + ancestors = self.get_ancestors(include_self=True) + + attachments = PartAttachment.objects.filter(part__in=ancestors) + + return attachments + def sales_orders(self): """Return a list of sales orders which reference this part.""" orders = [] @@ -2751,7 +2603,7 @@ def update_bom_cost(self, save=True): # Short circuit - no further operations required return - currency_code = common.currency.currency_code_default() + currency_code = common.settings.currency_code_default() cumulative_min = Money(0, currency_code) cumulative_max = Money(0, currency_code) @@ -2853,11 +2705,15 @@ def update_purchase_cost(self, save=True): purchase_max = purchase_cost # Also check if manual stock item pricing is included - if get_global_setting('PRICING_USE_STOCK_PRICING', True): + if InvenTreeSetting.get_setting('PRICING_USE_STOCK_PRICING', True, cache=False): items = self.part.stock_items.all() # Limit to stock items updated within a certain window - days = int(get_global_setting('PRICING_STOCK_ITEM_AGE_DAYS', 0)) + days = int( + InvenTreeSetting.get_setting( + 'PRICING_STOCK_ITEM_AGE_DAYS', 0, cache=False + ) + ) if days > 0: date_threshold = InvenTree.helpers.current_date() - timedelta(days=days) @@ -2893,7 +2749,7 @@ def update_internal_cost(self, save=True): min_int_cost = None max_int_cost = None - if get_global_setting('PART_INTERNAL_PRICE', False): + if InvenTreeSetting.get_setting('PART_INTERNAL_PRICE', False, cache=False): # Only calculate internal pricing if internal pricing is enabled for pb in self.part.internalpricebreaks.all(): cost = self.convert(pb.price) @@ -2969,7 +2825,7 @@ def update_variant_cost(self, save=True): variant_min = None variant_max = None - active_only = get_global_setting('PRICING_ACTIVE_VARIANTS', False) + active_only = InvenTreeSetting.get_setting('PRICING_ACTIVE_VARIANTS', False) if self.part.is_template: variants = self.part.get_descendants(include_self=False) @@ -3011,11 +2867,13 @@ def update_overall_cost(self): max_costs = [self.bom_cost_max, self.purchase_cost_max, self.internal_cost_max] - purchase_history_override = get_global_setting( - 'PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER', False + purchase_history_override = InvenTreeSetting.get_setting( + 'PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER', False, cache=False ) - if get_global_setting('PRICING_USE_SUPPLIER_PRICING', True): + if InvenTreeSetting.get_setting( + 'PRICING_USE_SUPPLIER_PRICING', True, cache=False + ): # Add supplier pricing data, *unless* historical pricing information should override if self.purchase_cost_min is None or not purchase_history_override: min_costs.append(self.supplier_price_min) @@ -3023,7 +2881,9 @@ def update_overall_cost(self): if self.purchase_cost_max is None or not purchase_history_override: max_costs.append(self.supplier_price_max) - if get_global_setting('PRICING_USE_VARIANT_PRICING', True): + if InvenTreeSetting.get_setting( + 'PRICING_USE_VARIANT_PRICING', True, cache=False + ): # Include variant pricing in overall calculations min_costs.append(self.variant_cost_min) max_costs.append(self.variant_cost_max) @@ -3050,7 +2910,9 @@ def update_overall_cost(self): if overall_max is None or cost > overall_max: overall_max = cost - if get_global_setting('PART_BOM_USE_INTERNAL_PRICE', False): + if InvenTreeSetting.get_setting( + 'PART_BOM_USE_INTERNAL_PRICE', False, cache=False + ): # Check if internal pricing should override other pricing if self.internal_cost_min is not None: overall_min = self.internal_cost_min @@ -3130,7 +2992,7 @@ def update_sale_cost(self, save=True): max_length=10, verbose_name=_('Currency'), help_text=_('Currency used to cache pricing calculations'), - choices=common.currency.currency_code_mappings(), + choices=common.settings.currency_code_mappings(), ) scheduled_for_update = models.BooleanField(default=False) @@ -3412,13 +3274,32 @@ def get_absolute_url(self): ) +class PartAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a Part object.""" + + @staticmethod + def get_api_url(): + """Return the list API endpoint URL associated with the PartAttachment model.""" + return reverse('api-part-attachment-list') + + def getSubdir(self): + """Returns the media subdirectory where part attachments are stored.""" + return os.path.join('part_files', str(self.part.id)) + + part = models.ForeignKey( + Part, + on_delete=models.CASCADE, + verbose_name=_('Part'), + related_name='attachments', + ) + + class PartSellPriceBreak(common.models.PriceBreak): """Represents a price break for selling this part.""" class Meta: """Metaclass providing extra model definition.""" - verbose_name = _('Part Sale Price Break') unique_together = ('part', 'quantity') @staticmethod @@ -3527,11 +3408,6 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): run on the model (refer to the validate_unique function). """ - class Meta: - """Metaclass options for the PartTestTemplate model.""" - - verbose_name = _('Part Test Template') - def __str__(self): """Format a string representation of this PartTestTemplate.""" return ' | '.join([self.part.name, self.test_name]) @@ -3560,27 +3436,6 @@ def clean(self): ) }) - # Check that 'choices' are in fact valid - if self.choices is None: - self.choices = '' - else: - self.choices = str(self.choices).strip() - - if self.choices: - choice_set = set() - - for choice in self.choices.split(','): - choice = choice.strip() - - # Ignore empty choices - if not choice: - continue - - if choice in choice_set: - raise ValidationError({'choices': _('Choices must be unique')}) - - choice_set.add(choice) - self.validate_unique() super().clean() @@ -3659,20 +3514,6 @@ def validate_unique(self, exclude=None): ), ) - choices = models.CharField( - max_length=5000, - verbose_name=_('Choices'), - help_text=_('Valid choices for this test (comma-separated)'), - blank=True, - ) - - def get_choices(self): - """Return a list of valid choices for this test template.""" - if not self.choices: - return [] - - return [x.strip() for x in self.choices.split(',') if x.strip()] - def validate_template_name(name): """Placeholder for legacy function used in migrations.""" @@ -3691,11 +3532,6 @@ class PartParameterTemplate(InvenTree.models.InvenTreeMetadataModel): choices: List of valid choices for the parameter [string] """ - class Meta: - """Metaclass options for the PartParameterTemplate model.""" - - verbose_name = _('Part Parameter Template') - @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the PartParameterTemplate model.""" @@ -3840,7 +3676,6 @@ class PartParameter(InvenTree.models.InvenTreeMetadataModel): class Meta: """Metaclass providing extra model definition.""" - verbose_name = _('Part Parameter') # Prevent multiple instances of a parameter for a single part unique_together = ('part', 'template') @@ -3853,29 +3688,11 @@ def __str__(self): """String representation of a PartParameter (used in the admin interface).""" return f'{self.part.full_name} : {self.template.name} = {self.data} ({self.template.units})' - def delete(self): - """Custom delete handler for the PartParameter model. - - - Check if the parameter can be deleted - """ - self.check_part_lock() - super().delete() - - def check_part_lock(self): - """Check if the referenced part is locked.""" - # TODO: Potentially control this behaviour via a global setting - - if self.part.locked: - raise ValidationError(_('Parameter cannot be modified - part is locked')) - def save(self, *args, **kwargs): """Custom save method for the PartParameter model.""" # Validate the PartParameter before saving self.calculate_numeric_value() - # Check if the part is locked - self.check_part_lock() - # Convert 'boolean' values to 'True' / 'False' if self.template.checkbox: self.data = str2bool(self.data) @@ -3888,7 +3705,7 @@ def clean(self): super().clean() # Validate the parameter data against the template units - if get_global_setting( + if InvenTreeSetting.get_setting( 'PART_PARAMETER_ENFORCE_UNITS', True, cache=False, create=False ): if self.template.units: @@ -3940,12 +3757,6 @@ def calculate_numeric_value(self): except ValueError: self.data_numeric = None - if self.data_numeric is not None and type(self.data_numeric) is float: - # Prevent out of range numbers, etc - # Ref: https://github.com/inventree/InvenTree/issues/7593 - if math.isnan(self.data_numeric) or math.isinf(self.data_numeric): - self.data_numeric = None - part = models.ForeignKey( Part, on_delete=models.CASCADE, @@ -4007,16 +3818,9 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel): category """ - @staticmethod - def get_api_url(): - """Return the API endpoint URL associated with the PartCategoryParameterTemplate model.""" - return reverse('api-part-category-parameter-list') - class Meta: """Metaclass providing extra model definition.""" - verbose_name = _('Part Category Parameter Template') - constraints = [ UniqueConstraint( fields=['category', 'parameter_template'], @@ -4043,7 +3847,7 @@ def clean(self): if ( self.default_value - and get_global_setting( + and InvenTreeSetting.get_setting( 'PART_PARAMETER_ENFORCE_UNITS', True, cache=False, create=False ) and self.parameter_template.units @@ -4191,53 +3995,15 @@ def get_stock_filter(self): """ return Q(part__in=self.get_valid_parts_for_allocation()) - def delete(self): - """Check if this item can be deleted.""" - self.check_part_lock(self.part) - super().delete() - def save(self, *args, **kwargs): """Enforce 'clean' operation when saving a BomItem instance.""" self.clean() - self.check_part_lock(self.part) - - # Check if the part was changed - deltas = self.get_field_deltas() - - if 'part' in deltas: - if old_part := deltas['part'].get('old', None): - self.check_part_lock(old_part) - # Update the 'validated' field based on checksum calculation self.validated = self.is_line_valid super().save(*args, **kwargs) - def check_part_lock(self, assembly): - """When editing or deleting a BOM item, check if the assembly is locked. - - If locked, raise an exception. - - Arguments: - assembly: The assembly part - - Raises: - ValidationError: If the assembly is locked - """ - # TODO: Perhaps control this with a global setting? - - if assembly.locked: - raise ValidationError(_('BOM item cannot be modified - assembly is locked')) - - # If this BOM item is inherited, check all variants of the assembly - if self.inherited: - for part in assembly.get_descendants(include_self=False): - if part.locked: - raise ValidationError( - _('BOM item cannot be modified - variant assembly is locked') - ) - # A link to the parent part # Each part will get a reverse lookup field 'bom_items' part = models.ForeignKey( @@ -4490,7 +4256,9 @@ def get_required_quantity(self, build_quantity): def price_range(self, internal=False): """Return the price-range for this BOM item.""" # get internal price setting - use_internal = get_global_setting('PART_BOM_USE_INTERNAL_PRICE', False) + use_internal = common.models.InvenTreeSetting.get_setting( + 'PART_BOM_USE_INTERNAL_PRICE', False, cache=False + ) prange = self.sub_part.get_price_range( self.quantity, internal=use_internal and internal ) @@ -4532,8 +4300,7 @@ def update_pricing_after_edit(sender, instance, created, **kwargs): """Callback function when a part price break is created or updated.""" # Update part pricing *unless* we are importing data if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): - if instance.part: - instance.part.schedule_pricing_update(create=True) + instance.part.schedule_pricing_update(create=True) @receiver(post_delete, sender=BomItem, dispatch_uid='post_delete_bom_item') @@ -4549,8 +4316,7 @@ def update_pricing_after_delete(sender, instance, **kwargs): """Callback function when a part price break is deleted.""" # Update part pricing *unless* we are importing data if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): - if instance.part: - instance.part.schedule_pricing_update(create=False) + instance.part.schedule_pricing_update(create=False) class BomItemSubstitute(InvenTree.models.InvenTreeMetadataModel): diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index fac5f7cc1412..7bed55d416e0 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -21,27 +21,26 @@ from sql_util.utils import SubqueryCount, SubquerySum from taggit.serializers import TagListSerializerField -import common.currency +import common.models import common.settings import company.models import InvenTree.helpers import InvenTree.serializers import InvenTree.status -import part.filters as part_filters +import part.filters import part.helpers as part_helpers import part.stocktake import part.tasks import stock.models import users.models -from build.status_codes import BuildStatusGroups -from importer.mixins import DataImportExportSerializerMixin -from importer.registry import register_importer +from InvenTree.status_codes import BuildStatusGroups from InvenTree.tasks import offload_task from .models import ( BomItem, BomItemSubstitute, Part, + PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, @@ -59,10 +58,7 @@ logger = logging.getLogger('inventree') -@register_importer() -class CategorySerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for PartCategory.""" class Meta: @@ -87,7 +83,6 @@ class Meta: 'icon', 'parent_default_location', ] - read_only_fields = ['level', 'pathstring'] def __init__(self, *args, **kwargs): """Optionally add or remove extra fields.""" @@ -96,7 +91,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not path_detail: - self.fields.pop('path', None) + self.fields.pop('path') def get_starred(self, category) -> bool: """Return True if the category is directly "starred" by the current user.""" @@ -107,24 +102,16 @@ def annotate_queryset(queryset): """Annotate extra information to the queryset.""" # Annotate the number of 'parts' which exist in each category (including subcategories!) queryset = queryset.annotate( - part_count=part_filters.annotate_category_parts(), - subcategories=part_filters.annotate_sub_categories(), + part_count=part.filters.annotate_category_parts(), + subcategories=part.filters.annotate_sub_categories(), ) queryset = queryset.annotate( - parent_default_location=part_filters.annotate_default_location('parent__') + parent_default_location=part.filters.annotate_default_location('parent__') ) return queryset - parent = serializers.PrimaryKeyRelatedField( - queryset=PartCategory.objects.all(), - required=False, - allow_null=True, - label=_('Parent Category'), - help_text=_('Parent part category'), - ) - url = serializers.CharField(source='get_absolute_url', read_only=True) part_count = serializers.IntegerField(read_only=True, label=_('Parts')) @@ -139,10 +126,6 @@ def annotate_queryset(queryset): child=serializers.DictField(), source='get_path', read_only=True ) - icon = serializers.CharField( - required=False, allow_blank=True, help_text=_('Icon (optional)'), max_length=100 - ) - parent_default_location = serializers.IntegerField(read_only=True) @@ -157,20 +140,26 @@ class Meta: subcategories = serializers.IntegerField(label=_('Subcategories'), read_only=True) - icon = serializers.CharField( - required=False, allow_blank=True, help_text=_('Icon (optional)'), max_length=100 - ) - @staticmethod def annotate_queryset(queryset): """Annotate the queryset with the number of subcategories.""" - return queryset.annotate(subcategories=part_filters.annotate_sub_categories()) + return queryset.annotate(subcategories=part.filters.annotate_sub_categories()) -@register_importer() -class PartTestTemplateSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class PartAttachmentSerializer(InvenTree.serializers.InvenTreeAttachmentSerializer): + """Serializer for the PartAttachment class.""" + + class Meta: + """Metaclass defining serializer fields.""" + + model = PartAttachment + + fields = InvenTree.serializers.InvenTreeAttachmentSerializer.attachment_fields([ + 'part' + ]) + + +class PartTestTemplateSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for the PartTestTemplate class.""" class Meta: @@ -189,7 +178,6 @@ class Meta: 'requires_value', 'requires_attachment', 'results', - 'choices', ] key = serializers.CharField(read_only=True) @@ -205,10 +193,7 @@ def annotate_queryset(queryset): return queryset.annotate(results=SubqueryCount('test_results')) -@register_importer() -class PartSalePriceSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class PartSalePriceSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for sale prices for Part model.""" class Meta: @@ -273,10 +258,7 @@ def validate_image(self, value): image = InvenTree.serializers.InvenTreeAttachmentSerializerField(required=True) -@register_importer() -class PartParameterTemplateSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class PartParameterTemplateSerializer(InvenTree.serializers.InvenTreeModelSerializer): """JSON serializer for the PartParameterTemplate model.""" class Meta: @@ -317,13 +299,10 @@ class Meta: 'image', 'thumbnail', 'active', - 'locked', 'assembly', - 'component', 'is_template', 'purchaseable', 'salable', - 'testable', 'trackable', 'virtual', 'units', @@ -340,27 +319,14 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not pricing: - self.fields.pop('pricing_min', None) - self.fields.pop('pricing_max', None) + self.fields.pop('pricing_min') + self.fields.pop('pricing_max') category_default_location = serializers.IntegerField(read_only=True) image = InvenTree.serializers.InvenTreeImageSerializerField(read_only=True) thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) - IPN = serializers.CharField( - required=False, - allow_null=True, - help_text=_('Internal Part Number'), - max_length=100, - ) - revision = serializers.CharField( - required=False, - allow_null=True, - help_text=_('Part revision or version number'), - max_length=100, - ) - # Pricing fields pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( source='pricing_data.overall_min', allow_null=True, read_only=True @@ -370,10 +336,7 @@ def __init__(self, *args, **kwargs): ) -@register_importer() -class PartParameterSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class PartParameterSerializer(InvenTree.serializers.InvenTreeModelSerializer): """JSON serializers for the PartParameter model.""" class Meta: @@ -401,10 +364,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if not template_detail: - self.fields.pop('template_detail', None) + self.fields.pop('template_detail') part_detail = PartBriefSerializer(source='part', many=False, read_only=True) template_detail = PartParameterTemplateSerializer( @@ -469,11 +432,6 @@ class DuplicatePartSerializer(serializers.Serializer): The fields in this serializer control how the Part is duplicated. """ - class Meta: - """Metaclass options.""" - - fields = ['part', 'copy_image', 'copy_bom', 'copy_parameters', 'copy_notes'] - part = serializers.PrimaryKeyRelatedField( queryset=Part.objects.all(), label=_('Original Part'), @@ -513,11 +471,6 @@ class Meta: class InitialStockSerializer(serializers.Serializer): """Serializer for creating initial stock quantity.""" - class Meta: - """Metaclass options.""" - - fields = ['quantity', 'location'] - quantity = serializers.DecimalField( max_digits=15, decimal_places=5, @@ -541,11 +494,6 @@ class Meta: class InitialSupplierSerializer(serializers.Serializer): """Serializer for adding initial supplier / manufacturer information.""" - class Meta: - """Metaclass options.""" - - fields = ['supplier', 'sku', 'manufacturer', 'mpn'] - supplier = serializers.PrimaryKeyRelatedField( queryset=company.models.Company.objects.all(), label=_('Supplier'), @@ -615,25 +563,7 @@ def validate(self, data): return data -class DefaultLocationSerializer(InvenTree.serializers.InvenTreeModelSerializer): - """Brief serializer for a StockLocation object. - - Defined here, rather than stock.serializers, to negotiate circular imports. - """ - - class Meta: - """Metaclass options.""" - - import stock.models as stock_models - - model = stock_models.StockLocation - fields = ['pk', 'name', 'pathstring'] - - -@register_importer() class PartSerializer( - DataImportExportSerializerMixin, - InvenTree.serializers.NotesFieldMixin, InvenTree.serializers.RemoteImageMixin, InvenTree.serializers.InvenTreeTagModelSerializer, ): @@ -642,8 +572,6 @@ class PartSerializer( Used when displaying all details of a single component. """ - import_exclude_fields = ['duplicate'] - class Meta: """Metaclass defining serializer fields.""" @@ -656,13 +584,11 @@ class Meta: 'category', 'category_detail', 'category_path', - 'category_name', 'component', 'creation_date', 'creation_user', 'default_expiry', 'default_location', - 'default_location_detail', 'default_supplier', 'description', 'full_name', @@ -674,7 +600,6 @@ class Meta: 'keywords', 'last_stocktake', 'link', - 'locked', 'minimum_stock', 'name', 'notes', @@ -682,12 +607,9 @@ class Meta: 'pk', 'purchaseable', 'revision', - 'revision_of', - 'revision_count', 'salable', 'starred', 'thumbnail', - 'testable', 'trackable', 'units', 'variant_of', @@ -730,7 +652,6 @@ def __init__(self, *args, **kwargs): """ self.starred_parts = kwargs.pop('starred_parts', []) category_detail = kwargs.pop('category_detail', False) - location_detail = kwargs.pop('location_detail', False) parameters = kwargs.pop('parameters', False) create = kwargs.pop('create', False) pricing = kwargs.pop('pricing', True) @@ -739,16 +660,13 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not category_detail: - self.fields.pop('category_detail', None) - - if not location_detail: - self.fields.pop('default_location_detail', None) + self.fields.pop('category_detail') if not parameters: - self.fields.pop('parameters', None) + self.fields.pop('parameters') if not path_detail: - self.fields.pop('category_path', None) + self.fields.pop('category_path') if not create: # These fields are only used for the LIST API endpoint @@ -756,12 +674,12 @@ def __init__(self, *args, **kwargs): # Fields required for certain operations, but are not part of the model if f in ['remote_image', 'existing_image']: continue - self.fields.pop(f, None) + self.fields.pop(f) if not pricing: - self.fields.pop('pricing_min', None) - self.fields.pop('pricing_max', None) - self.fields.pop('pricing_updated', None) + self.fields.pop('pricing_min') + self.fields.pop('pricing_max') + self.fields.pop('pricing_updated') def get_api_url(self): """Return the API url associated with this serializer.""" @@ -787,19 +705,14 @@ def annotate_queryset(queryset): Performing database queries as efficiently as possible, to reduce database trips. """ - queryset = queryset.prefetch_related('category', 'default_location') - - # Annotate with the total number of revisions - queryset = queryset.annotate(revision_count=SubqueryCount('revisions')) - # Annotate with the total number of stock items queryset = queryset.annotate(stock_item_count=SubqueryCount('stock_items')) # Annotate with the total variant stock quantity - variant_query = part_filters.variant_stock_query() + variant_query = part.filters.variant_stock_query() queryset = queryset.annotate( - variant_stock=part_filters.annotate_variant_quantity( + variant_stock=part.filters.annotate_variant_quantity( variant_query, reference='quantity' ) ) @@ -829,10 +742,10 @@ def annotate_queryset(queryset): # TODO: Note that BomItemSerializer and BuildLineSerializer have very similar code queryset = queryset.annotate( - ordering=part_filters.annotate_on_order_quantity(), - in_stock=part_filters.annotate_total_stock(), - allocated_to_sales_orders=part_filters.annotate_sales_order_allocations(), - allocated_to_build_orders=part_filters.annotate_build_order_allocations(), + ordering=part.filters.annotate_on_order_quantity(), + in_stock=part.filters.annotate_total_stock(), + allocated_to_sales_orders=part.filters.annotate_sales_order_allocations(), + allocated_to_build_orders=part.filters.annotate_build_order_allocations(), ) # Annotate the queryset with the 'total_in_stock' quantity @@ -844,7 +757,7 @@ def annotate_queryset(queryset): ) queryset = queryset.annotate( - external_stock=part_filters.annotate_total_stock( + external_stock=part.filters.annotate_total_stock( filter=Q(location__external=True) ) ) @@ -862,12 +775,12 @@ def annotate_queryset(queryset): # Annotate with the total 'required for builds' quantity queryset = queryset.annotate( - required_for_build_orders=part_filters.annotate_build_order_requirements(), - required_for_sales_orders=part_filters.annotate_sales_order_requirements(), + required_for_build_orders=part.filters.annotate_build_order_requirements(), + required_for_sales_orders=part.filters.annotate_sales_order_requirements(), ) queryset = queryset.annotate( - category_default_location=part_filters.annotate_default_location( + category_default_location=part.filters.annotate_default_location( 'category__' ) ) @@ -885,14 +798,6 @@ def get_starred(self, part) -> bool: child=serializers.DictField(), source='category.get_path', read_only=True ) - default_location_detail = DefaultLocationSerializer( - source='default_location', many=False, read_only=True - ) - - category_name = serializers.CharField( - source='category.name', read_only=True, label=_('Category Name') - ) - responsible = serializers.PrimaryKeyRelatedField( queryset=users.models.Owner.objects.all(), required=False, @@ -904,24 +809,15 @@ def get_starred(self, part) -> bool: queryset=users.models.User.objects.all(), required=False, allow_null=True ) - IPN = serializers.CharField( - required=False, default='', allow_blank=True, label=_('IPN'), max_length=100 - ) - - revision = serializers.CharField( - required=False, default='', allow_blank=True, max_length=100 - ) - # Annotated fields allocated_to_build_orders = serializers.FloatField(read_only=True) allocated_to_sales_orders = serializers.FloatField(read_only=True) - building = serializers.FloatField(read_only=True, label=_('Building')) - in_stock = serializers.FloatField(read_only=True, label=_('In Stock')) + building = serializers.FloatField(read_only=True) + in_stock = serializers.FloatField(read_only=True) ordering = serializers.FloatField(read_only=True, label=_('On Order')) required_for_build_orders = serializers.IntegerField(read_only=True) required_for_sales_orders = serializers.IntegerField(read_only=True) stock_item_count = serializers.IntegerField(read_only=True, label=_('Stock Items')) - revision_count = serializers.IntegerField(read_only=True, label=_('Revisions')) suppliers = serializers.IntegerField(read_only=True, label=_('Suppliers')) total_in_stock = serializers.FloatField(read_only=True, label=_('Total Stock')) external_stock = serializers.FloatField(read_only=True, label=_('External Stock')) @@ -940,9 +836,7 @@ def get_starred(self, part) -> bool: starred = serializers.SerializerMethodField() # PrimaryKeyRelated fields (Note: enforcing field type here results in much faster queries, somehow...) - category = serializers.PrimaryKeyRelatedField( - queryset=PartCategory.objects.all(), required=False, allow_null=True - ) + category = serializers.PrimaryKeyRelatedField(queryset=PartCategory.objects.all()) # Pricing fields pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1257,7 +1151,7 @@ class PartStocktakeReportGenerateSerializer(serializers.Serializer): def validate(self, data): """Custom validation for this serializer.""" # Stocktake functionality must be enabled - if not common.settings.get_global_setting('STOCKTAKE_ENABLE'): + if not common.models.InvenTreeSetting.get_setting('STOCKTAKE_ENABLE', False): raise serializers.ValidationError( _('Stocktake functionality is not enabled') ) @@ -1375,7 +1269,7 @@ class Meta: label=_('Minimum price currency'), read_only=False, required=False, - choices=common.currency.currency_code_mappings(), + choices=common.settings.currency_code_mappings(), ) override_max = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1390,7 +1284,7 @@ class Meta: label=_('Maximum price currency'), read_only=False, required=False, - choices=common.currency.currency_code_mappings(), + choices=common.settings.currency_code_mappings(), ) overall_min = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1431,7 +1325,7 @@ def validate(self, data): override_min = data.get('override_min', None) override_max = data.get('override_max', None) - default_currency = common.currency.currency_code_default() + default_currency = common.settings.currency_code_default() if override_min is not None and override_max is not None: try: @@ -1505,42 +1399,31 @@ class Meta: ) -@register_importer() -class BomItemSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for BomItem object.""" - import_exclude_fields = ['validated', 'substitutes'] - - export_only_fields = ['sub_part_name', 'sub_part_ipn', 'sub_part_description'] - class Meta: """Metaclass defining serializer fields.""" model = BomItem fields = [ - 'part', - 'sub_part', - # Extra fields only for export - 'sub_part_name', - 'sub_part_ipn', - 'sub_part_description', - 'reference', - 'quantity', - 'overage', 'allow_variants', 'inherited', + 'note', 'optional', 'consumable', - 'note', + 'overage', 'pk', + 'part', 'part_detail', 'pricing_min', 'pricing_max', 'pricing_min_total', 'pricing_max_total', 'pricing_updated', + 'quantity', + 'reference', + 'sub_part', 'sub_part_detail', 'substitutes', 'validated', @@ -1553,8 +1436,6 @@ class Meta: 'on_order', # Annotated field describing quantity being built 'building', - # Annotate the total potential quantity we can build - 'can_build', ] def __init__(self, *args, **kwargs): @@ -1564,23 +1445,23 @@ def __init__(self, *args, **kwargs): - This saves a bunch of database requests """ part_detail = kwargs.pop('part_detail', False) - sub_part_detail = kwargs.pop('sub_part_detail', True) + sub_part_detail = kwargs.pop('sub_part_detail', False) pricing = kwargs.pop('pricing', True) super().__init__(*args, **kwargs) if not part_detail: - self.fields.pop('part_detail', None) + self.fields.pop('part_detail') if not sub_part_detail: - self.fields.pop('sub_part_detail', None) + self.fields.pop('sub_part_detail') if not pricing: - self.fields.pop('pricing_min', None) - self.fields.pop('pricing_max', None) - self.fields.pop('pricing_min_total', None) - self.fields.pop('pricing_max_total', None) - self.fields.pop('pricing_updated', None) + self.fields.pop('pricing_min') + self.fields.pop('pricing_max') + self.fields.pop('pricing_min_total') + self.fields.pop('pricing_max_total') + self.fields.pop('pricing_updated') quantity = InvenTree.serializers.InvenTreeDecimalField(required=True) @@ -1592,30 +1473,15 @@ def validate_quantity(self, quantity): return quantity part = serializers.PrimaryKeyRelatedField( - queryset=Part.objects.filter(assembly=True), - label=_('Assembly'), - help_text=_('Select the parent assembly'), + queryset=Part.objects.filter(assembly=True) ) substitutes = BomItemSubstituteSerializer(many=True, read_only=True) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) - # Extra fields only for export - sub_part_name = serializers.CharField( - source='sub_part.name', read_only=True, label=_('Component Name') - ) - sub_part_ipn = serializers.CharField( - source='sub_part.IPN', read_only=True, label=_('Component IPN') - ) - sub_part_description = serializers.CharField( - source='sub_part.description', read_only=True, label=_('Component Description') - ) - sub_part = serializers.PrimaryKeyRelatedField( - queryset=Part.objects.filter(component=True), - label=_('Component'), - help_text=_('Select the component part'), + queryset=Part.objects.filter(component=True) ) sub_part_detail = PartBriefSerializer(source='sub_part', many=False, read_only=True) @@ -1624,8 +1490,6 @@ def validate_quantity(self, quantity): building = serializers.FloatField(label=_('In Production'), read_only=True) - can_build = serializers.FloatField(label=_('Can Build'), read_only=True) - # Cached pricing fields pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( source='sub_part.pricing_data.overall_min', allow_null=True, read_only=True @@ -1707,23 +1571,30 @@ def annotate_queryset(queryset): # Annotate with the total "on order" amount for the sub-part queryset = queryset.annotate( - on_order=part_filters.annotate_on_order_quantity(ref) + on_order=part.filters.annotate_on_order_quantity(ref) ) # Annotate with the total "building" amount for the sub-part queryset = queryset.annotate( - building=part_filters.annotate_in_production_quantity(ref) + building=Coalesce( + SubquerySum( + 'sub_part__builds__quantity', + filter=Q(status__in=BuildStatusGroups.ACTIVE_CODES), + ), + Decimal(0), + output_field=models.DecimalField(), + ) ) # Calculate "total stock" for the referenced sub_part # Calculate the "build_order_allocations" for the sub_part # Note that these fields are only aliased, not annotated queryset = queryset.alias( - total_stock=part_filters.annotate_total_stock(reference=ref), - allocated_to_sales_orders=part_filters.annotate_sales_order_allocations( + total_stock=part.filters.annotate_total_stock(reference=ref), + allocated_to_sales_orders=part.filters.annotate_sales_order_allocations( reference=ref ), - allocated_to_build_orders=part_filters.annotate_build_order_allocations( + allocated_to_build_orders=part.filters.annotate_build_order_allocations( reference=ref ), ) @@ -1740,7 +1611,7 @@ def annotate_queryset(queryset): # Calculate 'external_stock' queryset = queryset.annotate( - external_stock=part_filters.annotate_total_stock( + external_stock=part.filters.annotate_total_stock( reference=ref, filter=Q(location__external=True) ) ) @@ -1749,11 +1620,11 @@ def annotate_queryset(queryset): # Extract similar information for any 'substitute' parts queryset = queryset.alias( - substitute_stock=part_filters.annotate_total_stock(reference=ref), - substitute_build_allocations=part_filters.annotate_build_order_allocations( + substitute_stock=part.filters.annotate_total_stock(reference=ref), + substitute_build_allocations=part.filters.annotate_build_order_allocations( reference=ref ), - substitute_sales_allocations=part_filters.annotate_sales_order_allocations( + substitute_sales_allocations=part.filters.annotate_sales_order_allocations( reference=ref ), ) @@ -1769,16 +1640,16 @@ def annotate_queryset(queryset): ) # Annotate the queryset with 'available variant stock' information - variant_stock_query = part_filters.variant_stock_query(reference='sub_part__') + variant_stock_query = part.filters.variant_stock_query(reference='sub_part__') queryset = queryset.alias( - variant_stock_total=part_filters.annotate_variant_quantity( + variant_stock_total=part.filters.annotate_variant_quantity( variant_stock_query, reference='quantity' ), - variant_bo_allocations=part_filters.annotate_variant_quantity( + variant_bo_allocations=part.filters.annotate_variant_quantity( variant_stock_query, reference='sales_order_allocations__quantity' ), - variant_so_allocations=part_filters.annotate_variant_quantity( + variant_so_allocations=part.filters.annotate_variant_quantity( variant_stock_query, reference='allocations__quantity' ), ) @@ -1792,26 +1663,11 @@ def annotate_queryset(queryset): ) ) - # Annotate the "can_build" quantity - queryset = queryset.alias( - total_stock=ExpressionWrapper( - F('available_variant_stock') - + F('available_substitute_stock') - + F('available_stock'), - output_field=FloatField(), - ) - ).annotate( - can_build=ExpressionWrapper( - F('total_stock') / F('quantity'), output_field=FloatField() - ) - ) - return queryset -@register_importer() class CategoryParameterTemplateSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer + InvenTree.serializers.InvenTreeModelSerializer ): """Serializer for the PartCategoryParameterTemplate model.""" @@ -1902,10 +1758,7 @@ def save(self): class BomImportUploadSerializer(InvenTree.serializers.DataFileUploadSerializer): - """Serializer for uploading a file and extracting data from it. - - TODO: Delete this entirely once the new importer process is working - """ + """Serializer for uploading a file and extracting data from it.""" TARGET_MODEL = BomItem @@ -1938,8 +1791,6 @@ class BomImportExtractSerializer(InvenTree.serializers.DataFileExtractSerializer """Serializer class for exatracting BOM data from an uploaded file. The parent class DataFileExtractSerializer does most of the heavy lifting here. - - TODO: Delete this entirely once the new importer process is working """ TARGET_MODEL = BomItem @@ -2027,9 +1878,7 @@ def process_row(row): class BomImportSubmitSerializer(serializers.Serializer): """Serializer for uploading a BOM against a specified part. - A "BOM" is a set of BomItem objects which are to be validated together as a set. - - TODO: Delete this entirely once the new importer process is working + A "BOM" is a set of BomItem objects which are to be validated together as a set """ items = BomItemSerializer(many=True, required=True) diff --git a/src/backend/InvenTree/part/settings.py b/src/backend/InvenTree/part/settings.py index f258fbcb2078..e5706a87ffc1 100644 --- a/src/backend/InvenTree/part/settings.py +++ b/src/backend/InvenTree/part/settings.py @@ -1,38 +1,38 @@ """User-configurable settings for the Part app.""" -from common.settings import get_global_setting +from common.models import InvenTreeSetting def part_assembly_default(): """Returns the default value for the 'assembly' field of a Part object.""" - return get_global_setting('PART_ASSEMBLY') + return InvenTreeSetting.get_setting('PART_ASSEMBLY') def part_template_default(): """Returns the default value for the 'is_template' field of a Part object.""" - return get_global_setting('PART_TEMPLATE') + return InvenTreeSetting.get_setting('PART_TEMPLATE') def part_virtual_default(): """Returns the default value for the 'is_virtual' field of Part object.""" - return get_global_setting('PART_VIRTUAL') + return InvenTreeSetting.get_setting('PART_VIRTUAL') def part_component_default(): """Returns the default value for the 'component' field of a Part object.""" - return get_global_setting('PART_COMPONENT') + return InvenTreeSetting.get_setting('PART_COMPONENT') def part_purchaseable_default(): """Returns the default value for the 'purchasable' field for a Part object.""" - return get_global_setting('PART_PURCHASEABLE') + return InvenTreeSetting.get_setting('PART_PURCHASEABLE') def part_salable_default(): """Returns the default value for the 'salable' field for a Part object.""" - return get_global_setting('PART_SALABLE') + return InvenTreeSetting.get_setting('PART_SALABLE') def part_trackable_default(): """Returns the default value for the 'trackable' field for a Part object.""" - return get_global_setting('PART_TRACKABLE') + return InvenTreeSetting.get_setting('PART_TRACKABLE') diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index b26c9a62cb76..1bdd41f97741 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -3,6 +3,7 @@ import io import logging import time +from datetime import datetime from django.contrib.auth.models import User from django.core.files.base import ContentFile @@ -12,7 +13,6 @@ from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money -import common.currency import common.models import InvenTree.helpers import part.models @@ -67,7 +67,7 @@ def perform_stocktake( pricing.update_pricing(cascade=False) pricing.refresh_from_db() - base_currency = common.currency.currency_code_default() + base_currency = common.settings.currency_code_default() # Keep track of total quantity and cost for this part total_quantity = 0 @@ -210,7 +210,7 @@ def generate_stocktake_report(**kwargs): logger.info('Generating new stocktake report for %s parts', n_parts) - base_currency = common.currency.currency_code_default() + base_currency = common.settings.currency_code_default() # Construct an initial dataset for the stocktake report dataset = tablib.Dataset( diff --git a/src/backend/InvenTree/part/tasks.py b/src/backend/InvenTree/part/tasks.py index ec30fdfdb0f4..51a2d63547eb 100644 --- a/src/backend/InvenTree/part/tasks.py +++ b/src/backend/InvenTree/part/tasks.py @@ -8,15 +8,15 @@ from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ -import common.currency +import common.models import common.notifications +import common.settings import company.models import InvenTree.helpers import InvenTree.helpers_model import InvenTree.tasks import part.models import part.stocktake -from common.settings import get_global_setting from InvenTree.tasks import ( ScheduledTask, check_daily_holdoff, @@ -98,7 +98,7 @@ def check_missing_pricing(limit=250): pp.schedule_for_update() # Find any parts which have 'old' pricing information - days = int(get_global_setting('PRICING_UPDATE_DAYS', 30)) + days = int(common.models.InvenTreeSetting.get_setting('PRICING_UPDATE_DAYS', 30)) stale_date = datetime.now().date() - timedelta(days=days) results = part.models.PartPricing.objects.filter(updated__lte=stale_date)[:limit] @@ -110,7 +110,7 @@ def check_missing_pricing(limit=250): pp.schedule_for_update() # Find any pricing data which is in the wrong currency - currency = common.currency.currency_code_default() + currency = common.settings.currency_code_default() results = part.models.PartPricing.objects.exclude(currency=currency) if results.count() > 0: @@ -145,7 +145,9 @@ def scheduled_stocktake_reports(): # First let's delete any old stocktake reports delete_n_days = int( - get_global_setting('STOCKTAKE_DELETE_REPORT_DAYS', 30, cache=False) + common.models.InvenTreeSetting.get_setting( + 'STOCKTAKE_DELETE_REPORT_DAYS', 30, cache=False + ) ) threshold = datetime.now() - timedelta(days=delete_n_days) old_reports = part.models.PartStocktakeReport.objects.filter(date__lt=threshold) @@ -155,11 +157,17 @@ def scheduled_stocktake_reports(): old_reports.delete() # Next, check if stocktake functionality is enabled - if not get_global_setting('STOCKTAKE_ENABLE', False, cache=False): + if not common.models.InvenTreeSetting.get_setting( + 'STOCKTAKE_ENABLE', False, cache=False + ): logger.info('Stocktake functionality is not enabled - exiting') return - report_n_days = int(get_global_setting('STOCKTAKE_AUTO_DAYS', 0, cache=False)) + report_n_days = int( + common.models.InvenTreeSetting.get_setting( + 'STOCKTAKE_AUTO_DAYS', 0, cache=False + ) + ) if report_n_days < 1: logger.info('Stocktake auto reports are disabled, exiting') diff --git a/src/backend/InvenTree/part/templates/part/category.html b/src/backend/InvenTree/part/templates/part/category.html index 4bcf6b82adf1..734e3ae98b14 100644 --- a/src/backend/InvenTree/part/templates/part/category.html +++ b/src/backend/InvenTree/part/templates/part/category.html @@ -14,7 +14,10 @@ {% block heading %} {% if category %} {% trans "Part Category" %}: - +{% settings_value "PART_CATEGORY_DEFAULT_ICON" as default_icon %} +{% if category.icon or default_icon %} + +{% endif %} {{ category.name }} {% else %} {% trans "Parts" %} @@ -231,10 +234,6 @@

    {% trans "Subcategories" %}

    {% block js_ready %} {{ block.super }} - loadApiIconPacks().then(() => { - $('#category-icon').addClass(getApiIconClass('{{ category.icon }}')); - }); - {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} {% if stocktake_enable and roles.stocktake.add %} $('#category-stocktake').click(function() { @@ -243,11 +242,13 @@

    {% trans "Subcategories" %}

    {% if category %}value: {{ category.pk }},{% endif %} tree_picker: { url: '{% url "api-part-category-tree" %}', + default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, @@ -307,6 +308,7 @@

    {% trans "Subcategories" %}

    return node; }, + defaultIcon: global_settings.PART_CATEGORY_DEFAULT_ICON, }); onPanelLoad('subcategories', function() { @@ -315,8 +317,6 @@

    {% trans "Subcategories" %}

    params: { {% if category %} parent: {{ category.pk }}, - {% else %} - top_level: true, {% endif %} }, allowTreeView: true, diff --git a/src/backend/InvenTree/part/templates/part/detail.html b/src/backend/InvenTree/part/templates/part/detail.html index eaec60b375cd..4cf36dc387bf 100644 --- a/src/backend/InvenTree/part/templates/part/detail.html +++ b/src/backend/InvenTree/part/templates/part/detail.html @@ -100,22 +100,6 @@

    {% trans "Part Test Templates" %}

    -
    -
    -
    -

    {% trans "Part Test Statistics" %}

    - {% include "spacer.html" %} -
    -
    -
    -
    - {% include "filter_list.html" with id="partteststatistics" %} -
    - - {% include "test_statistics_table.html" with prefix="part-" %} -
    -
    -
    @@ -420,8 +404,6 @@

    {% trans "Part Manufacturers" %}

    'part-notes', '{% url "api-part-detail" part.pk %}', { - model_type: "part", - model_id: {{ part.pk }}, editable: {% js_bool roles.part.change %}, } ); @@ -457,6 +439,7 @@

    {% trans "Part Manufacturers" %}

    location: { tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: { @@ -646,7 +629,11 @@

    {% trans "Part Manufacturers" %}

    {% if report_enabled %} $("#print-bom-report").click(function() { - printReports('part', [{{ part.pk }}]); + printReports({ + items: [{{ part.pk }}], + key: 'part', + url: '{% url "api-bom-report-list" %}' + }); }); {% endif %} }); @@ -767,9 +754,6 @@

    {% trans "Part Manufacturers" %}

    }); }); }); - onPanelLoad("test-statistics", function() { - prepareTestStatisticsTable('part', '{% url "api-test-statistics-by-part" part.pk %}') - }); onPanelLoad("part-stock", function() { $('#new-stock-item').click(function () { @@ -821,7 +805,17 @@

    {% trans "Part Manufacturers" %}

    }); onPanelLoad("part-attachments", function() { - loadAttachmentTable('part', {{ part.pk }}); + loadAttachmentTable('{% url "api-part-attachment-list" %}', { + filters: { + part: {{ part.pk }}, + }, + fields: { + part: { + value: {{ part.pk }}, + hidden: true + } + } + }); }); onPanelLoad('pricing', function() { diff --git a/src/backend/InvenTree/part/templates/part/part_base.html b/src/backend/InvenTree/part/templates/part/part_base.html index 0123fa658662..16ce73b29104 100644 --- a/src/backend/InvenTree/part/templates/part/part_base.html +++ b/src/backend/InvenTree/part/templates/part/part_base.html @@ -211,13 +211,6 @@
    {% decimal on_order %} {% include "part/part_units.html" %} {% endif %} - {% if required > 0 %} - - - {% trans "Required for Orders" %} - {% decimal required %} - - {% endif %} {% if part.component %} {% if required_build_order_quantity > 0 or allocated_build_order_quantity > 0 %} @@ -278,15 +271,6 @@
    {% endif %} {% settings_value "PART_ENABLE_REVISION" as show_revision %} - {% if show_revision and part.revision_of %} - - - {% trans "Revision Of" %} - - {{ part.revision_of.full_name }} - - - {% endif %} {% if show_revision and part.revision %} @@ -458,7 +442,7 @@
    $("#show-qr-code").click(function() { showQRDialog( '{% trans "Part QR Code" escape %}', - '{{ part.barcode }}', + '{"part": {{ part.pk }} }', ); }); @@ -484,8 +468,9 @@
    $('#print-label').click(function() { printLabels({ items: [{{ part.pk }}], - model_type: 'part', + key: 'part', singular_name: 'part', + url: '{% url "api-part-label-list" %}', }); }); {% endif %} diff --git a/src/backend/InvenTree/part/templates/part/part_sidebar.html b/src/backend/InvenTree/part/templates/part/part_sidebar.html index 0c74a77c9960..368110d7294a 100644 --- a/src/backend/InvenTree/part/templates/part/part_sidebar.html +++ b/src/backend/InvenTree/part/templates/part/part_sidebar.html @@ -50,11 +50,9 @@ {% trans "Stocktake" as text %} {% include "sidebar_item.html" with label="stocktake" text=text icon="fa-clipboard-check" %} {% endif %} -{% if part.testable %} +{% if part.trackable %} {% trans "Test Templates" as text %} {% include "sidebar_item.html" with label="test-templates" text=text icon="fa-vial" %} -{% trans "Test Statistics" as text %} -{% include "sidebar_item.html" with label="test-statistics" text=text icon="fa-chart-line" %} {% endif %} {% if show_related %} {% trans "Related Parts" as text %} diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 038dc9baf6af..9459ee3bae19 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -4,6 +4,7 @@ from datetime import datetime from decimal import Decimal from enum import IntEnum +from pathlib import Path from random import randint from django.core.exceptions import ValidationError @@ -12,17 +13,17 @@ from django.urls import reverse import PIL +from rest_framework import status from rest_framework.test import APIClient import build.models import company.models import order.models -from build.status_codes import BuildStatus from common.models import InvenTreeSetting from company.models import Company, SupplierPart from InvenTree.settings import BASE_DIR +from InvenTree.status_codes import BuildStatus, PurchaseOrderStatusGroups, StockStatus from InvenTree.unit_test import InvenTreeAPITestCase -from order.status_codes import PurchaseOrderStatusGroups from part.models import ( BomItem, BomItemSubstitute, @@ -36,7 +37,6 @@ PartTestTemplate, ) from stock.models import StockItem, StockLocation -from stock.status_codes import StockStatus class PartCategoryAPITest(InvenTreeAPITestCase): @@ -369,7 +369,9 @@ class Target(IntEnum): params['delete_parts'] = '1' if delete_child_categories: params['delete_child_categories'] = '1' - self.delete(url, params, expected_code=204) + response = self.delete(url, params, expected_code=204) + + self.assertEqual(response.status_code, 204) if delete_parts: if i == Target.delete_subcategories_delete_parts: @@ -461,12 +463,12 @@ def test_path_detail(self): response = self.get(url, {'path_detail': False}, expected_code=200) # Check that the path detail information is not included - self.assertNotIn('path', response.data.keys()) + self.assertFalse('path' in response.data.keys()) # Now, request *with* path detail response = self.get(url, {'path_detail': True}, expected_code=200) - self.assertIn('path', response.data.keys()) + self.assertTrue('path' in response.data.keys()) path = response.data['path'] @@ -503,82 +505,6 @@ def test_part_category_tree(self): self.assertEqual(item['parent'], parent) self.assertEqual(item['subcategories'], subcategories) - def test_part_category_default_location(self): - """Test default location propagation through location trees.""" - """Making a tree structure like this: - main - loc 2 - sub1 - sub2 - loc 3 - sub3 - loc 4 - sub4 - sub5 - Expected behaviour: - main parent loc: Out of test scope. Parent category data not controlled by the test - sub1 parent loc: loc 2 - sub2 parent loc: loc 2 - sub3 parent loc: loc 3 - sub4 parent loc: loc 4 - sub5 parent loc: loc 3 - """ - main = PartCategory.objects.create( - name='main', - parent=PartCategory.objects.first(), - default_location=StockLocation.objects.get(id=2), - ) - sub1 = PartCategory.objects.create(name='sub1', parent=main) - sub2 = PartCategory.objects.create( - name='sub2', parent=sub1, default_location=StockLocation.objects.get(id=3) - ) - sub3 = PartCategory.objects.create( - name='sub3', parent=sub2, default_location=StockLocation.objects.get(id=4) - ) - sub4 = PartCategory.objects.create(name='sub4', parent=sub3) - sub5 = PartCategory.objects.create(name='sub5', parent=sub2) - Part.objects.create(name='test', category=sub4) - PartCategory.objects.rebuild() - - # This query will trigger an internal server error if annotation results are not limited to 1 - url = reverse('api-part-list') - response = self.get(url, expected_code=200) - - # sub1, expect main to be propagated - url = reverse('api-part-category-detail', kwargs={'pk': sub1.pk}) - response = self.get(url, expected_code=200) - self.assertEqual( - response.data['parent_default_location'], main.default_location.pk - ) - - # sub2, expect main to be propagated - url = reverse('api-part-category-detail', kwargs={'pk': sub2.pk}) - response = self.get(url, expected_code=200) - self.assertEqual( - response.data['parent_default_location'], main.default_location.pk - ) - - # sub3, expect sub2 to be propagated - url = reverse('api-part-category-detail', kwargs={'pk': sub3.pk}) - response = self.get(url, expected_code=200) - self.assertEqual( - response.data['parent_default_location'], sub2.default_location.pk - ) - - # sub4, expect sub3 to be propagated - url = reverse('api-part-category-detail', kwargs={'pk': sub4.pk}) - response = self.get(url, expected_code=200) - self.assertEqual( - response.data['parent_default_location'], sub3.default_location.pk - ) - - # sub5, expect sub2 to be propagated - url = reverse('api-part-category-detail', kwargs={'pk': sub5.pk}) - response = self.get(url, expected_code=200) - self.assertEqual( - response.data['parent_default_location'], sub2.default_location.pk - ) - class PartOptionsAPITest(InvenTreeAPITestCase): """Tests for the various OPTIONS endpoints in the /part/ API. @@ -586,7 +512,7 @@ class PartOptionsAPITest(InvenTreeAPITestCase): Ensure that the required field details are provided! """ - roles = ['part.add', 'part_category.view'] + roles = ['part.add'] def test_part(self): """Test the Part API OPTIONS.""" @@ -594,7 +520,7 @@ def test_part(self): # Check that a bunch o' fields are contained for f in ['assembly', 'component', 'description', 'image', 'IPN']: - self.assertIn(f, actions.keys()) + self.assertTrue(f in actions.keys()) # Active is a 'boolean' field active = actions['active'] @@ -615,64 +541,19 @@ def test_part(self): category = actions['category'] self.assertEqual(category['type'], 'related field') - self.assertFalse(category['required']) + self.assertTrue(category['required']) self.assertFalse(category['read_only']) self.assertEqual(category['label'], 'Category') self.assertEqual(category['model'], 'partcategory') self.assertEqual(category['api_url'], reverse('api-part-category-list')) self.assertEqual(category['help_text'], 'Part category') - def test_part_label_translation(self): - """Test that 'label' values are correctly translated.""" - response = self.options(reverse('api-part-list')) - - labels = { - 'IPN': 'IPN', - 'category': 'Category', - 'assembly': 'Assembly', - 'ordering': 'On Order', - 'stock_item_count': 'Stock Items', - } - - help_text = { - 'IPN': 'Internal Part Number', - 'active': 'Is this part active?', - 'barcode_hash': 'Unique hash of barcode data', - 'category': 'Part category', - } - - # Check basic return values - for field, value in labels.items(): - self.assertEqual(response.data['actions']['POST'][field]['label'], value) - - for field, value in help_text.items(): - self.assertEqual( - response.data['actions']['POST'][field]['help_text'], value - ) - - # Check again, with a different locale - response = self.options( - reverse('api-part-list'), headers={'Accept-Language': 'de'} - ) - - translated = { - 'IPN': 'IPN (Interne Produktnummer)', - 'category': 'Kategorie', - 'assembly': 'Baugruppe', - 'ordering': 'Bestellt', - 'stock_item_count': 'Lagerartikel', - } - - for field, value in translated.items(): - label = response.data['actions']['POST'][field]['label'] - self.assertEqual(label, value) - def test_category(self): """Test the PartCategory API OPTIONS endpoint.""" actions = self.getActions(reverse('api-part-category-list')) # actions should *not* contain 'POST' as we do not have the correct role - self.assertNotIn('POST', actions) + self.assertFalse('POST' in actions) self.assignRole('part_category.add') @@ -759,6 +640,7 @@ def test_get_categories(self): # Request *all* part categories response = self.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 8) # Request top-level part categories only @@ -782,6 +664,7 @@ def test_add_categories(self): url = reverse('api-part-category-list') response = self.post(url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) parent = response.data['pk'] @@ -789,6 +672,7 @@ def test_add_categories(self): for animal in ['cat', 'dog', 'zebra']: data = {'name': animal, 'description': 'A sort of animal', 'parent': parent} response = self.post(url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data['parent'], parent) self.assertEqual(response.data['name'], animal) self.assertEqual(response.data['pathstring'], 'Animals/' + animal) @@ -812,6 +696,7 @@ def test_cat_detail(self): data['parent'] = None data['description'] = 'Changing the description' response = self.patch(url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['description'], 'Changing the description') self.assertIsNone(response.data['parent']) @@ -820,11 +705,13 @@ def test_filter_parts(self): url = reverse('api-part-list') data = {'cascade': True} response = self.get(url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), Part.objects.count()) # Test filtering parts by category data = {'category': 2} response = self.get(url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) # There should only be 2 objects in category C self.assertEqual(len(response.data), 2) @@ -860,50 +747,6 @@ def test_filter_by_related(self): response = self.get(url, {'related': 1}, expected_code=200) self.assertEqual(len(response.data), 2) - def test_filter_by_bom_valid(self): - """Test the 'bom_valid' Part API filter.""" - url = reverse('api-part-list') - - n = Part.objects.filter(active=True, assembly=True).count() - - # Initially, there are no parts with a valid BOM - response = self.get(url, {'bom_valid': False}, expected_code=200) - n1 = len(response.data) - - for item in response.data: - self.assertTrue(item['assembly']) - self.assertTrue(item['active']) - - response = self.get(url, {'bom_valid': True}, expected_code=200) - n2 = len(response.data) - - self.assertEqual(n1 + n2, n) - - def test_filter_by_starred(self): - """Test by 'starred' filter.""" - url = reverse('api-part-list') - - # All parts - n = Part.objects.count() - - # Initially, there are no starred parts - response = self.get(url, {'starred': True}, expected_code=200) - self.assertEqual(len(response.data), 0) - - response = self.get(url, {'starred': False, 'limit': 1}, expected_code=200) - self.assertEqual(response.data['count'], n) - - # Star a part - part = Part.objects.first() - part.set_starred(self.user, True) - - # Fetch data again - response = self.get(url, {'starred': True}, expected_code=200) - self.assertEqual(len(response.data), 1) - - response = self.get(url, {'starred': False, 'limit': 1}, expected_code=200) - self.assertEqual(response.data['count'], n - 1) - def test_filter_by_convert(self): """Test that we can correctly filter the Part list by conversion options.""" category = PartCategory.objects.get(pk=3) @@ -965,13 +808,67 @@ def test_include_children(self): response = self.get(url, data) # Now there should be 5 total parts + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 3) + def test_test_templates(self): + """Test the PartTestTemplate API.""" + url = reverse('api-part-test-template-list') + + # List ALL items + response = self.get(url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(len(response.data), 9) + + # Request for a particular part + response = self.get(url, data={'part': 10000}) + self.assertEqual(len(response.data), 5) + + response = self.get(url, data={'part': 10004}) + self.assertEqual(len(response.data), 6) + + # Try to post a new object (missing description) + response = self.post( + url, + data={'part': 10000, 'test_name': 'My very first test', 'required': False}, + ) + + self.assertEqual(response.status_code, 400) + + # Try to post a new object (should succeed) + response = self.post( + url, + data={ + 'part': 10000, + 'test_name': 'New Test', + 'required': True, + 'description': 'a test description', + }, + ) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + # Try to post a new test with the same name (should fail) + response = self.post( + url, + data={'part': 10004, 'test_name': ' newtest', 'description': 'dafsdf'}, + ) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + # Try to post a new test against a non-trackable part (should fail) + response = self.post(url, data={'part': 1, 'test_name': 'A simple test'}) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + def test_get_thumbs(self): """Return list of part thumbnails.""" url = reverse('api-part-thumbs') - self.get(url) + response = self.get(url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) def test_paginate(self): """Test pagination of the Part list API.""" @@ -1107,26 +1004,25 @@ def test_part_download(self): url = reverse('api-part-list') required_cols = [ - 'ID', - 'Name', - 'Description', - 'Total Stock', + 'Part ID', + 'Part Name', + 'Part Description', + 'In Stock', 'Category Name', 'Keywords', - 'Is Template', + 'Template', 'Virtual', 'Trackable', 'Active', 'Notes', - 'Creation Date', - 'On Order', - 'In Stock', - 'Link', + 'creation_date', ] excluded_cols = ['lft', 'rght', 'level', 'tree_id', 'metadata'] - with self.download_file(url, {'export': 'csv'}) as file: + with self.download_file( + url, {'export': 'csv'}, expected_fn='InvenTree_Parts.csv' + ) as file: data = self.process_csv( file, excluded_cols=excluded_cols, @@ -1135,13 +1031,13 @@ def test_part_download(self): ) for row in data: - part = Part.objects.get(pk=row['ID']) + part = Part.objects.get(pk=row['Part ID']) if part.IPN: self.assertEqual(part.IPN, row['IPN']) - self.assertEqual(part.name, row['Name']) - self.assertEqual(part.description, row['Description']) + self.assertEqual(part.name, row['Part Name']) + self.assertEqual(part.description, row['Part Description']) if part.category: self.assertEqual(part.category.name, row['Category Name']) @@ -1159,8 +1055,8 @@ def test_date_filters(self): # Filter by creation date response = self.get(url, {'created_before': '2019-01-01'}, expected_code=200) - self.assertLess(len(response.data), n) - self.assertGreater(len(response.data), 0) + self.assertTrue(len(response.data) < n) + self.assertTrue(len(response.data) > 0) for item in response.data: self.assertIsNotNone(item['creation_date']) @@ -1170,8 +1066,8 @@ def test_date_filters(self): response = self.get(url, {'created_after': '2019-01-01'}, expected_code=200) - self.assertLess(len(response.data), n) - self.assertGreater(len(response.data), 0) + self.assertTrue(len(response.data) < n) + self.assertTrue(len(response.data) > 0) for item in response.data: self.assertIsNotNone(item['creation_date']) @@ -1179,23 +1075,6 @@ def test_date_filters(self): date = datetime.fromisoformat(item['creation_date']) self.assertGreaterEqual(date, date_compare) - def test_part_notes(self): - """Test the 'notes' field.""" - # First test the 'LIST' endpoint - no notes information provided - url = reverse('api-part-list') - - response = self.get(url, {'limit': 1}, expected_code=200) - data = response.data['results'][0] - - self.assertNotIn('notes', data) - - # Second, test the 'DETAIL' endpoint - notes information provided - url = reverse('api-part-detail', kwargs={'pk': data['pk']}) - - response = self.get(url, expected_code=200) - - self.assertIn('notes', response.data) - class PartCreationTests(PartAPITestBase): """Tests for creating new Part instances via the API.""" @@ -1482,6 +1361,8 @@ def test_part_operations(self): }, ) + self.assertEqual(response.status_code, 201) + pk = response.data['pk'] # Check that a new part has been added @@ -1500,6 +1381,7 @@ def test_part_operations(self): response = self.patch(url, {'name': 'a new better name'}) + self.assertEqual(response.status_code, 200) self.assertEqual(response.data['pk'], pk) self.assertEqual(response.data['name'], 'a new better name') @@ -1515,17 +1397,24 @@ def test_part_operations(self): # 2021-06-22 this test is to check that the "duplicate part" checks don't do strange things response = self.patch(url, {'name': 'a new better name'}) + self.assertEqual(response.status_code, 200) + # Try to remove a tag response = self.patch(url, {'tags': ['tag1']}) + self.assertEqual(response.status_code, 200) self.assertEqual(response.data['tags'], ['tag1']) # Try to remove the part - response = self.delete(url, expected_code=400) + response = self.delete(url) + + # As the part is 'active' we cannot delete it + self.assertEqual(response.status_code, 405) # So, let's make it not active response = self.patch(url, {'active': False}, expected_code=200) response = self.delete(url) + self.assertEqual(response.status_code, 204) # Part count should have reduced self.assertEqual(Part.objects.count(), n) @@ -1544,6 +1433,8 @@ def test_duplicates(self): }, ) + self.assertEqual(response.status_code, 201) + n = Part.objects.count() # Check that we cannot create a duplicate in a different category @@ -1556,9 +1447,10 @@ def test_duplicates(self): 'category': 2, 'revision': 'A', }, - expected_code=400, ) + self.assertEqual(response.status_code, 400) + # Check that only 1 matching part exists parts = Part.objects.filter( name='part', description='description', IPN='IPN-123' @@ -1579,9 +1471,9 @@ def test_duplicates(self): 'category': 2, 'revision': 'B', }, - expected_code=201, ) + self.assertEqual(response.status_code, 201) self.assertEqual(Part.objects.count(), n + 1) # Now, check that we cannot *change* an existing part to conflict @@ -1590,10 +1482,14 @@ def test_duplicates(self): url = reverse('api-part-detail', kwargs={'pk': pk}) # Attempt to alter the revision code - response = self.patch(url, {'revision': 'A'}, expected_code=400) + response = self.patch(url, {'revision': 'A'}) + + self.assertEqual(response.status_code, 400) # But we *can* change it to a unique revision code - response = self.patch(url, {'revision': 'C'}, expected_code=200) + response = self.patch(url, {'revision': 'C'}) + + self.assertEqual(response.status_code, 200) def test_image_upload(self): """Test that we can upload an image to the part API.""" @@ -1623,9 +1519,10 @@ def test_image_upload(self): with open(f'{test_path}.txt', 'rb') as dummy_image: response = self.upload_client.patch( - url, {'image': dummy_image}, format='multipart', expected_code=400 + url, {'image': dummy_image}, format='multipart' ) + self.assertEqual(response.status_code, 400) self.assertIn('Upload a valid image', str(response.data)) # Now try to upload a valid image file, in multiple formats @@ -1637,9 +1534,11 @@ def test_image_upload(self): with open(fn, 'rb') as dummy_image: response = self.upload_client.patch( - url, {'image': dummy_image}, format='multipart', expected_code=200 + url, {'image': dummy_image}, format='multipart' ) + self.assertEqual(response.status_code, 200) + # And now check that the image has been set p = Part.objects.get(pk=pk) self.assertIsNotNone(p.image) @@ -1656,11 +1555,10 @@ def test_existing_image(self): with open(fn, 'rb') as img_file: response = self.upload_client.patch( - reverse('api-part-detail', kwargs={'pk': p.pk}), - {'image': img_file}, - expected_code=200, + reverse('api-part-detail', kwargs={'pk': p.pk}), {'image': img_file} ) + self.assertEqual(response.status_code, 200) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) @@ -1703,11 +1601,10 @@ def test_update_existing_image(self): # Upload the image to a part with open(fn, 'rb') as img_file: response = self.upload_client.patch( - reverse('api-part-detail', kwargs={'pk': p.pk}), - {'image': img_file}, - expected_code=200, + reverse('api-part-detail', kwargs={'pk': p.pk}), {'image': img_file} ) + self.assertEqual(response.status_code, 200) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) @@ -1963,6 +1860,8 @@ def get_part_data(self): response = self.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + for part in response.data: if part['pk'] == self.part.pk: return part @@ -2223,7 +2122,7 @@ class BomItemTest(InvenTreeAPITestCase): fixtures = ['category', 'part', 'location', 'stock', 'bom', 'company'] - roles = ['part.add', 'part.change', 'part.delete', 'stock.view'] + roles = ['part.add', 'part.change', 'part.delete'] def setUp(self): """Set up the test case.""" @@ -2254,7 +2153,7 @@ def test_bom_list(self): response = self.get(url, data={'validated': False}, expected_code=200) # There should be at least one non-validated item - self.assertGreater(len(response.data), 0) + self.assertTrue(len(response.data) > 0) # Now, let's validate an item bom_item = BomItem.objects.first() @@ -2270,7 +2169,7 @@ def test_bom_list(self): # Each item in response should contain expected keys for el in response.data: for key in ['available_stock', 'available_substitute_stock']: - self.assertIn(key, el) + self.assertTrue(key in el) def test_bom_list_search(self): """Test that we can search the BOM list API endpoint.""" @@ -2309,7 +2208,7 @@ def test_bom_list_ordering(self): q1 = response.data[0]['quantity'] q2 = response.data[-1]['quantity'] - self.assertLess(q1, q2) + self.assertTrue(q1 < q2) # Order by decreasing quantity response = self.get(f'{url}?ordering=-quantity', expected_code=200) @@ -2356,7 +2255,7 @@ def test_get_bom_detail(self): ] for key in expected_values: - self.assertIn(key, response.data) + self.assertTrue(key in response.data) self.assertEqual(int(float(response.data['quantity'])), 25) @@ -2588,28 +2487,22 @@ class PartAttachmentTest(InvenTreeAPITestCase): def test_add_attachment(self): """Test that we can create a new PartAttachment via the API.""" - url = reverse('api-attachment-list') + url = reverse('api-part-attachment-list') # Upload without permission - response = self.post( - url, {'model_id': 1, 'model_type': 'part'}, expected_code=403 - ) + response = self.post(url, {}, expected_code=403) # Add required permission self.assignRole('part.add') - self.assignRole('part.change') # Upload without specifying part (will fail) response = self.post(url, {'comment': 'Hello world'}, expected_code=400) - self.assertIn('This field is required', str(response.data['model_id'])) - self.assertIn('This field is required', str(response.data['model_type'])) + self.assertIn('This field is required', str(response.data['part'])) # Upload without file OR link (will fail) response = self.post( - url, - {'model_id': 1, 'model_type': 'part', 'comment': 'Hello world'}, - expected_code=400, + url, {'part': 1, 'comment': 'Hello world'}, expected_code=400 ) self.assertIn('Missing file', str(response.data['attachment'])) @@ -2617,9 +2510,7 @@ def test_add_attachment(self): # Upload an invalid link (will fail) response = self.post( - url, - {'model_id': 1, 'model_type': 'part', 'link': 'not-a-link.py'}, - expected_code=400, + url, {'part': 1, 'link': 'not-a-link.py'}, expected_code=400 ) self.assertIn('Enter a valid URL', str(response.data['link'])) @@ -2628,20 +2519,12 @@ def test_add_attachment(self): # Upload a valid link (will pass) response = self.post( - url, - { - 'model_id': 1, - 'model_type': 'part', - 'link': link, - 'comment': 'Hello world', - }, - expected_code=201, + url, {'part': 1, 'link': link, 'comment': 'Hello world'}, expected_code=201 ) data = response.data - self.assertEqual(data['model_type'], 'part') - self.assertEqual(data['model_id'], 1) + self.assertEqual(data['part'], 1) self.assertEqual(data['link'], link) self.assertEqual(data['comment'], 'Hello world') @@ -2703,9 +2586,8 @@ def test_create_price_breaks(self): p.active = False p.save() - InvenTreeSetting.set_setting('PART_ALLOW_DELETE_FROM_ASSEMBLY', True) - - self.delete(reverse('api-part-detail', kwargs={'pk': 1})) + response = self.delete(reverse('api-part-detail', kwargs={'pk': 1})) + self.assertEqual(response.status_code, 204) with self.assertRaises(Part.DoesNotExist): p.refresh_from_db() @@ -2716,7 +2598,6 @@ class PartStocktakeTest(InvenTreeAPITestCase): superuser = False is_staff = False - roles = ['stocktake.view'] fixtures = ['category', 'part', 'location', 'stock'] @@ -2951,96 +2832,3 @@ def test_get_schedule(self): for entry in data: for k in ['date', 'quantity', 'label']: self.assertIn(k, entry) - - -class PartTestTemplateTest(PartAPITestBase): - """API unit tests for the PartTestTemplate model.""" - - def test_test_templates(self): - """Test the PartTestTemplate API.""" - url = reverse('api-part-test-template-list') - - # List ALL items - response = self.get(url) - self.assertEqual(len(response.data), 9) - - # Request for a particular part - response = self.get(url, data={'part': 10000}) - self.assertEqual(len(response.data), 5) - - response = self.get(url, data={'part': 10004}) - self.assertEqual(len(response.data), 6) - - # Try to post a new object (missing description) - response = self.post( - url, - data={'part': 10000, 'test_name': 'My very first test', 'required': False}, - expected_code=400, - ) - - # Try to post a new object (should succeed) - response = self.post( - url, - data={ - 'part': 10000, - 'test_name': 'New Test', - 'required': True, - 'description': 'a test description', - }, - ) - - # Try to post a new test with the same name (should fail) - response = self.post( - url, - data={'part': 10004, 'test_name': ' newtest', 'description': 'dafsdf'}, - expected_code=400, - ) - - # Try to post a new test against a non-trackable part (should fail) - response = self.post( - url, data={'part': 1, 'test_name': 'A simple test'}, expected_code=400 - ) - - def test_choices(self): - """Test the 'choices' field for the PartTestTemplate model.""" - template = PartTestTemplate.objects.first() - - url = reverse('api-part-test-template-detail', kwargs={'pk': template.pk}) - - # Check OPTIONS response - response = self.options(url) - options = response.data['actions']['PUT'] - - self.assertTrue(options['pk']['read_only']) - self.assertFalse(options['pk']['required']) - self.assertEqual(options['part']['api_url'], '/api/part/') - self.assertTrue(options['test_name']['required']) - self.assertFalse(options['test_name']['read_only']) - self.assertFalse(options['choices']['required']) - self.assertFalse(options['choices']['read_only']) - self.assertEqual( - options['choices']['help_text'], - 'Valid choices for this test (comma-separated)', - ) - - # Check data endpoint - response = self.get(url) - data = response.data - - for key in [ - 'pk', - 'key', - 'part', - 'test_name', - 'description', - 'enabled', - 'required', - 'results', - 'choices', - ]: - self.assertIn(key, data) - - # Patch with invalid choices - response = self.patch(url, {'choices': 'a,b,c,d,e,f,f'}, expected_code=400) - - self.assertIn('Choices must be unique', str(response.data['choices'])) diff --git a/src/backend/InvenTree/part/test_bom_export.py b/src/backend/InvenTree/part/test_bom_export.py index fc2e2ca3cf63..c1abe0de398b 100644 --- a/src/backend/InvenTree/part/test_bom_export.py +++ b/src/backend/InvenTree/part/test_bom_export.py @@ -29,11 +29,11 @@ def test_bom_template(self): url = reverse('api-bom-upload-template') # Download an XLS template - response = self.client.get(url, data={'format': 'xlsx'}) + response = self.client.get(url, data={'format': 'xls'}) self.assertEqual(response.status_code, 200) self.assertEqual( response.headers['Content-Disposition'], - 'attachment; filename="InvenTree_BOM_Template.xlsx"', + 'attachment; filename="InvenTree_BOM_Template.xls"', ) # Return a simple CSV template @@ -111,7 +111,6 @@ def test_export_csv(self): 'Parent Name', 'Part ID', 'Part IPN', - 'Part Revision', 'Part Name', 'Description', 'Assembly', @@ -135,6 +134,24 @@ def test_export_csv(self): for header in headers: self.assertIn(header, expected) + def test_export_xls(self): + """Test BOM download in XLS format.""" + params = { + 'format': 'xls', + 'cascade': True, + 'parameter_data': True, + 'stock_data': True, + 'supplier_data': True, + 'manufacturer_data': True, + } + + response = self.client.get(self.url, data=params) + + self.assertEqual(response.status_code, 200) + + content = response.headers['Content-Disposition'] + self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xls"') + def test_export_xlsx(self): """Test BOM download in XLSX format.""" params = { @@ -150,9 +167,6 @@ def test_export_xlsx(self): self.assertEqual(response.status_code, 200) - content = response.headers['Content-Disposition'] - self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xlsx"') - def test_export_json(self): """Test BOM download in JSON format.""" params = { diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index f978f9063874..7d5a8293ffe0 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -187,8 +187,6 @@ def test_substitutes(self): self.assertEqual(bom_item.substitutes.count(), 4) for sub in subs: - sub.active = False - sub.save() sub.delete() # The substitution links should have been automatically removed @@ -303,50 +301,3 @@ def test_invalid_bom(self): with self.assertRaises(django_exceptions.ValidationError): BomItem.objects.create(part=part_v, sub_part=part_a, quantity=10) - - def test_locked_assembly(self): - """Test that BomItem objects work correctly for a 'locked' assembly.""" - assembly = Part.objects.create( - name='Assembly2', description='An assembly part', assembly=True - ) - - sub_part = Part.objects.create( - name='SubPart1', description='A sub-part', component=True - ) - - # Initially, the assembly is not locked - self.assertFalse(assembly.locked) - - # Create a BOM item for the assembly - bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) - - # Lock the assembly - assembly.locked = True - assembly.save() - - # Try to edit the BOM item - with self.assertRaises(django_exceptions.ValidationError): - bom_item.quantity = 10 - bom_item.save() - - # Try to delete the BOM item - with self.assertRaises(django_exceptions.ValidationError): - bom_item.delete() - - # Try to create a new BOM item - with self.assertRaises(django_exceptions.ValidationError): - BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) - - # Unlock the part and try again - assembly.locked = False - assembly.save() - - # Create a new BOM item - bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1) - - # Edit the new BOM item - bom_item.quantity = 10 - bom_item.save() - - # Delete the new BOM item - bom_item.delete() diff --git a/src/backend/InvenTree/part/test_category.py b/src/backend/InvenTree/part/test_category.py index 94465d075d1b..d3e89994ab35 100644 --- a/src/backend/InvenTree/part/test_category.py +++ b/src/backend/InvenTree/part/test_category.py @@ -4,8 +4,6 @@ from django.core.exceptions import ValidationError from django.test import TestCase -from common.models import InvenTreeSetting - from .models import Part, PartCategory, PartParameter, PartParameterTemplate @@ -119,7 +117,7 @@ def test_path_string(self): child.pathstring, 'Cat/AAAAAAAAAA/BBBBBBBBBB/CCCCCCCCCC/DDDDDDDDDD/EEEEEEEEEE/FFFFFFFFFF/GGGGGGGGGG/HHHHHHHHHH/IIIIIIIIII/JJJJJJJJJJ/KKKKKKKKK...OO/PPPPPPPPPP/QQQQQQQQQQ/RRRRRRRRRR/SSSSSSSSSS/TTTTTTTTTT/UUUUUUUUUU/VVVVVVVVVV/WWWWWWWWWW/XXXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZ', ) - self.assertLessEqual(len(child.pathstring), 250) + self.assertTrue(len(child.pathstring) <= 250) # Attempt an invalid move with self.assertRaises(ValidationError): @@ -327,7 +325,7 @@ def test_category_tree(self): self.assertEqual(descendants.count(), 3) for loc in [C11, C12, C13]: - self.assertIn(loc, descendants) + self.assertTrue(loc in descendants) # Check category C1x, should be B1 -> C1x for loc in [C11, C12, C13]: @@ -414,29 +412,3 @@ def test_category_tree(self): # should log an exception with self.assertRaises(ValidationError): B3.delete() - - def test_icon(self): - """Test the category icon.""" - # No default icon set - cat = PartCategory.objects.create(name='Test Category') - self.assertEqual(cat.icon, '') - - # Set a default icon - InvenTreeSetting.set_setting('PART_CATEGORY_DEFAULT_ICON', 'ti:package:outline') - self.assertEqual(cat.icon, 'ti:package:outline') - - # Set custom icon to default icon and assert that it does not get written to the database - cat.icon = 'ti:package:outline' - cat.save() - self.assertEqual(cat._icon, '') - - # Set a different custom icon and assert that it takes precedence - cat.icon = 'ti:tag:outline' - cat.save() - self.assertEqual(cat.icon, 'ti:tag:outline') - InvenTreeSetting.set_setting('PART_CATEGORY_DEFAULT_ICON', '') - - # Test that the icon can be set to None again - cat.icon = '' - cat.save() - self.assertEqual(cat.icon, '') diff --git a/src/backend/InvenTree/part/test_param.py b/src/backend/InvenTree/part/test_param.py index 54a8d7edfe32..314fe11eb513 100644 --- a/src/backend/InvenTree/part/test_param.py +++ b/src/backend/InvenTree/part/test_param.py @@ -47,25 +47,6 @@ def test_validate(self): t3.full_clean() t3.save() # pragma: no cover - def test_invalid_numbers(self): - """Test that invalid floating point numbers are correctly handled.""" - p = Part.objects.first() - t = PartParameterTemplate.objects.create(name='Yaks') - - valid_floats = ['-12', '1.234', '17', '3e45', '-12e34'] - - for value in valid_floats: - param = PartParameter(part=p, template=t, data=value) - param.full_clean() - self.assertIsNotNone(param.data_numeric) - - invalid_floats = ['88E6352', 'inf', '-inf', 'nan', '3.14.15', '3eee3'] - - for value in invalid_floats: - param = PartParameter(part=p, template=t, data=value) - param.full_clean() - self.assertIsNone(param.data_numeric) - def test_metadata(self): """Unit tests for the metadata field.""" for model in [PartParameterTemplate]: @@ -96,43 +77,6 @@ def test_get_parameter(self): param = prt.get_parameter('Not a parameter') self.assertIsNone(param) - def test_locked_part(self): - """Test parameter editing for a locked part.""" - part = Part.objects.create( - name='Test Part 3', - description='A part for testing', - category=PartCategory.objects.first(), - IPN='TEST-PART', - ) - - parameter = PartParameter.objects.create( - part=part, template=PartParameterTemplate.objects.first(), data='123' - ) - - # Lock the part - part.locked = True - part.save() - - # Attempt to edit the parameter - with self.assertRaises(django_exceptions.ValidationError): - parameter.data = '456' - parameter.save() - - # Attempt to delete the parameter - with self.assertRaises(django_exceptions.ValidationError): - parameter.delete() - - # Unlock the part - part.locked = False - part.save() - - # Now we can edit the parameter - parameter.data = '456' - parameter.save() - - # And we can delete the parameter - parameter.delete() - class TestCategoryTemplates(TransactionTestCase): """Test class for PartCategoryParameterTemplate model.""" diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 04e89f452075..57f91af817ee 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -18,7 +18,6 @@ NotificationMessage, ) from common.notifications import UIMessageNotification, storage -from common.settings import get_global_setting, set_global_setting from InvenTree import version from InvenTree.templatetags import inventree_extras from InvenTree.unit_test import InvenTreeTestCase @@ -169,7 +168,7 @@ def test_barcode_mixin(self): self.assertEqual(Part.barcode_model_type(), 'part') p = Part.objects.get(pk=1) - barcode = p.format_barcode() + barcode = p.format_barcode(brief=True) self.assertEqual(barcode, '{"part": 1}') def test_tree(self): @@ -270,8 +269,9 @@ def test_stock(self): def test_barcode(self): """Test barcode format functionality.""" - barcode = self.r1.format_barcode() - self.assertEqual('{"part": 3}', barcode) + barcode = self.r1.format_barcode(brief=False) + self.assertIn('InvenTree', barcode) + self.assertIn('"part": {"id": 3}', barcode) def test_sell_pricing(self): """Check that the sell pricebreaks were loaded.""" @@ -336,8 +336,6 @@ def test_related(self): self.assertIn(self.r1, r2_relations) # Delete a part, ensure the relationship also gets deleted - self.r1.active = False - self.r1.save() self.r1.delete() self.assertEqual(PartRelated.objects.count(), countbefore) @@ -353,8 +351,6 @@ def test_related(self): self.assertEqual(len(self.r2.get_related_parts()), n) # Deleting r2 should remove *all* newly created relationships - self.r2.active = False - self.r2.save() self.r2.delete() self.assertEqual(PartRelated.objects.count(), countbefore) @@ -370,101 +366,6 @@ def test_stocktake(self): self.assertIsNotNone(p.last_stocktake) self.assertEqual(p.last_stocktake, ps.date) - def test_delete(self): - """Test delete operation for a Part instance.""" - part = Part.objects.first() - - for active, locked in [(True, True), (True, False), (False, True)]: - # Cannot delete part if it is active or locked - part.active = active - part.locked = locked - part.save() - - with self.assertRaises(ValidationError): - part.delete() - - part.active = False - part.locked = False - - part.delete() - - def test_revisions(self): - """Test the 'revision' and 'revision_of' field.""" - template = Part.objects.create( - name='Template part', description='A template part', is_template=True - ) - - # Create a new part - part = Part.objects.create( - name='Master Part', - description='Master part (will have revisions)', - variant_of=template, - ) - - self.assertEqual(part.revisions.count(), 0) - - # Try to set as revision of itself - with self.assertRaises(ValidationError) as exc: - part.revision_of = part - part.save() - - self.assertIn('Part cannot be a revision of itself', str(exc.exception)) - - part.refresh_from_db() - - rev_a = Part.objects.create( - name='Master Part', description='Master part (revision A)' - ) - - with self.assertRaises(ValidationError) as exc: - print('rev a:', rev_a.revision_of, part.revision_of) - rev_a.revision_of = part - rev_a.save() - - self.assertIn('Revision code must be specified', str(exc.exception)) - - with self.assertRaises(ValidationError) as exc: - rev_a.revision_of = template - rev_a.revision = 'A' - rev_a.save() - - self.assertIn('Cannot make a revision of a template part', str(exc.exception)) - - with self.assertRaises(ValidationError) as exc: - rev_a.revision_of = part - rev_a.revision = 'A' - rev_a.save() - - self.assertIn('Parent part must point to the same template', str(exc.exception)) - - rev_a.variant_of = template - rev_a.revision_of = part - rev_a.revision = 'A' - rev_a.save() - - self.assertEqual(part.revisions.count(), 1) - - rev_b = Part.objects.create( - name='Master Part', description='Master part (revision B)' - ) - - with self.assertRaises(ValidationError) as exc: - rev_b.revision_of = rev_a - rev_b.revision = 'B' - rev_b.save() - - self.assertIn( - 'Cannot make a revision of a part which is already a revision', - str(exc.exception), - ) - - rev_b.variant_of = template - rev_b.revision_of = part - rev_b.revision = 'B' - rev_b.save() - - self.assertEqual(part.revisions.count(), 2) - class TestTemplateTest(TestCase): """Unit test for the TestTemplate class.""" @@ -595,17 +496,17 @@ def test_initial(self): def test_custom(self): """Update some of the part values and re-test.""" for val in [True, False]: - set_global_setting('PART_COMPONENT', val, self.user) - set_global_setting('PART_PURCHASEABLE', val, self.user) - set_global_setting('PART_SALABLE', val, self.user) - set_global_setting('PART_TRACKABLE', val, self.user) - set_global_setting('PART_ASSEMBLY', val, self.user) - set_global_setting('PART_TEMPLATE', val, self.user) - - self.assertEqual(val, get_global_setting('PART_COMPONENT')) - self.assertEqual(val, get_global_setting('PART_PURCHASEABLE')) - self.assertEqual(val, get_global_setting('PART_SALABLE')) - self.assertEqual(val, get_global_setting('PART_TRACKABLE')) + InvenTreeSetting.set_setting('PART_COMPONENT', val, self.user) + InvenTreeSetting.set_setting('PART_PURCHASEABLE', val, self.user) + InvenTreeSetting.set_setting('PART_SALABLE', val, self.user) + InvenTreeSetting.set_setting('PART_TRACKABLE', val, self.user) + InvenTreeSetting.set_setting('PART_ASSEMBLY', val, self.user) + InvenTreeSetting.set_setting('PART_TEMPLATE', val, self.user) + + self.assertEqual(val, InvenTreeSetting.get_setting('PART_COMPONENT')) + self.assertEqual(val, InvenTreeSetting.get_setting('PART_PURCHASEABLE')) + self.assertEqual(val, InvenTreeSetting.get_setting('PART_SALABLE')) + self.assertEqual(val, InvenTreeSetting.get_setting('PART_TRACKABLE')) part = self.make_part() @@ -641,7 +542,7 @@ def test_duplicate_ipn(self): part.validate_unique() # Now update the settings so duplicate IPN values are *not* allowed - set_global_setting('PART_ALLOW_DUPLICATE_IPN', False, self.user) + InvenTreeSetting.set_setting('PART_ALLOW_DUPLICATE_IPN', False, self.user) with self.assertRaises(ValidationError): part = Part(name='Hello', description='A thing', IPN='IPN123', revision='C') diff --git a/src/backend/InvenTree/part/test_pricing.py b/src/backend/InvenTree/part/test_pricing.py index 212d086c5aad..ba4e7d54efc2 100644 --- a/src/backend/InvenTree/part/test_pricing.py +++ b/src/backend/InvenTree/part/test_pricing.py @@ -5,16 +5,14 @@ from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money -import common.currency import common.models import common.settings import company.models import order.models import part.models import stock.models -from common.settings import set_global_setting +from InvenTree.status_codes import PurchaseOrderStatus from InvenTree.unit_test import InvenTreeTestCase -from order.status_codes import PurchaseOrderStatus class PartPricingTests(InvenTreeTestCase): @@ -173,7 +171,7 @@ def test_supplier_part_pricing(self): def test_internal_pricing(self): """Tests for internal price breaks.""" # Ensure internal pricing is enabled - set_global_setting('PART_INTERNAL_PRICE', True, None) + common.models.InvenTreeSetting.set_setting('PART_INTERNAL_PRICE', True, None) pricing = self.part.pricing @@ -181,7 +179,7 @@ def test_internal_pricing(self): self.assertIsNone(pricing.internal_cost_min) self.assertIsNone(pricing.internal_cost_max) - currency = common.currency.currency_code_default() + currency = common.settings.currency_code_default() for ii in range(5): # Let's add some internal price breaks @@ -222,7 +220,9 @@ def test_stock_item_pricing(self): ) # Ensure that initially, stock item pricing is disabled - set_global_setting('PRICING_USE_STOCK_PRICING', False, None) + common.models.InvenTreeSetting.set_setting( + 'PRICING_USE_STOCK_PRICING', False, None + ) pricing = p.pricing pricing.update_pricing() @@ -234,7 +234,9 @@ def test_stock_item_pricing(self): self.assertIsNone(pricing.overall_max) # Turn on stock pricing - set_global_setting('PRICING_USE_STOCK_PRICING', True, None) + common.models.InvenTreeSetting.set_setting( + 'PRICING_USE_STOCK_PRICING', True, None + ) pricing.update_pricing() diff --git a/src/backend/InvenTree/part/urls.py b/src/backend/InvenTree/part/urls.py index 9b051336075f..35eca7683710 100644 --- a/src/backend/InvenTree/part/urls.py +++ b/src/backend/InvenTree/part/urls.py @@ -3,6 +3,7 @@ Provides URL endpoints for: - Display / Create / Edit / Delete PartCategory - Display / Create / Edit / Delete Part +- Create / Edit / Delete PartAttachment - Display / Create / Edit / Delete SupplierPart """ diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 061c35bb5591..f14ab7e719b6 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -1,7 +1,5 @@ """API for the plugin app.""" -from typing import Optional - from django.core.exceptions import ValidationError from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ @@ -157,8 +155,6 @@ class PluginDetail(RetrieveUpdateDestroyAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginConfigSerializer - lookup_field = 'key' - lookup_url_kwarg = 'plugin' def delete(self, request, *args, **kwargs): """Handle DELETE request for a PluginConfig instance. @@ -204,8 +200,6 @@ class PluginUninstall(UpdateAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginUninstallSerializer permission_classes = [IsSuperuser] - lookup_field = 'key' - lookup_url_kwarg = 'plugin' def perform_update(self, serializer): """Uninstall the plugin.""" @@ -225,8 +219,6 @@ class PluginActivate(UpdateAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginActivateSerializer permission_classes = [IsSuperuser] - lookup_field = 'key' - lookup_url_kwarg = 'plugin' def get_object(self): """Returns the object for the view.""" @@ -268,9 +260,7 @@ class PluginSettingList(ListAPI): filterset_fields = ['plugin__active', 'plugin__key'] -def check_plugin( - plugin_slug: Optional[str], plugin_pk: Optional[int] -) -> InvenTreePlugin: +def check_plugin(plugin_slug: str, plugin_pk: int) -> InvenTreePlugin: """Check that a plugin for the provided slug exists and get the config. Args: @@ -290,16 +280,16 @@ def check_plugin( raise NotFound(detail='Plugin not specified') # Define filter - filters = {} + filter = {} if plugin_slug: - filters['key'] = plugin_slug + filter['key'] = plugin_slug elif plugin_pk: - filters['pk'] = plugin_pk + filter['pk'] = plugin_pk ref = plugin_slug or plugin_pk # Check that the 'plugin' specified is valid try: - plugin_cgf = PluginConfig.objects.filter(**filters).first() + plugin_cgf = PluginConfig.objects.filter(**filter).first() except PluginConfig.DoesNotExist: raise NotFound(detail=f"Plugin '{ref}' not installed") @@ -330,10 +320,10 @@ class PluginAllSettingList(APIView): @extend_schema( responses={200: PluginSerializers.PluginSettingSerializer(many=True)} ) - def get(self, request, plugin): + def get(self, request, pk): """Get all settings for a plugin config.""" # look up the plugin - plugin = check_plugin(plugin, None) + plugin = check_plugin(None, pk) settings = getattr(plugin, 'settings', {}) @@ -362,21 +352,21 @@ def get_object(self): The URL provides the 'slug' of the plugin, and the 'key' of the setting. Both the 'slug' and 'key' must be valid, else a 404 error is raised """ - setting_key = self.kwargs['key'] + key = self.kwargs['key'] # Look up plugin - plugin = check_plugin(self.kwargs.get('plugin', None), None) + plugin = check_plugin( + plugin_slug=self.kwargs.get('plugin'), plugin_pk=self.kwargs.get('pk') + ) settings = getattr(plugin, 'settings', {}) - if setting_key not in settings: + if key not in settings: raise NotFound( - detail=f"Plugin '{plugin.slug}' has no setting matching '{setting_key}'" + detail=f"Plugin '{plugin.slug}' has no setting matching '{key}'" ) - return PluginSetting.get_setting_object( - setting_key, plugin=plugin.plugin_config() - ) + return PluginSetting.get_setting_object(key, plugin=plugin.plugin_config()) # Staff permission required permission_classes = [GlobalSettingsPermissions] @@ -394,7 +384,7 @@ class RegistryStatusView(APIView): @extend_schema(responses={200: PluginSerializers.PluginRegistryStatusSerializer()}) def get(self, request): - """Show plugin registry status information.""" + """Show registry status information.""" error_list = [] for stage, errors in registry.errors.items(): @@ -407,20 +397,12 @@ def get(self, request): }) result = PluginSerializers.PluginRegistryStatusSerializer({ - 'registry_errors': error_list, - 'active_plugins': PluginConfig.objects.filter(active=True).count(), + 'registry_errors': error_list }).data return Response(result) -class PluginMetadataView(MetadataView): - """Metadata API endpoint for the PluginConfig model.""" - - lookup_field = 'key' - lookup_url_kwarg = 'plugin' - - plugin_api_urls = [ path('action/', ActionPluginView.as_view(), name='api-action-plugin'), path('barcode/', include(barcode_api_urls)), @@ -428,26 +410,23 @@ class PluginMetadataView(MetadataView): path( 'plugins/', include([ - # Plugin management - path('reload/', PluginReload.as_view(), name='api-plugin-reload'), - path('install/', PluginInstall.as_view(), name='api-plugin-install'), - # Registry status - path( - 'status/', - RegistryStatusView.as_view(), - name='api-plugin-registry-status', - ), + # Plugin settings URLs path( 'settings/', include([ + re_path( + r'^(?P[-\w]+)/(?P\w+)/', + PluginSettingDetail.as_view(), + name='api-plugin-setting-detail', + ), # Used for admin interface path( '', PluginSettingList.as_view(), name='api-plugin-setting-list' - ) + ), ]), ), - # Lookup for individual plugins (based on 'plugin', not 'pk') + # Detail views for a single PluginConfig item path( - '/', + '/', include([ path( 'settings/', @@ -455,7 +434,7 @@ class PluginMetadataView(MetadataView): re_path( r'^(?P\w+)/', PluginSettingDetail.as_view(), - name='api-plugin-setting-detail', + name='api-plugin-setting-detail-pk', ), path( '', @@ -464,12 +443,6 @@ class PluginMetadataView(MetadataView): ), ]), ), - path( - 'metadata/', - PluginMetadataView.as_view(), - {'model': PluginConfig, 'lookup_field': 'key'}, - name='api-plugin-metadata', - ), path( 'activate/', PluginActivate.as_view(), @@ -483,6 +456,23 @@ class PluginMetadataView(MetadataView): path('', PluginDetail.as_view(), name='api-plugin-detail'), ]), ), + # Metadata + path( + 'metadata/', + MetadataView.as_view(), + {'model': PluginConfig}, + name='api-plugin-metadata', + ), + # Plugin management + path('reload/', PluginReload.as_view(), name='api-plugin-reload'), + path('install/', PluginInstall.as_view(), name='api-plugin-install'), + # Registry status + path( + 'status/', + RegistryStatusView.as_view(), + name='api-plugin-registry-status', + ), + # Anything else path('', PluginList.as_view(), name='api-plugin-list'), ]), ), diff --git a/src/backend/InvenTree/plugin/base/barcodes/api.py b/src/backend/InvenTree/plugin/base/barcodes/api.py index 01b2f6ae9b27..8cd75cf8b60c 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/api.py +++ b/src/backend/InvenTree/plugin/base/barcodes/api.py @@ -6,17 +6,16 @@ from django.urls import path from django.utils.translation import gettext_lazy as _ -from drf_spectacular.utils import extend_schema, extend_schema_view -from rest_framework import permissions, status +from rest_framework import permissions from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.generics import CreateAPIView from rest_framework.response import Response import order.models -import plugin.base.barcodes.helper import stock.models from InvenTree.helpers import hash_barcode from plugin import registry +from plugin.builtin.barcodes.inventree_barcode import InvenTreeInternalBarcodePlugin from users.models import RuleSet from . import serializers as barcode_serializers @@ -130,48 +129,6 @@ def handle_barcode(self, barcode: str, request, **kwargs): return Response(result) -@extend_schema_view( - post=extend_schema(responses={200: barcode_serializers.BarcodeSerializer}) -) -class BarcodeGenerate(CreateAPIView): - """Endpoint for generating a barcode for a database object. - - The barcode is generated by the selected barcode plugin. - """ - - serializer_class = barcode_serializers.BarcodeGenerateSerializer - - def queryset(self): - """This API view does not have a queryset.""" - return None - - # Default permission classes (can be overridden) - permission_classes = [permissions.IsAuthenticated] - - def create(self, request, *args, **kwargs): - """Perform the barcode generation action.""" - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - - model = serializer.validated_data.get('model') - pk = serializer.validated_data.get('pk') - model_cls = plugin.base.barcodes.helper.get_supported_barcode_models_map().get( - model, None - ) - - if model_cls is None: - raise ValidationError({'error': _('Model is not supported')}) - - try: - model_instance = model_cls.objects.get(pk=pk) - except model_cls.DoesNotExist: - raise ValidationError({'error': _('Model instance not found')}) - - barcode_data = plugin.base.barcodes.helper.generate_barcode(model_instance) - - return Response({'barcode': barcode_data}, status=status.HTTP_200_OK) - - class BarcodeAssign(BarcodeView): """Endpoint for assigning a barcode to a stock item. @@ -204,7 +161,7 @@ def handle_barcode(self, barcode: str, request, **kwargs): valid_labels = [] - for model in plugin.base.barcodes.helper.get_supported_barcode_models(): + for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models(): label = model.barcode_model_type() valid_labels.append(label) @@ -246,7 +203,7 @@ def create(self, request, *args, **kwargs): serializer.is_valid(raise_exception=True) data = serializer.validated_data - supported_models = plugin.base.barcodes.helper.get_supported_barcode_models() + supported_models = InvenTreeInternalBarcodePlugin.get_supported_barcode_models() supported_labels = [model.barcode_model_type() for model in supported_models] model_names = ', '.join(supported_labels) @@ -610,8 +567,6 @@ def handle_barcode(self, barcode: str, request, **kwargs): barcode_api_urls = [ - # Generate a barcode for a database object - path('generate/', BarcodeGenerate.as_view(), name='api-barcode-generate'), # Link a third-party barcode to an item (e.g. Part / StockItem / etc) path('link/', BarcodeAssign.as_view(), name='api-barcode-link'), # Unlink a third-party barcode from an item diff --git a/src/backend/InvenTree/plugin/base/barcodes/helper.py b/src/backend/InvenTree/plugin/base/barcodes/helper.py deleted file mode 100644 index f1815ba505bc..000000000000 --- a/src/backend/InvenTree/plugin/base/barcodes/helper.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Helper functions for barcode generation.""" - -import logging -from typing import Type, cast - -import InvenTree.helpers_model -from InvenTree.models import InvenTreeBarcodeMixin - -logger = logging.getLogger('inventree') - - -def cache(func): - """Cache the result of a function, but do not cache falsy results.""" - cache = {} - - def wrapper(): - """Wrapper function for caching.""" - if 'default' not in cache: - res = func() - - if res: - cache['default'] = res - - return res - - return cache['default'] - - return wrapper - - -def barcode_plugins() -> list: - """Return a list of plugin choices which can be used for barcode generation.""" - try: - from plugin import registry - - plugins = registry.with_mixin('barcode', active=True) - except Exception: - plugins = [] - - return [ - (plug.slug, plug.human_name) for plug in plugins if plug.has_barcode_generation - ] - - -def generate_barcode(model_instance: InvenTreeBarcodeMixin): - """Generate a barcode for a given model instance.""" - from common.settings import get_global_setting - from plugin import registry - from plugin.mixins import BarcodeMixin - - # Find the selected barcode generation plugin - slug = get_global_setting('BARCODE_GENERATION_PLUGIN', create=False) - - plugin = cast(BarcodeMixin, registry.get_plugin(slug)) - - return plugin.generate(model_instance) - - -@cache -def get_supported_barcode_models() -> list[Type[InvenTreeBarcodeMixin]]: - """Returns a list of database models which support barcode functionality.""" - return InvenTree.helpers_model.getModelsWithMixin(InvenTreeBarcodeMixin) - - -@cache -def get_supported_barcode_models_map(): - """Return a mapping of barcode model types to the model class.""" - return { - model.barcode_model_type(): model for model in get_supported_barcode_models() - } - - -@cache -def get_supported_barcode_model_codes_map(): - """Return a mapping of barcode model type codes to the model class.""" - return { - model.barcode_model_type_code(): model - for model in get_supported_barcode_models() - } diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 28fb1c49a805..929a037115a1 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -10,7 +10,6 @@ from django.utils.translation import gettext_lazy as _ from company.models import Company, SupplierPart -from InvenTree.models import InvenTreeBarcodeMixin from order.models import PurchaseOrder, PurchaseOrderStatus from plugin.base.integration.SettingsMixin import SettingsMixin from stock.models import StockLocation @@ -54,30 +53,6 @@ def scan(self, barcode_data): """ return None - @property - def has_barcode_generation(self): - """Does this plugin support barcode generation.""" - try: - # Attempt to call the generate method - self.generate(None) # type: ignore - except NotImplementedError: - # If a NotImplementedError is raised, then barcode generation is not supported - return False - except: - pass - - return True - - def generate(self, model_instance: InvenTreeBarcodeMixin): - """Generate barcode data for the given model instance. - - Arguments: - model_instance: The model instance to generate barcode data for. It is extending the InvenTreeBarcodeMixin. - - Returns: The generated barcode data. - """ - raise NotImplementedError('Generate must be implemented by a plugin') - class SupplierBarcodeMixin(BarcodeMixin): """Mixin that provides default implementations for scan functions for supplier barcodes. diff --git a/src/backend/InvenTree/plugin/base/barcodes/serializers.py b/src/backend/InvenTree/plugin/base/barcodes/serializers.py index b31ab1818a76..b614bf1a0bb5 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/serializers.py +++ b/src/backend/InvenTree/plugin/base/barcodes/serializers.py @@ -6,9 +6,9 @@ from rest_framework import serializers import order.models -import plugin.base.barcodes.helper import stock.models -from order.status_codes import PurchaseOrderStatus, SalesOrderStatus +from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus +from plugin.builtin.barcodes.inventree_barcode import InvenTreeInternalBarcodePlugin class BarcodeSerializer(serializers.Serializer): @@ -23,30 +23,6 @@ class BarcodeSerializer(serializers.Serializer): ) -class BarcodeGenerateSerializer(serializers.Serializer): - """Serializer for generating a barcode.""" - - model = serializers.CharField( - required=True, help_text=_('Model name to generate barcode for') - ) - - pk = serializers.IntegerField( - required=True, - help_text=_('Primary key of model object to generate barcode for'), - ) - - def validate_model(self, model: str): - """Validate the provided model.""" - supported_models = ( - plugin.base.barcodes.helper.get_supported_barcode_models_map() - ) - - if model not in supported_models.keys(): - raise ValidationError(_('Model is not supported')) - - return model - - class BarcodeAssignMixin(serializers.Serializer): """Serializer for linking and unlinking barcode to an internal class.""" @@ -54,7 +30,7 @@ def __init__(self, *args, **kwargs): """Generate serializer fields for each supported model type.""" super().__init__(*args, **kwargs) - for model in plugin.base.barcodes.helper.get_supported_barcode_models(): + for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models(): self.fields[model.barcode_model_type()] = ( serializers.PrimaryKeyRelatedField( queryset=model.objects.all(), @@ -69,7 +45,7 @@ def get_model_fields(): """Return a list of model fields.""" fields = [ model.barcode_model_type() - for model in plugin.base.barcodes.helper.get_supported_barcode_models() + for model in InvenTreeInternalBarcodePlugin.get_supported_barcode_models() ] return fields diff --git a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py index 9512a31fa557..f69859088455 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py +++ b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py @@ -21,34 +21,31 @@ def setUp(self): super().setUp() self.scan_url = reverse('api-barcode-scan') - self.generate_url = reverse('api-barcode-generate') self.assign_url = reverse('api-barcode-link') self.unassign_url = reverse('api-barcode-unlink') def postBarcode(self, url, barcode, expected_code=None): """Post barcode and return results.""" return self.post( - url, data={'barcode': str(barcode)}, expected_code=expected_code - ) - - def generateBarcode(self, model: str, pk: int, expected_code: int): - """Post barcode generation and return barcode contents.""" - return self.post( - self.generate_url, - data={'model': model, 'pk': pk}, + url, + format='json', + data={'barcode': str(barcode)}, expected_code=expected_code, ) def test_invalid(self): """Test that invalid requests fail.""" # test scan url - self.post(self.scan_url, data={}, expected_code=400) + self.post(self.scan_url, format='json', data={}, expected_code=400) # test wrong assign urls - self.post(self.assign_url, data={}, expected_code=400) - self.post(self.assign_url, data={'barcode': '123'}, expected_code=400) + self.post(self.assign_url, format='json', data={}, expected_code=400) + self.post( + self.assign_url, format='json', data={'barcode': '123'}, expected_code=400 + ) self.post( self.assign_url, + format='json', data={'barcode': '123', 'stockitem': '123'}, expected_code=400, ) @@ -139,7 +136,7 @@ def test_array_barcode(self): data = response.data self.assertIn('error', data) - def test_barcode_scan(self): + def test_barcode_generation(self): """Test that a barcode is generated with a scan.""" item = StockItem.objects.get(pk=522) @@ -154,18 +151,6 @@ def test_barcode_scan(self): self.assertEqual(pk, item.pk) - def test_barcode_generation(self): - """Test that a barcode can be generated for a StockItem.""" - item = StockItem.objects.get(pk=522) - - data = self.generateBarcode('stockitem', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], '{"stockitem": 522}') - - def test_barcode_generation_invalid(self): - """Test barcode generation for invalid model/pk.""" - self.generateBarcode('invalidmodel', 1, expected_code=400) - self.generateBarcode('stockitem', 99999999, expected_code=400) - def test_association(self): """Test that a barcode can be associated with a StockItem.""" item = StockItem.objects.get(pk=522) @@ -178,6 +163,7 @@ def test_association(self): response = self.post( self.assign_url, + format='json', data={'barcode': barcode_data, 'stockitem': item.pk}, expected_code=200, ) @@ -197,6 +183,7 @@ def test_association(self): # Ensure that the same barcode hash cannot be assigned to a different stock item! response = self.post( self.assign_url, + format='json', data={'barcode': barcode_data, 'stockitem': 521}, expected_code=400, ) diff --git a/src/backend/InvenTree/plugin/base/event/events.py b/src/backend/InvenTree/plugin/base/event/events.py index 6aa341f3e320..eaaa1bfd9663 100644 --- a/src/backend/InvenTree/plugin/base/event/events.py +++ b/src/backend/InvenTree/plugin/base/event/events.py @@ -8,7 +8,6 @@ from django.dispatch.dispatcher import receiver import InvenTree.exceptions -from common.settings import get_global_setting from InvenTree.ready import canAppAccessDatabase, isImportingData from InvenTree.tasks import offload_task from plugin.registry import registry @@ -22,7 +21,13 @@ def trigger_event(event, *args, **kwargs): This event will be stored in the database, and the worker will respond to it later on. """ - if not get_global_setting('ENABLE_PLUGINS_EVENTS', False): + from common.models import InvenTreeSetting + + if not settings.PLUGINS_ENABLED: + # Do nothing if plugins are not enabled + return # pragma: no cover + + if not InvenTreeSetting.get_setting('ENABLE_PLUGINS_EVENTS', False): # Do nothing if plugin events are not enabled return @@ -49,13 +54,12 @@ def register_event(event, *args, **kwargs): Note: This function is processed by the background worker, as it performs multiple database access operations. """ + from common.models import InvenTreeSetting + logger.debug("Registering triggered event: '%s'", event) # Determine if there are any plugins which are interested in responding - if settings.PLUGIN_TESTING or get_global_setting('ENABLE_PLUGINS_EVENTS'): - # Check if the plugin registry needs to be reloaded - registry.check_reload() - + if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting('ENABLE_PLUGINS_EVENTS'): with transaction.atomic(): for slug, plugin in registry.plugins.items(): if not plugin.mixin_enabled('events'): @@ -131,7 +135,6 @@ def allow_table_event(table_name): 'socialaccount_', 'user_', 'users_', - 'importer_', ] if any(table_name.startswith(prefix) for prefix in ignore_prefixes): diff --git a/src/backend/InvenTree/plugin/base/icons/mixins.py b/src/backend/InvenTree/plugin/base/icons/mixins.py deleted file mode 100644 index a103e93c04f6..000000000000 --- a/src/backend/InvenTree/plugin/base/icons/mixins.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Plugin mixin classes for icon pack plugin.""" - -import logging - -from common.icons import IconPack, reload_icon_packs -from plugin.helpers import MixinNotImplementedError - -logger = logging.getLogger('inventree') - - -class IconPackMixin: - """Mixin that add custom icon packs.""" - - class MixinMeta: - """Meta options for this mixin.""" - - MIXIN_NAME = 'icon_pack' - - def __init__(self): - """Register mixin.""" - super().__init__() - self.add_mixin('icon_pack', True, __class__) - - @classmethod - def _activate_mixin(cls, registry, plugins, *args, **kwargs): - """Activate icon pack plugins.""" - logger.debug('Reloading icon packs') - reload_icon_packs() - - def icon_packs(self) -> list[IconPack]: - """Return a list of custom icon packs.""" - raise MixinNotImplementedError( - f"{__class__} is missing the 'icon_packs' method" - ) diff --git a/src/backend/InvenTree/plugin/base/integration/AppMixin.py b/src/backend/InvenTree/plugin/base/integration/AppMixin.py index 6c102cf9a8e5..196b941253fb 100644 --- a/src/backend/InvenTree/plugin/base/integration/AppMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/AppMixin.py @@ -38,9 +38,11 @@ def _activate_mixin( force_reload (bool, optional): Only reload base apps. Defaults to False. full_reload (bool, optional): Reload everything - including plugin mechanism. Defaults to False. """ - from common.settings import get_global_setting + from common.models import InvenTreeSetting - if settings.PLUGIN_TESTING or get_global_setting('ENABLE_PLUGINS_APP'): + if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting( + 'ENABLE_PLUGINS_APP' + ): logger.info('Registering IntegrationPlugin apps') apps_changed = False diff --git a/src/backend/InvenTree/plugin/base/integration/PanelMixin.py b/src/backend/InvenTree/plugin/base/integration/PanelMixin.py deleted file mode 100644 index d4d374e67b39..000000000000 --- a/src/backend/InvenTree/plugin/base/integration/PanelMixin.py +++ /dev/null @@ -1,149 +0,0 @@ -"""PanelMixin plugin class definition. - -Allows integration of custom 'panels' into the user interface. -""" - -import logging - -from InvenTree.helpers import generateTestKey -from plugin.helpers import MixinNotImplementedError, render_template, render_text - -logger = logging.getLogger('inventree') - - -class PanelMixin: - """Mixin which allows integration of custom 'panels' into a particular page. - - The mixin provides a number of key functionalities: - - - Adds an (initially hidden) panel to the page - - Allows rendering of custom templated content to the panel - - Adds a menu item to the 'navbar' on the left side of the screen - - Allows custom javascript to be run when the panel is initially loaded - - The PanelMixin class allows multiple panels to be returned for any page, - and also allows the plugin to return panels for many different pages. - - Any class implementing this mixin must provide the 'get_custom_panels' method, - which dynamically returns the custom panels for a particular page. - - This method is provided with: - - - view : The View object which is being rendered - - request : The HTTPRequest object - - Note that as this is called dynamically (per request), - then the actual panels returned can vary depending on the particular request or page - - The 'get_custom_panels' method must return a list of dict objects, each with the following keys: - - - title : The title of the panel, to appear in the sidebar menu - - description : Extra descriptive text (optional) - - icon : The icon to appear in the sidebar menu - - content : The HTML content to appear in the panel, OR - - content_template : A template file which will be rendered to produce the panel content - - javascript : The javascript content to be rendered when the panel is loaded, OR - - javascript_template : A template file which will be rendered to produce javascript - - e.g. - - { - 'title': "Updates", - 'description': "Latest updates for this part", - 'javascript': 'alert("You just loaded this panel!")', - 'content': 'Hello world', - } - """ - - class MixinMeta: - """Meta for mixin.""" - - MIXIN_NAME = 'Panel' - - def __init__(self): - """Register mixin.""" - super().__init__() - self.add_mixin('panel', True, __class__) - - def get_custom_panels(self, view, request): - """This method *must* be implemented by the plugin class.""" - raise MixinNotImplementedError( - f"{__class__} is missing the 'get_custom_panels' method" - ) - - def get_panel_context(self, view, request, context): - """Build the context data to be used for template rendering. - - Custom class can override this to provide any custom context data. - - (See the example in "custom_panel_sample.py") - """ - # Provide some standard context items to the template for rendering - context['plugin'] = self - context['request'] = request - context['user'] = getattr(request, 'user', None) - context['view'] = view - - try: - context['object'] = view.get_object() - except AttributeError: # pragma: no cover - pass - - return context - - def render_panels(self, view, request, context): - """Get panels for a view. - - Args: - view: Current view context - request: Current request for passthrough - context: Rendering context - - Returns: - Array of panels - """ - panels = [] - - # Construct an updated context object for template rendering - ctx = self.get_panel_context(view, request, context) - - custom_panels = self.get_custom_panels(view, request) or [] - - for panel in custom_panels: - content_template = panel.get('content_template', None) - javascript_template = panel.get('javascript_template', None) - - if content_template: - # Render content template to HTML - panel['content'] = render_template(self, content_template, ctx) - else: - # Render content string to HTML - panel['content'] = render_text(panel.get('content', ''), ctx) - - if javascript_template: - # Render javascript template to HTML - panel['javascript'] = render_template(self, javascript_template, ctx) - else: - # Render javascript string to HTML - panel['javascript'] = render_text(panel.get('javascript', ''), ctx) - - # Check for required keys - required_keys = ['title', 'content'] - - if any(key not in panel for key in required_keys): - logger.warning( - 'Custom panel for plugin %s is missing a required parameter', - __class__, - ) - continue - - # Add some information on this plugin - panel['plugin'] = self - panel['slug'] = self.slug - - # Add a 'key' for the panel, which is mostly guaranteed to be unique - panel['key'] = generateTestKey(self.slug + panel.get('title', 'panel')) - - panels.append(panel) - - return panels diff --git a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py index 1c81df722f7f..1dd2a7ae2f82 100644 --- a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py @@ -47,16 +47,3 @@ def add_label_context(self, label_instance, model_instance, request, context): context: The context dictionary to add to """ pass - - def report_callback(self, template, instance, report, request): - """Callback function called after a report is generated. - - Arguments: - template: The ReportTemplate model - instance: The instance of the target model - report: The generated report object - request: The initiating request object - - The default implementation does nothing. - """ - pass diff --git a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py index 8b350a7ed100..a6cad702f766 100644 --- a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py @@ -5,7 +5,6 @@ from django.conf import settings from django.db.utils import OperationalError, ProgrammingError -from common.settings import get_global_setting from plugin.helpers import MixinImplementationError logger = logging.getLogger('inventree') @@ -61,10 +60,14 @@ def _activate_mixin(cls, registry, plugins, *args, **kwargs): """Activate schedules from plugins with the ScheduleMixin.""" logger.debug('Activating plugin tasks') + from common.models import InvenTreeSetting + # List of tasks we have activated task_keys = [] - if settings.PLUGIN_TESTING or get_global_setting('ENABLE_PLUGINS_SCHEDULE'): + if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting( + 'ENABLE_PLUGINS_SCHEDULE' + ): for _key, plugin in plugins: if plugin.mixin_enabled('schedule') and plugin.is_active(): # Only active tasks for plugins which are enabled diff --git a/src/backend/InvenTree/plugin/base/integration/UrlsMixin.py b/src/backend/InvenTree/plugin/base/integration/UrlsMixin.py index aa526b2dab04..7a5972c0d8f6 100644 --- a/src/backend/InvenTree/plugin/base/integration/UrlsMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/UrlsMixin.py @@ -5,7 +5,6 @@ from django.conf import settings from django.urls import include, re_path -from common.settings import get_global_setting from plugin.urls import PLUGIN_BASE logger = logging.getLogger('inventree') @@ -37,7 +36,11 @@ def _activate_mixin( force_reload (bool, optional): Only reload base apps. Defaults to False. full_reload (bool, optional): Reload everything - including plugin mechanism. Defaults to False. """ - if settings.PLUGIN_TESTING or get_global_setting('ENABLE_PLUGINS_URL'): + from common.models import InvenTreeSetting + + if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting( + 'ENABLE_PLUGINS_URL' + ): logger.info('Registering UrlsMixin Plugin') urls_changed = False # check whether an activated plugin extends UrlsMixin diff --git a/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py b/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py index 3f60b44753fd..285069b9f2a6 100644 --- a/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py @@ -1,7 +1,6 @@ """Validation mixin class definition.""" from django.core.exceptions import ValidationError -from django.db.models import Model import part.models import stock.models @@ -50,24 +49,7 @@ def raise_error(self, message): """Raise a ValidationError with the given message.""" raise ValidationError(message) - def validate_model_deletion(self, instance: Model) -> None: - """Run custom validation when a model instance is being deleted. - - This method is called when a model instance is being deleted. - It allows the plugin to raise a ValidationError if the instance cannot be deleted. - - Arguments: - instance: The model instance to validate - - Returns: - None: or True (refer to class docstring) - - Raises: - ValidationError: If the instance cannot be deleted - """ - return None - - def validate_model_instance(self, instance: Model, deltas: dict = None) -> None: + def validate_model_instance(self, instance, deltas=None): """Run custom validation on a database model instance. This method is called when a model instance is being validated. @@ -78,14 +60,14 @@ def validate_model_instance(self, instance: Model, deltas: dict = None) -> None: deltas: A dictionary of field names and updated values (if the instance is being updated) Returns: - None: or True (refer to class docstring) + None or True (refer to class docstring) Raises: - ValidationError: If the instance is invalid + ValidationError if the instance is invalid """ return None - def validate_part_name(self, name: str, part: part.models.Part) -> None: + def validate_part_name(self, name: str, part: part.models.Part): """Perform validation on a proposed Part name. Arguments: @@ -96,11 +78,11 @@ def validate_part_name(self, name: str, part: part.models.Part) -> None: None or True (refer to class docstring) Raises: - ValidationError: If the proposed name is objectionable + ValidationError if the proposed name is objectionable """ return None - def validate_part_ipn(self, ipn: str, part: part.models.Part) -> None: + def validate_part_ipn(self, ipn: str, part: part.models.Part): """Perform validation on a proposed Part IPN (internal part number). Arguments: @@ -111,13 +93,11 @@ def validate_part_ipn(self, ipn: str, part: part.models.Part) -> None: None or True (refer to class docstring) Raises: - ValidationError: If the proposed IPN is objectionable + ValidationError if the proposed IPN is objectionable """ return None - def validate_batch_code( - self, batch_code: str, item: stock.models.StockItem - ) -> None: + def validate_batch_code(self, batch_code: str, item: stock.models.StockItem): """Validate the supplied batch code. Arguments: @@ -128,45 +108,34 @@ def validate_batch_code( None or True (refer to class docstring) Raises: - ValidationError: If the proposed batch code is objectionable + ValidationError if the proposed batch code is objectionable """ return None - def generate_batch_code(self, **kwargs) -> str: + def generate_batch_code(self): """Generate a new batch code. - This method is called when a new batch code is required. - - kwargs: - Any additional keyword arguments which are passed through to the plugin, based on the context of the caller - Returns: A new batch code (string) or None """ return None - def validate_serial_number( - self, - serial: str, - part: part.models.Part, - stock_item: stock.models.StockItem = None, - ) -> None: + def validate_serial_number(self, serial: str, part: part.models.Part): """Validate the supplied serial number. Arguments: serial: The proposed serial number (string) part: The Part instance for which this serial number is being validated - stock_item: The StockItem instance for which this serial number is being validated (if applicable) Returns: None or True (refer to class docstring) Raises: - ValidationError: If the proposed serial is objectionable + ValidationError if the proposed serial is objectionable """ return None - def convert_serial_to_int(self, serial: str) -> int: + def convert_serial_to_int(self, serial: str): """Convert a serial number (string) into an integer representation. This integer value is used for efficient sorting based on serial numbers. @@ -187,7 +156,7 @@ def convert_serial_to_int(self, serial: str) -> int: """ return None - def increment_serial_number(self, serial: str) -> str: + def increment_serial_number(self, serial: str): """Return the next sequential serial based on the provided value. A plugin which implements this method can either return: @@ -197,15 +166,10 @@ def increment_serial_number(self, serial: str) -> str: Arguments: serial: Current serial value (string) - - Returns: - The next serial number in the sequence (string), or None """ return None - def validate_part_parameter( - self, parameter: part.models.PartParameter, data: str - ) -> None: + def validate_part_parameter(self, parameter, data): """Validate a parameter value. Arguments: @@ -216,6 +180,6 @@ def validate_part_parameter( None or True (refer to class docstring) Raises: - ValidationError: If the proposed parameter value is objectionable + ValidationError if the proposed parameter value is objectionable """ pass diff --git a/src/backend/InvenTree/plugin/base/integration/mixins.py b/src/backend/InvenTree/plugin/base/integration/mixins.py index 5644dc8f8e93..0421472483fe 100644 --- a/src/backend/InvenTree/plugin/base/integration/mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/mixins.py @@ -2,7 +2,8 @@ import logging -from plugin.helpers import MixinNotImplementedError +from InvenTree.helpers import generateTestKey +from plugin.helpers import MixinNotImplementedError, render_template, render_text logger = logging.getLogger('inventree') @@ -53,6 +54,144 @@ def navigation_icon(self): return getattr(self, 'NAVIGATION_TAB_ICON', 'fas fa-question') +class PanelMixin: + """Mixin which allows integration of custom 'panels' into a particular page. + + The mixin provides a number of key functionalities: + + - Adds an (initially hidden) panel to the page + - Allows rendering of custom templated content to the panel + - Adds a menu item to the 'navbar' on the left side of the screen + - Allows custom javascript to be run when the panel is initially loaded + + The PanelMixin class allows multiple panels to be returned for any page, + and also allows the plugin to return panels for many different pages. + + Any class implementing this mixin must provide the 'get_custom_panels' method, + which dynamically returns the custom panels for a particular page. + + This method is provided with: + + - view : The View object which is being rendered + - request : The HTTPRequest object + + Note that as this is called dynamically (per request), + then the actual panels returned can vary depending on the particular request or page + + The 'get_custom_panels' method must return a list of dict objects, each with the following keys: + + - title : The title of the panel, to appear in the sidebar menu + - description : Extra descriptive text (optional) + - icon : The icon to appear in the sidebar menu + - content : The HTML content to appear in the panel, OR + - content_template : A template file which will be rendered to produce the panel content + - javascript : The javascript content to be rendered when the panel is loaded, OR + - javascript_template : A template file which will be rendered to produce javascript + + e.g. + + { + 'title': "Updates", + 'description': "Latest updates for this part", + 'javascript': 'alert("You just loaded this panel!")', + 'content': 'Hello world', + } + """ + + class MixinMeta: + """Meta for mixin.""" + + MIXIN_NAME = 'Panel' + + def __init__(self): + """Register mixin.""" + super().__init__() + self.add_mixin('panel', True, __class__) + + def get_custom_panels(self, view, request): + """This method *must* be implemented by the plugin class.""" + raise MixinNotImplementedError( + f"{__class__} is missing the 'get_custom_panels' method" + ) + + def get_panel_context(self, view, request, context): + """Build the context data to be used for template rendering. + + Custom class can override this to provide any custom context data. + + (See the example in "custom_panel_sample.py") + """ + # Provide some standard context items to the template for rendering + context['plugin'] = self + context['request'] = request + context['user'] = getattr(request, 'user', None) + context['view'] = view + + try: + context['object'] = view.get_object() + except AttributeError: # pragma: no cover + pass + + return context + + def render_panels(self, view, request, context): + """Get panels for a view. + + Args: + view: Current view context + request: Current request for passthrough + context: Rendering context + + Returns: + Array of panels + """ + panels = [] + + # Construct an updated context object for template rendering + ctx = self.get_panel_context(view, request, context) + + custom_panels = self.get_custom_panels(view, request) or [] + + for panel in custom_panels: + content_template = panel.get('content_template', None) + javascript_template = panel.get('javascript_template', None) + + if content_template: + # Render content template to HTML + panel['content'] = render_template(self, content_template, ctx) + else: + # Render content string to HTML + panel['content'] = render_text(panel.get('content', ''), ctx) + + if javascript_template: + # Render javascript template to HTML + panel['javascript'] = render_template(self, javascript_template, ctx) + else: + # Render javascript string to HTML + panel['javascript'] = render_text(panel.get('javascript', ''), ctx) + + # Check for required keys + required_keys = ['title', 'content'] + + if any(key not in panel for key in required_keys): + logger.warning( + 'Custom panel for plugin %s is missing a required parameter', + __class__, + ) + continue + + # Add some information on this plugin + panel['plugin'] = self + panel['slug'] = self.slug + + # Add a 'key' for the panel, which is mostly guaranteed to be unique + panel['key'] = generateTestKey(self.slug + panel.get('title', 'panel')) + + panels.append(panel) + + return panels + + class SettingsContentMixin: """Mixin which allows integration of custom HTML content into a plugins settings page. diff --git a/src/backend/InvenTree/plugin/base/integration/test_mixins.py b/src/backend/InvenTree/plugin/base/integration/test_mixins.py index 43bd7b9d1fc1..0cba7f5854c0 100644 --- a/src/backend/InvenTree/plugin/base/integration/test_mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/test_mixins.py @@ -10,7 +10,7 @@ from InvenTree.unit_test import InvenTreeTestCase from plugin import InvenTreePlugin -from plugin.base.integration.PanelMixin import PanelMixin +from plugin.base.integration.mixins import PanelMixin from plugin.helpers import MixinNotImplementedError from plugin.mixins import ( APICallMixin, @@ -351,7 +351,7 @@ def test_installed(self): """Test that the sample panel plugin is installed.""" plugins = registry.with_mixin('panel') - self.assertEqual(len(plugins), 0) + self.assertTrue(len(plugins) == 0) # Now enable the plugin registry.set_plugin_state('samplepanel', True) diff --git a/src/backend/InvenTree/plugin/base/label/mixins.py b/src/backend/InvenTree/plugin/base/label/mixins.py index 16660dc6c368..736d431d0069 100644 --- a/src/backend/InvenTree/plugin/base/label/mixins.py +++ b/src/backend/InvenTree/plugin/base/label/mixins.py @@ -3,18 +3,25 @@ from typing import Union from django.core.exceptions import ValidationError +from django.db.models.query import QuerySet +from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import pdf2image from rest_framework import serializers from rest_framework.request import Request +from build.models import BuildLine from common.models import InvenTreeSetting from InvenTree.exceptions import log_error from InvenTree.tasks import offload_task +from label.models import LabelTemplate +from part.models import Part from plugin.base.label import label as plugin_label from plugin.helpers import MixinNotImplementedError -from report.models import LabelTemplate, TemplateOutput +from stock.models import StockItem, StockLocation + +LabelItemType = Union[StockItem, StockLocation, Part, BuildLine] class LabelPrintingMixin: @@ -27,6 +34,11 @@ class LabelPrintingMixin: Note that the print_labels() function can also be overridden to provide custom behavior. """ + # If True, the print_label() method will block until the label is printed + # If False, the offload_label() method will be called instead + # By default, this is False, which means that labels will be printed in the background + BLOCKING_PRINT = False + class MixinMeta: """Meta options for this mixin.""" @@ -37,42 +49,37 @@ def __init__(self): # pragma: no cover super().__init__() self.add_mixin('labels', True, __class__) - BLOCKING_PRINT = True - - def render_to_pdf(self, label: LabelTemplate, instance, request, **kwargs): + def render_to_pdf(self, label: LabelTemplate, request, **kwargs): """Render this label to PDF format. Arguments: - label: The LabelTemplate object to render against - instance: The model instance to render + label: The LabelTemplate object to render request: The HTTP request object which triggered this print job """ try: - return label.render(instance, request) + return label.render(request) except Exception: log_error('label.render_to_pdf') raise ValidationError(_('Error rendering label to PDF')) - def render_to_html(self, label: LabelTemplate, instance, request, **kwargs): + def render_to_html(self, label: LabelTemplate, request, **kwargs): """Render this label to HTML format. Arguments: - label: The LabelTemplate object to render against - instance: The model instance to render + label: The LabelTemplate object to render request: The HTTP request object which triggered this print job """ try: - return label.render_as_string(instance, request) + return label.render_as_string(request) except Exception: log_error('label.render_to_html') raise ValidationError(_('Error rendering label to HTML')) - def render_to_png(self, label: LabelTemplate, instance, request=None, **kwargs): + def render_to_png(self, label: LabelTemplate, request=None, **kwargs): """Render this label to PNG format. Arguments: - label: The LabelTemplate object to render against - item: The model instance to render + label: The LabelTemplate object to render request: The HTTP request object which triggered this print job Keyword Arguments: pdf_data: The raw PDF data of the rendered label (if already rendered) @@ -87,9 +94,7 @@ def render_to_png(self, label: LabelTemplate, instance, request=None, **kwargs): if not pdf_data: pdf_data = ( - self.render_to_pdf(label, instance, request, **kwargs) - .get_document() - .write_pdf() + self.render_to_pdf(label, request, **kwargs).get_document().write_pdf() ) pdf2image_kwargs = { @@ -103,21 +108,19 @@ def render_to_png(self, label: LabelTemplate, instance, request=None, **kwargs): return pdf2image.convert_from_bytes(pdf_data, **pdf2image_kwargs)[0] except Exception: log_error('label.render_to_png') - return None + raise ValidationError(_('Error rendering label to PNG')) def print_labels( self, label: LabelTemplate, - output: TemplateOutput, - items: list, + items: QuerySet[LabelItemType], request: Request, **kwargs, - ) -> None: + ): """Print one or more labels with the provided template and items. Arguments: label: The LabelTemplate object to use for printing - output: The TemplateOutput object used to store the results items: The list of database items to print (e.g. StockItem instances) request: The HTTP request object which triggered this print job @@ -125,10 +128,7 @@ def print_labels( printing_options: The printing options set for this print job defined in the PrintingOptionsSerializer Returns: - None. Output data should be stored in the provided TemplateOutput object - - Raises: - ValidationError if there is an error during the print process + A JSONResponse object which indicates outcome to the user The default implementation simply calls print_label() for each label, producing multiple single label output "jobs" but this can be overridden by the particular plugin. @@ -138,33 +138,19 @@ def print_labels( except AttributeError: user = None - # Initial state for the output print job - output.progress = 0 - output.complete = False - output.save() - - N = len(items) - - if N <= 0: - raise ValidationError(_('No items provided to print')) - # Generate a label output for each provided item for item in items: - context = label.get_context(item, request) - filename = label.generate_filename(context) - pdf_file = self.render_to_pdf(label, item, request, **kwargs) + label.object_to_print = item + filename = label.generate_filename(request) + pdf_file = self.render_to_pdf(label, request, **kwargs) pdf_data = pdf_file.get_document().write_pdf() - png_file = self.render_to_png( - label, item, request, pdf_data=pdf_data, **kwargs - ) + png_file = self.render_to_png(label, request, pdf_data=pdf_data, **kwargs) print_args = { 'pdf_file': pdf_file, 'pdf_data': pdf_data, 'png_file': png_file, 'filename': filename, - 'context': context, - 'output': output, 'label_instance': label, 'item_instance': item, 'user': user, @@ -174,38 +160,19 @@ def print_labels( } if self.BLOCKING_PRINT: - # Print the label (blocking) + # Blocking print job self.print_label(**print_args) else: - # Offload the print task to the background worker - - # Exclude the 'pdf_file' object - cannot be pickled - print_args.pop('pdf_file', None) - - # Exclude the 'context' object - cannot be pickled - print_args.pop('context', None) - - offload_task(plugin_label.print_label, self.plugin_slug(), **print_args) + # Non-blocking print job - # Update the progress of the print job - output.progress += int(100 / N) - output.save() + # Offload the print job to a background worker + self.offload_label(**print_args) - # Mark the output as complete - output.complete = True - output.progress = 100 - - # Add in the generated file (if applicable) - output.output = self.get_generated_file(**print_args) - - output.save() - - def get_generated_file(self, **kwargs): - """Return the generated file for download (or None, if this plugin does not generate a file output). - - The default implementation returns None, but this can be overridden by the particular plugin. - """ - return None + # Return a JSON response to the user + return JsonResponse({ + 'success': True, + 'message': f'{len(items)} labels printed', + }) def print_label(self, **kwargs): """Print a single label (blocking). @@ -216,7 +183,6 @@ def print_label(self, **kwargs): filename: The filename of this PDF label label_instance: The instance of the label model which triggered the print_label() method item_instance: The instance of the database model against which the label is printed - output: The TemplateOutput object used to store the results of the print job user: The user who triggered this print job width: The expected width of the label (in mm) height: The expected height of the label (in mm) @@ -229,6 +195,19 @@ def print_label(self, **kwargs): 'This Plugin must implement a `print_label` method' ) + def offload_label(self, **kwargs): + """Offload a single label (non-blocking). + + Instead of immediately printing the label (which is a blocking process), + this method should offload the label to a background worker process. + + Offloads a call to the 'print_label' method (of this plugin) to a background worker. + """ + # Exclude the 'pdf_file' object - cannot be pickled + kwargs.pop('pdf_file', None) + + offload_task(plugin_label.print_label, self.plugin_slug(), **kwargs) + def get_printing_options_serializer( self, request: Request, *args, **kwargs ) -> Union[serializers.Serializer, None]: @@ -248,11 +227,3 @@ def get_printing_options_serializer( return None return serializer(*args, **kwargs) - - def before_printing(self): - """Hook method called before printing labels.""" - pass - - def after_printing(self): - """Hook method called after printing labels.""" - pass diff --git a/src/backend/InvenTree/plugin/base/label/test_label_mixin.py b/src/backend/InvenTree/plugin/base/label/test_label_mixin.py index c95fb4036bc6..29b986af0cee 100644 --- a/src/backend/InvenTree/plugin/base/label/test_label_mixin.py +++ b/src/backend/InvenTree/plugin/base/label/test_label_mixin.py @@ -12,28 +12,62 @@ from InvenTree.settings import BASE_DIR from InvenTree.unit_test import InvenTreeAPITestCase +from label.models import PartLabel, StockItemLabel, StockLocationLabel from part.models import Part from plugin.base.label.mixins import LabelPrintingMixin from plugin.helpers import MixinNotImplementedError from plugin.plugin import InvenTreePlugin from plugin.registry import registry -from report.models import LabelTemplate -from report.tests import PrintTestMixins from stock.models import StockItem, StockLocation -class LabelMixinTests(PrintTestMixins, InvenTreeAPITestCase): +class LabelMixinTests(InvenTreeAPITestCase): """Test that the Label mixin operates correctly.""" fixtures = ['category', 'part', 'location', 'stock'] roles = 'all' - plugin_ref = 'samplelabelprinter' - @property - def printing_url(self): - """Return the label printing URL.""" - return reverse('api-label-print') + def do_activate_plugin(self): + """Activate the 'samplelabel' plugin.""" + config = registry.get_plugin('samplelabelprinter').plugin_config() + config.active = True + config.save() + + def do_url( + self, + parts, + plugin_ref, + label, + url_name: str = 'api-part-label-print', + url_single: str = 'part', + invalid: bool = False, + ): + """Generate an URL to print a label.""" + # Construct URL + kwargs = {} + if label: + kwargs['pk'] = label.pk + + url = reverse(url_name, kwargs=kwargs) + + # Append part filters + if not parts: + pass + elif len(parts) == 1: + url += f'?{url_single}={parts[0].pk}' + elif len(parts) > 1: + url += '?' + '&'.join([f'{url_single}s={item.pk}' for item in parts]) + + # Append an invalid item + if invalid: + url += f'&{url_single}{"s" if len(parts) > 1 else ""}=abc' + + # Append plugin reference + if plugin_ref: + url += f'&plugin={plugin_ref}' + + return url def test_wrong_implementation(self): """Test that a wrong implementation raises an error.""" @@ -87,107 +121,52 @@ def test_api(self): def test_printing_process(self): """Test that a label can be printed.""" # Ensure the labels were created - apps.get_app_config('report').create_default_labels() - apps.get_app_config('report').create_default_reports() - - test_path = BASE_DIR / '_testfolder' / 'label' + apps.get_app_config('label').create_defaults() + # Lookup references + part = Part.objects.first() parts = Part.objects.all()[:2] + plugin_ref = 'samplelabelprinter' + label = PartLabel.objects.first() - template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() - - self.assertIsNotNone(template) - self.assertTrue(template.enabled) - - url = self.printing_url + url = self.do_url([part], plugin_ref, label) - # Template does not exist - response = self.post( - url, {'template': 9999, 'plugin': 9999, 'items': []}, expected_code=400 + # Non-existing plugin + response = self.get(f'{url}123', expected_code=404) + self.assertIn( + f"Plugin '{plugin_ref}123' not found", str(response.content, 'utf8') ) - self.assertIn('object does not exist', str(response.data['template'])) - self.assertIn('list may not be empty', str(response.data['items'])) - - # Plugin is not a label plugin - no_valid_plg = registry.get_plugin('digikeyplugin').plugin_config() - - response = self.post( - url, - {'template': template.pk, 'plugin': no_valid_plg.key, 'items': [1, 2, 3]}, - expected_code=400, + # Inactive plugin + response = self.get(url, expected_code=400) + self.assertIn( + f"Plugin '{plugin_ref}' is not enabled", str(response.content, 'utf8') ) - self.assertIn('Plugin does not support label printing', str(response.data)) - - # Find available plugins - plugins = registry.with_mixin('labels') - self.assertGreater(len(plugins), 0) - - plugin = registry.get_plugin('samplelabelprinter') - self.assertIsNotNone(plugin) - config = plugin.plugin_config() - - # Ensure that the plugin is not active - registry.set_plugin_state(plugin.slug, False) - - # Plugin is not active - should return error - response = self.post( - url, - {'template': template.pk, 'plugin': config.key, 'items': [1, 2, 3]}, - expected_code=400, - ) - self.assertIn('Plugin is not active', str(response.data['plugin'])) - # Active plugin self.do_activate_plugin() # Print one part - response = self.post( - url, - {'template': template.pk, 'plugin': config.key, 'items': [parts[0].pk]}, - expected_code=201, - ) - - self.assertEqual(response.data['plugin'], 'samplelabelprinter') - self.assertIsNone(response.data['output']) + self.get(url, expected_code=200) # Print multiple parts - response = self.post( - url, - { - 'template': template.pk, - 'plugin': config.key, - 'items': [item.pk for item in parts], - }, - expected_code=201, - ) - - self.assertEqual(response.data['plugin'], 'samplelabelprinter') - self.assertIsNone(response.data['output']) + self.get(self.do_url(parts, plugin_ref, label), expected_code=200) # Print multiple parts without a plugin - response = self.post( - url, - {'template': template.pk, 'items': [item.pk for item in parts]}, - expected_code=201, - ) + self.get(self.do_url(parts, None, label), expected_code=200) - self.assertEqual(response.data['plugin'], 'inventreelabel') - self.assertIsNotNone(response.data['output']) + # Print multiple parts without a plugin in debug mode + response = self.get(self.do_url(parts, None, label), expected_code=200) data = json.loads(response.content) - self.assertIn('output', data) + self.assertIn('file', data) # Print no part - self.post( - url, - {'template': template.pk, 'plugin': plugin.pk, 'items': None}, - expected_code=400, - ) + self.get(self.do_url(None, plugin_ref, label), expected_code=400) # Test that the labels have been printed # The sample labelling plugin simply prints to file + test_path = BASE_DIR / '_testfolder' / 'label' self.assertTrue(os.path.exists(f'{test_path}.pdf')) # Read the raw .pdf data - ensure it contains some sensible information @@ -204,45 +183,37 @@ def test_printing_process(self): def test_printing_options(self): """Test printing options.""" # Ensure the labels were created - apps.get_app_config('report').create_default_labels() + apps.get_app_config('label').create_defaults() # Lookup references parts = Part.objects.all()[:2] - template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() + plugin_ref = 'samplelabelprinter' + label = PartLabel.objects.first() + self.do_activate_plugin() - plugin = registry.get_plugin(self.plugin_ref) # test options response options = self.options( - self.printing_url, data={'plugin': plugin.slug}, expected_code=200 + self.do_url(parts, plugin_ref, label), expected_code=200 ).json() - self.assertIn('amount', options['actions']['POST']) + self.assertTrue('amount' in options['actions']['POST']) - with mock.patch.object(plugin, 'print_label') as print_label: + plg = registry.get_plugin(plugin_ref) + with mock.patch.object(plg, 'print_label') as print_label: # wrong value type res = self.post( - self.printing_url, - { - 'plugin': plugin.slug, - 'template': template.pk, - 'items': [a.pk for a in parts], - 'amount': '-no-valid-int-', - }, + self.do_url(parts, plugin_ref, label), + data={'amount': '-no-valid-int-'}, expected_code=400, ).json() - self.assertIn('amount', res) + self.assertTrue('amount' in res) print_label.assert_not_called() # correct value type self.post( - self.printing_url, - { - 'template': template.pk, - 'plugin': plugin.slug, - 'items': [a.pk for a in parts], - 'amount': 13, - }, - expected_code=201, + self.do_url(parts, plugin_ref, label), + data={'amount': 13}, + expected_code=200, ).json() self.assertEqual( print_label.call_args.kwargs['printing_options'], {'amount': 13} @@ -250,15 +221,57 @@ def test_printing_options(self): def test_printing_endpoints(self): """Cover the endpoints not covered by `test_printing_process`.""" + plugin_ref = 'samplelabelprinter' + # Activate the label components - apps.get_app_config('report').create_default_labels() + apps.get_app_config('label').create_defaults() self.do_activate_plugin() - # Test StockItemLabel - self.run_print_test(StockItem, 'stockitem') + def run_print_test(label, qs, url_name, url_single): + """Run tests on single and multiple page printing. + + Args: + label: class of the label + qs: class of the base queryset + url_name: url for endpoints + url_single: item lookup reference + """ + label = label.objects.first() + qs = qs.objects.all() + + # List endpoint + self.get( + self.do_url(None, None, None, f'{url_name}-list', url_single), + expected_code=200, + ) - # Test StockLocationLabel - self.run_print_test(StockLocation, 'stocklocation') + # List endpoint with filter + self.get( + self.do_url( + qs[:2], None, None, f'{url_name}-list', url_single, invalid=True + ), + expected_code=200, + ) + + # Single page printing + self.get( + self.do_url(qs[:1], plugin_ref, label, f'{url_name}-print', url_single), + expected_code=200, + ) + + # Multi page printing + self.get( + self.do_url(qs[:2], plugin_ref, label, f'{url_name}-print', url_single), + expected_code=200, + ) + + # Test StockItemLabels + run_print_test(StockItemLabel, StockItem, 'api-stockitem-label', 'item') + + # Test StockLocationLabels + run_print_test( + StockLocationLabel, StockLocation, 'api-stocklocation-label', 'location' + ) - # Test PartLabel - self.run_print_test(Part, 'part') + # Test PartLabels + run_print_test(PartLabel, Part, 'api-part-label', 'part') diff --git a/src/backend/InvenTree/plugin/base/locate/api.py b/src/backend/InvenTree/plugin/base/locate/api.py index 948d67bb6191..8d37505b3ad0 100644 --- a/src/backend/InvenTree/plugin/base/locate/api.py +++ b/src/backend/InvenTree/plugin/base/locate/api.py @@ -1,5 +1,6 @@ """API for location plugins.""" +from drf_spectacular.utils import OpenApiResponse, extend_schema from rest_framework import permissions, serializers from rest_framework.exceptions import NotFound, ParseError from rest_framework.generics import GenericAPIView diff --git a/src/backend/InvenTree/plugin/base/locate/test_locate.py b/src/backend/InvenTree/plugin/base/locate/test_locate.py index e03070a4112f..4bc152d71c23 100644 --- a/src/backend/InvenTree/plugin/base/locate/test_locate.py +++ b/src/backend/InvenTree/plugin/base/locate/test_locate.py @@ -26,9 +26,9 @@ def test_installed(self): """Test that a locate plugin is actually installed.""" plugins = registry.with_mixin('locate') - self.assertGreater(len(plugins), 0) + self.assertTrue(len(plugins) > 0) - self.assertIn('samplelocate', [p.slug for p in plugins]) + self.assertTrue('samplelocate' in [p.slug for p in plugins]) def test_locate_fail(self): """Test various API failure modes.""" diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index c3c0f75e2a77..78f694424db7 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -8,45 +8,29 @@ """ import json -import re -from typing import cast from django.utils.translation import gettext_lazy as _ -import plugin.base.barcodes.helper from InvenTree.helpers import hash_barcode +from InvenTree.helpers_model import getModelsWithMixin from InvenTree.models import InvenTreeBarcodeMixin from plugin import InvenTreePlugin -from plugin.mixins import BarcodeMixin, SettingsMixin +from plugin.mixins import BarcodeMixin -class InvenTreeInternalBarcodePlugin(SettingsMixin, BarcodeMixin, InvenTreePlugin): +class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): """Builtin BarcodePlugin for matching and generating internal barcodes.""" NAME = 'InvenTreeBarcode' TITLE = _('InvenTree Barcodes') DESCRIPTION = _('Provides native support for barcodes') - VERSION = '2.1.0' + VERSION = '2.0.0' AUTHOR = _('InvenTree contributors') - SETTINGS = { - 'INTERNAL_BARCODE_FORMAT': { - 'name': _('Internal Barcode Format'), - 'description': _('Select an internal barcode format'), - 'choices': [ - ('json', _('JSON barcodes (human readable)')), - ('short', _('Short barcodes (space optimized)')), - ], - 'default': 'json', - }, - 'SHORT_BARCODE_PREFIX': { - 'name': _('Short Barcode Prefix'), - 'description': _( - 'Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances' - ), - 'default': 'INV-', - }, - } + @staticmethod + def get_supported_barcode_models(): + """Returns a list of database models which support barcode functionality.""" + return getModelsWithMixin(InvenTreeBarcodeMixin) def format_matched_response(self, label, model, instance): """Format a response for the scanned data.""" @@ -57,35 +41,8 @@ def scan(self, barcode_data): Here we are looking for a dict object which contains a reference to a particular InvenTree database object """ - # Internal Barcodes - Short Format - # Attempt to match the barcode data against the short barcode format - prefix = cast(str, self.get_setting('SHORT_BARCODE_PREFIX')) - if type(barcode_data) is str and ( - m := re.match( - f'^{re.escape(prefix)}([0-9A-Z $%*+-.\\/:]{"{2}"})(\\d+)$', barcode_data - ) - ): - model_type_code, pk = m.groups() - - supported_models_map = ( - plugin.base.barcodes.helper.get_supported_barcode_model_codes_map() - ) - model = supported_models_map.get(model_type_code, None) - - if model is None: - return None - - label = model.barcode_model_type() - - try: - instance = model.objects.get(pk=int(pk)) - return self.format_matched_response(label, model, instance) - except (ValueError, model.DoesNotExist): - pass - - # Internal Barcodes - JSON Format # Attempt to coerce the barcode data into a dict object - # This is the internal JSON barcode representation that InvenTree uses + # This is the internal barcode representation that InvenTree uses barcode_dict = None if type(barcode_data) is dict: @@ -96,7 +53,7 @@ def scan(self, barcode_data): except json.JSONDecodeError: pass - supported_models = plugin.base.barcodes.helper.get_supported_barcode_models() + supported_models = self.get_supported_barcode_models() if barcode_dict is not None and type(barcode_dict) is dict: # Look for various matches. First good match will be returned @@ -111,7 +68,6 @@ def scan(self, barcode_data): except (ValueError, model.DoesNotExist): pass - # External Barcodes (Linked barcodes) # Create hash from raw barcode data barcode_hash = hash_barcode(barcode_data) @@ -123,18 +79,3 @@ def scan(self, barcode_data): if instance is not None: return self.format_matched_response(label, model, instance) - - def generate(self, model_instance: InvenTreeBarcodeMixin): - """Generate a barcode for a given model instance.""" - barcode_format = self.get_setting('INTERNAL_BARCODE_FORMAT') - - if barcode_format == 'json': - return json.dumps({model_instance.barcode_model_type(): model_instance.pk}) - - if barcode_format == 'short': - prefix = self.get_setting('SHORT_BARCODE_PREFIX') - model_type_code = model_instance.barcode_model_type_code() - - return f'{prefix}{model_type_code}{model_instance.pk}' - - return None diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py index aab979d2db97..4f5a4b405ca1 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -19,6 +19,7 @@ def test_assign_errors(self): def test_assert_error(barcode_data): response = self.post( reverse('api-barcode-link'), + format='json', data={'barcode': barcode_data, 'stockitem': 521}, expected_code=400, ) @@ -52,21 +53,6 @@ def scan(self, data, expected_code=None): reverse('api-barcode-scan'), data=data, expected_code=expected_code ) - def generate(self, model: str, pk: int, expected_code: int): - """Generate a barcode for a given model instance.""" - return self.post( - reverse('api-barcode-generate'), - data={'model': model, 'pk': pk}, - expected_code=expected_code, - ) - - def set_plugin_setting(self, key: str, value: str): - """Set the internal barcode format for the plugin.""" - from plugin import registry - - plugin = registry.get_plugin('inventreebarcode') - plugin.set_setting(key, value) - def test_unassign_errors(self): """Test various error conditions for the barcode unassign endpoint.""" # Fail without any fields provided @@ -263,8 +249,8 @@ def test_scan_third_party(self): self.assertIn('success', response.data) self.assertEqual(response.data['stockitem']['pk'], 1) - def test_scan_inventree_json(self): - """Test scanning of first-party json barcodes.""" + def test_scan_inventree(self): + """Test scanning of first-party barcodes.""" # Scan a StockItem object (which does not exist) response = self.scan({'barcode': '{"stockitem": 5}'}, expected_code=400) @@ -305,73 +291,3 @@ def test_scan_inventree_json(self): self.assertIn('success', response.data) self.assertIn('barcode_data', response.data) self.assertIn('barcode_hash', response.data) - - def test_scan_inventree_short(self): - """Test scanning of first-party short barcodes.""" - # Scan a StockItem object (which does not exist) - response = self.scan({'barcode': 'INV-SI5'}, expected_code=400) - - self.assertIn('No match found for barcode data', str(response.data)) - - # Scan a StockItem object (which does exist) - response = self.scan({'barcode': 'INV-SI1'}, expected_code=200) - - self.assertIn('success', response.data) - self.assertIn('stockitem', response.data) - self.assertEqual(response.data['stockitem']['pk'], 1) - - # Scan a StockLocation object - response = self.scan({'barcode': 'INV-SL5'}, expected_code=200) - - self.assertIn('success', response.data) - self.assertEqual(response.data['stocklocation']['pk'], 5) - self.assertEqual( - response.data['stocklocation']['api_url'], '/api/stock/location/5/' - ) - if settings.ENABLE_CLASSIC_FRONTEND: - self.assertEqual( - response.data['stocklocation']['web_url'], '/stock/location/5/' - ) - self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') - - # Scan a Part object - response = self.scan({'barcode': 'INV-PA5'}, expected_code=200) - - self.assertEqual(response.data['part']['pk'], 5) - - # Scan a SupplierPart instance with custom prefix - for prefix in ['TEST', '']: - self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) - response = self.scan({'barcode': f'{prefix}SP1'}, expected_code=200) - self.assertEqual(response.data['supplierpart']['pk'], 1) - self.assertEqual(response.data['plugin'], 'InvenTreeBarcode') - self.assertIn('success', response.data) - self.assertIn('barcode_data', response.data) - self.assertIn('barcode_hash', response.data) - - self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') - - def test_generation_inventree_json(self): - """Test JSON barcode generation.""" - item = stock.models.StockLocation.objects.get(pk=5) - data = self.generate('stocklocation', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], '{"stocklocation": 5}') - - def test_generation_inventree_short(self): - """Test short barcode generation.""" - self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'short') - - item = stock.models.StockLocation.objects.get(pk=5) - - # test with default prefix - data = self.generate('stocklocation', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], 'INV-SL5') - - # test generation with custom prefix - for prefix in ['TEST', '']: - self.set_plugin_setting('SHORT_BARCODE_PREFIX', prefix) - data = self.generate('stocklocation', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], f'{prefix}SL5') - - self.set_plugin_setting('SHORT_BARCODE_PREFIX', 'INV-') - self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'json') diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py index a0480ec89f50..ed2d6c70d9b8 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py @@ -1,9 +1,10 @@ """Default label printing plugin (supports PDF generation).""" from django.core.files.base import ContentFile +from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ -from InvenTree.helpers import str2bool +from label.models import LabelOutput, LabelTemplate from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin @@ -18,7 +19,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): NAME = 'InvenTreeLabel' TITLE = _('InvenTree PDF label printer') DESCRIPTION = _('Provides native support for printing PDF labels') - VERSION = '1.1.0' + VERSION = '1.0.0' AUTHOR = _('InvenTree contributors') BLOCKING_PRINT = True @@ -32,48 +33,58 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): } } - # Keep track of individual label outputs - # These will be stitched together at the end of printing - outputs = [] + def print_labels(self, label: LabelTemplate, items: list, request, **kwargs): + """Handle printing of multiple labels. - def before_printing(self): - """Reset the list of label outputs.""" - self.outputs = [] + - Label outputs are concatenated together, and we return a single PDF file. + - If DEBUG mode is enabled, we return a single HTML file. + """ + debug = self.get_setting('DEBUG') - def print_label(self, **kwargs): - """Print a single label.""" - label = kwargs['label_instance'] - instance = kwargs['item_instance'] + outputs = [] + output_file = None - if str2bool(self.get_setting('DEBUG')): - # In debug mode, return raw HTML output - output = self.render_to_html(label, instance, None, **kwargs) - else: - # Output is already provided - output = kwargs['pdf_file'] + for item in items: + label.object_to_print = item - self.outputs.append(output) + outputs.append(self.print_label(label, request, debug=debug, **kwargs)) - def get_generated_file(self, **kwargs): - """Return the generated file, by stitching together the individual label outputs.""" - if len(self.outputs) == 0: - return None + if self.get_setting('DEBUG'): + html = '\n'.join(outputs) - if str2bool(self.get_setting('DEBUG')): - # Simple HTML output - data = '\n'.join(self.outputs) - filename = 'labels.html' + output_file = ContentFile(html, 'labels.html') else: - # Stitch together the PDF outputs pages = [] - for output in self.outputs: + # Following process is required to stitch labels together into a single PDF + for output in outputs: doc = output.get_document() for page in doc.pages: pages.append(page) - data = self.outputs[0].get_document().copy(pages).write_pdf() - filename = kwargs.get('filename', 'labels.pdf') + pdf = outputs[0].get_document().copy(pages).write_pdf() + + # Create label output file + output_file = ContentFile(pdf, 'labels.pdf') + + # Save the generated file to the database + output = LabelOutput.objects.create(label=output_file, user=request.user) + + return JsonResponse({ + 'file': output.label.url, + 'success': True, + 'message': f'{len(items)} labels generated', + }) + + def print_label(self, label: LabelTemplate, request, **kwargs): + """Handle printing of a single label. + + Returns either a PDF or HTML output, depending on the DEBUG setting. + """ + debug = kwargs.get('debug', self.get_setting('DEBUG')) + + if debug: + return self.render_to_html(label, request, **kwargs) - return ContentFile(data, name=filename) + return self.render_to_pdf(label, request, **kwargs) diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py index f147edad3c07..1d5d8c6651b8 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py @@ -10,11 +10,11 @@ from common.models import InvenTreeUserSetting from InvenTree.serializers import DependentField from InvenTree.tasks import offload_task +from label.models import LabelTemplate from machine.machine_types import LabelPrinterBaseDriver, LabelPrinterMachine from plugin import InvenTreePlugin from plugin.machine import registry from plugin.mixins import LabelPrintingMixin -from report.models import LabelTemplate def get_machine_and_driver(machine_pk: str): @@ -63,7 +63,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, InvenTreePlugin): VERSION = '1.0.0' AUTHOR = _('InvenTree contributors') - def print_labels(self, label: LabelTemplate, output, items, request, **kwargs): + def print_labels(self, label: LabelTemplate, items, request, **kwargs): """Print labels implementation that calls the correct machine driver print_labels method.""" machine, driver = get_machine_and_driver( kwargs['printing_options'].get('machine', '') @@ -93,9 +93,11 @@ def print_labels(self, label: LabelTemplate, output, items, request, **kwargs): # execute the print job if driver.USE_BACKGROUND_WORKER is False: - return driver.print_labels(machine, label, items, **print_kwargs) + return driver.print_labels(machine, label, items, request, **print_kwargs) - offload_task(driver.print_labels, machine, label, items, **print_kwargs) + offload_task( + driver.print_labels, machine, label, items, request, **print_kwargs + ) return JsonResponse({ 'success': True, @@ -109,10 +111,9 @@ def __init__(self, *args, **kwargs): """Custom __init__ method to dynamically override the machine choices based on the request.""" super().__init__(*args, **kwargs) - # TODO @matmair Re-enable this when the need is clear - # view = kwargs['context']['view'] - template = None # view.get_object() - items_to_print = None # view.get_items() + view = kwargs['context']['view'] + template = view.get_object() + items_to_print = view.get_items() # get all available printers for each driver machines: list[LabelPrinterMachine] = [] diff --git a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py index c58f4d6cb2d4..5f6ca952e460 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py +++ b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py @@ -5,16 +5,16 @@ from django.core.exceptions import ValidationError from django.core.files.base import ContentFile +from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import weasyprint from rest_framework import serializers import report.helpers -from InvenTree.helpers import str2bool +from label.models import LabelOutput, LabelTemplate from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin -from report.models import LabelOutput, LabelTemplate logger = logging.getLogger('inventree') @@ -64,24 +64,12 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug BLOCKING_PRINT = True - SETTINGS = { - 'DEBUG': { - 'name': _('Debug mode'), - 'description': _('Enable debug mode - returns raw HTML instead of PDF'), - 'validator': bool, - 'default': False, - } - } + SETTINGS = {} PrintingOptionsSerializer = LabelPrintingOptionsSerializer - def print_labels( - self, label: LabelTemplate, output: LabelOutput, items: list, request, **kwargs - ): - """Handle printing of the provided labels. - - Note that we override the entire print_labels method for this plugin. - """ + def print_labels(self, label: LabelTemplate, items: list, request, **kwargs): + """Handle printing of the provided labels.""" printing_options = kwargs['printing_options'] # Extract page size for the label sheet @@ -142,19 +130,19 @@ def print_labels( # Render to a single HTML document html_data = self.wrap_pages(pages, **document_data) - if str2bool(self.get_setting('DEBUG')): - # In debug mode return with the raw HTML - output.output = ContentFile(html_data, 'labels.html') - else: - # Render HTML to PDF - html = weasyprint.HTML(string=html_data) - document = html.render().write_pdf() + # Render HTML to PDF + html = weasyprint.HTML(string=html_data) + document = html.render().write_pdf() + + output_file = ContentFile(document, 'labels.pdf') - output.output = ContentFile(document, 'labels.pdf') + output = LabelOutput.objects.create(label=output_file, user=request.user) - output.progress = 100 - output.complete = True - output.save() + return JsonResponse({ + 'file': output.label.url, + 'success': True, + 'message': f'{len(items)} labels generated', + }) def print_page(self, label: LabelTemplate, items: list, request, **kwargs): """Generate a single page of labels. @@ -197,7 +185,7 @@ def print_page(self, label: LabelTemplate, items: list, request, **kwargs): # Render the individual label template # Note that we disable @page styling for this cell = label.render_as_string( - items[idx], request, insert_page_style=False + request, target_object=items[idx], insert_page_style=False ) html += cell except Exception as exc: diff --git a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py index dd9e8f50fb76..49bff6903e4b 100644 --- a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py +++ b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py @@ -198,7 +198,7 @@ def test_receive(self): result1 = self.post(url, data={'barcode': DIGIKEY_BARCODE}, expected_code=400) - self.assertTrue(result1.data['error'].startswith('No matching purchase order')) + assert result1.data['error'].startswith('No matching purchase order') self.purchase_order1.place_order() @@ -211,10 +211,8 @@ def test_receive(self): result4 = self.post( url, data={'barcode': DIGIKEY_BARCODE[:-1]}, expected_code=400 ) - self.assertTrue( - result4.data['error'].startswith( - 'Failed to find pending line item for supplier part' - ) + assert result4.data['error'].startswith( + 'Failed to find pending line item for supplier part' ) result5 = self.post( @@ -223,42 +221,38 @@ def test_receive(self): expected_code=200, ) stock_item = StockItem.objects.get(pk=result5.data['stockitem']['pk']) - self.assertEqual(stock_item.supplier_part.SKU, '296-LM358BIDDFRCT-ND') - self.assertEqual(stock_item.quantity, 10) - self.assertEqual(stock_item.location, None) + assert stock_item.supplier_part.SKU == '296-LM358BIDDFRCT-ND' + assert stock_item.quantity == 10 + assert stock_item.location is None def test_receive_custom_order_number(self): """Test receiving an item from a barcode with a custom order number.""" url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) - self.assertIn('success', result1.data) + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) + assert 'success' in result1.data result2 = self.post( - reverse('api-barcode-scan'), - data={'barcode': MOUSER_BARCODE}, - expected_code=200, + reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - self.assertEqual(stock_item.supplier_part.SKU, '42') - self.assertEqual(stock_item.supplier_part.manufacturer_part.MPN, 'MC34063ADR') - self.assertEqual(stock_item.quantity, 3) - self.assertEqual(stock_item.location, None) + assert stock_item.supplier_part.SKU == '42' + assert stock_item.supplier_part.manufacturer_part.MPN == 'MC34063ADR' + assert stock_item.quantity == 3 + assert stock_item.location is None def test_receive_one_stock_location(self): """Test receiving an item when only one stock location exists.""" stock_location = StockLocation.objects.create(name='Test Location') url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) - self.assertIn('success', result1.data) + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) + assert 'success' in result1.data result2 = self.post( - reverse('api-barcode-scan'), - data={'barcode': MOUSER_BARCODE}, - expected_code=200, + reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - self.assertEqual(stock_item.location, stock_location) + assert stock_item.location == stock_location def test_receive_default_line_item_location(self): """Test receiving an item into the default line_item location.""" @@ -270,16 +264,14 @@ def test_receive_default_line_item_location(self): line_item.save() url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) - self.assertIn('success', result1.data) + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) + assert 'success' in result1.data result2 = self.post( - reverse('api-barcode-scan'), - data={'barcode': MOUSER_BARCODE}, - expected_code=200, + reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - self.assertEqual(stock_item.location, stock_location2) + assert stock_item.location == stock_location2 def test_receive_default_part_location(self): """Test receiving an item into the default part location.""" @@ -291,16 +283,14 @@ def test_receive_default_part_location(self): part.save() url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) - self.assertIn('success', result1.data) + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) + assert 'success' in result1.data result2 = self.post( - reverse('api-barcode-scan'), - data={'barcode': MOUSER_BARCODE}, - expected_code=200, + reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - self.assertEqual(stock_item.location, stock_location2) + assert stock_item.location == stock_location2 def test_receive_specific_order_and_location(self): """Test receiving an item from a specific order into a specific location.""" @@ -316,15 +306,12 @@ def test_receive_specific_order_and_location(self): 'purchase_order': self.purchase_order2.pk, 'location': stock_location2.pk, }, - expected_code=200, ) - self.assertIn('success', result1.data) + assert 'success' in result1.data - result2 = self.post( - reverse('api-barcode-scan'), data={'barcode': barcode}, expected_code=200 - ) + result2 = self.post(reverse('api-barcode-scan'), data={'barcode': barcode}) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - self.assertEqual(stock_item.location, stock_location2) + assert stock_item.location == stock_location2 def test_receive_missing_quantity(self): """Test receiving an with missing quantity information.""" @@ -332,8 +319,8 @@ def test_receive_missing_quantity(self): barcode = MOUSER_BARCODE.replace('\x1dQ3', '') response = self.post(url, data={'barcode': barcode}, expected_code=200) - self.assertIn('lineitem', response.data) - self.assertNotIn('quantity', response.data['lineitem']) + assert 'lineitem' in response.data + assert 'quantity' not in response.data['lineitem'] DIGIKEY_BARCODE = ( diff --git a/src/backend/InvenTree/plugin/helpers.py b/src/backend/InvenTree/plugin/helpers.py index 6e8425ad5ade..bd287bcdd8f6 100644 --- a/src/backend/InvenTree/plugin/helpers.py +++ b/src/backend/InvenTree/plugin/helpers.py @@ -5,16 +5,14 @@ import os import pathlib import pkgutil -import sys import sysconfig import traceback from importlib.metadata import entry_points -from importlib.util import module_from_spec from django import template from django.conf import settings from django.core.exceptions import AppRegistryNotReady -from django.db.utils import IntegrityError +from django.db.utils import IntegrityError, OperationalError, ProgrammingError logger = logging.getLogger('inventree') @@ -112,10 +110,7 @@ def handle_error(error, do_raise: bool = True, do_log: bool = True, log_name: st def get_entrypoints(): """Returns list for entrypoints for InvenTree plugins.""" - # on python before 3.12, we need to use importlib_metadata - if sys.version_info < (3, 12): - return entry_points().get('inventree_plugins', []) - return entry_points(group='inventree_plugins') + return entry_points().get('inventree_plugins', []) # endregion @@ -126,8 +121,7 @@ def get_git_log(path): """Get dict with info of the last commit to file named in path.""" import datetime - from dulwich.errors import NotGitRepository - from dulwich.repo import Repo + from dulwich.repo import NotGitRepository, Repo from InvenTree.ready import isInTestMode @@ -181,15 +175,9 @@ def get_modules(pkg, path=None): elif type(path) is not list: path = [path] - for finder, name, _ in pkgutil.walk_packages(path): + for loader, name, _ in pkgutil.walk_packages(path): try: - if sys.version_info < (3, 12): - module = finder.find_module(name).load_module(name) - else: - spec = finder.find_spec(name) - module = module_from_spec(spec) - sys.modules[name] = module - spec.loader.exec_module(module) + module = loader.find_module(name).load_module(name) pkg_names = getattr(module, '__all__', None) for k, v in vars(module).items(): if not k.startswith('_') and (pkg_names is None or k in pkg_names): diff --git a/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py b/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py deleted file mode 100644 index 61de4d323ce8..000000000000 --- a/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.12 on 2024-05-14 22:40 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('plugin', '0008_pluginconfig_package_name'), - ] - - operations = [ - migrations.AlterField( - model_name='pluginconfig', - name='key', - field=models.CharField(db_index=True, help_text='Key of plugin', max_length=255, unique=True, verbose_name='Key'), - ), - ] diff --git a/src/backend/InvenTree/plugin/mixins/__init__.py b/src/backend/InvenTree/plugin/mixins/__init__.py index dff24a216d7c..0e39462ad63f 100644 --- a/src/backend/InvenTree/plugin/mixins/__init__.py +++ b/src/backend/InvenTree/plugin/mixins/__init__.py @@ -4,12 +4,14 @@ from plugin.base.action.mixins import ActionMixin from plugin.base.barcodes.mixins import BarcodeMixin, SupplierBarcodeMixin from plugin.base.event.mixins import EventMixin -from plugin.base.icons.mixins import IconPackMixin from plugin.base.integration.APICallMixin import APICallMixin from plugin.base.integration.AppMixin import AppMixin from plugin.base.integration.CurrencyExchangeMixin import CurrencyExchangeMixin -from plugin.base.integration.mixins import NavigationMixin, SettingsContentMixin -from plugin.base.integration.PanelMixin import PanelMixin +from plugin.base.integration.mixins import ( + NavigationMixin, + PanelMixin, + SettingsContentMixin, +) from plugin.base.integration.ReportMixin import ReportMixin from plugin.base.integration.ScheduleMixin import ScheduleMixin from plugin.base.integration.SettingsMixin import SettingsMixin @@ -23,7 +25,6 @@ 'AppMixin', 'CurrencyExchangeMixin', 'EventMixin', - 'IconPackMixin', 'LabelPrintingMixin', 'NavigationMixin', 'ReportMixin', diff --git a/src/backend/InvenTree/plugin/models.py b/src/backend/InvenTree/plugin/models.py index 4989f56af296..482b0677c12a 100644 --- a/src/backend/InvenTree/plugin/models.py +++ b/src/backend/InvenTree/plugin/models.py @@ -7,12 +7,11 @@ from django.contrib import admin from django.contrib.auth.models import User from django.db import models -from django.urls import reverse +from django.db.utils import IntegrityError from django.utils.translation import gettext_lazy as _ import common.models import InvenTree.models -import plugin.staticfiles from plugin import InvenTreePlugin, registry @@ -25,11 +24,6 @@ class PluginConfig(InvenTree.models.MetadataMixin, models.Model): active: Should the plugin be loaded? """ - @staticmethod - def get_api_url(): - """Return the API URL associated with the PluginConfig model.""" - return reverse('api-plugin-list') - class Meta: """Meta for PluginConfig.""" @@ -37,11 +31,7 @@ class Meta: verbose_name_plural = _('Plugin Configurations') key = models.CharField( - unique=True, - db_index=True, - max_length=255, - verbose_name=_('Key'), - help_text=_('Key of plugin'), + unique=True, max_length=255, verbose_name=_('Key'), help_text=_('Key of plugin') ) name = models.CharField( @@ -187,20 +177,6 @@ def is_package(self) -> bool: return getattr(self.plugin, 'is_package', False) - def activate(self, active: bool) -> None: - """Set the 'active' status of this plugin instance.""" - from InvenTree.tasks import check_for_migrations, offload_task - - if self.active == active: - return - - self.active = active - self.save() - - if active: - offload_task(check_for_migrations) - offload_task(plugin.staticfiles.copy_plugin_static_files, self.key) - class PluginSetting(common.models.BaseInvenTreeSetting): """This model represents settings for individual plugins.""" diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 4b49eb54333d..d56ce885edfa 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -4,15 +4,12 @@ - Manages setup and teardown of plugin class instances """ +import imp import importlib -import importlib.machinery -import importlib.util import logging import os -import sys import time from collections import OrderedDict -from importlib.machinery import SourceFileLoader from pathlib import Path from threading import Lock from typing import Any @@ -25,7 +22,6 @@ from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ -from common.settings import get_global_setting, set_global_setting from InvenTree.config import get_plugin_dir from InvenTree.ready import canAppAccessDatabase @@ -220,15 +216,51 @@ def _load_plugins(self, full_reload: bool = False): """ logger.info('Loading plugins') - try: - self._init_plugins() - self._activate_plugins(full_reload=full_reload) - except (OperationalError, ProgrammingError, IntegrityError): - # Exception if the database has not been migrated yet, or is not ready - pass - except IntegrationPluginError: - # Plugin specific error has already been handled - pass + registered_successful = False + blocked_plugin = None + retry_counter = settings.PLUGIN_RETRY + + while not registered_successful: + try: + # We are using the db so for migrations etc we need to try this block + self._init_plugins(blocked_plugin) + self._activate_plugins(full_reload=full_reload) + registered_successful = True + except (OperationalError, ProgrammingError): # pragma: no cover + # Exception if the database has not been migrated yet + logger.info('Database not accessible while loading plugins') + break + except IntegrationPluginError as error: + logger.exception( + '[PLUGIN] Encountered an error with %s:\n%s', + error.path, + error.message, + ) + log_error({error.path: error.message}, 'load') + blocked_plugin = error.path # we will not try to load this app again + + # Initialize apps without any plugins + self._clean_registry() + self._clean_installed_apps() + self._activate_plugins(force_reload=True, full_reload=full_reload) + + # We do not want to end in an endless loop + retry_counter -= 1 + + if retry_counter <= 0: # pragma: no cover + if settings.PLUGIN_TESTING: + print('[PLUGIN] Max retries, breaking loading') + break + if settings.PLUGIN_TESTING: + print( + f'[PLUGIN] Above error occurred during testing - {retry_counter}/{settings.PLUGIN_RETRY} retries left' + ) + + # now the loading will re-start up with init + + # disable full reload after the first round + if full_reload: + full_reload = False # ensure plugins_loaded is True self.plugins_loaded = True @@ -379,15 +411,9 @@ def collect_plugins(self): # Gather Modules if parent_path: - # On python 3.12 use new loader method - if sys.version_info < (3, 12): - raw_module = _load_source( - plugin, str(parent_obj.joinpath('__init__.py')) - ) - else: - raw_module = SourceFileLoader( - plugin, str(parent_obj.joinpath('__init__.py')) - ).load_module() + raw_module = imp.load_source( + plugin, str(parent_obj.joinpath('__init__.py')) + ) else: raw_module = importlib.import_module(plugin) modules = get_plugins(raw_module, InvenTreePlugin, path=parent_path) @@ -443,13 +469,18 @@ def install_plugin_file(self): # endregion # region general internal loading / activating / deactivating / unloading - def _init_plugin(self, plugin, configs: dict): - """Initialise a single plugin. + def _init_plugins(self, disabled: str = None): + """Initialise all found plugins. Args: - plugin: Plugin module + disabled (str, optional): Loading path of disabled app. Defaults to None. + + Raises: + error: IntegrationPluginError """ + # Imports need to be in this level to prevent early db model imports from InvenTree import version + from plugin.models import PluginConfig def safe_reference(plugin, key: str, active: bool = True): """Safe reference to plugin dicts.""" @@ -463,99 +494,6 @@ def safe_reference(plugin, key: str, active: bool = True): self.plugins_inactive[key] = plugin.db self.plugins_full[key] = plugin - # These checks only use attributes - never use plugin supplied functions -> that would lead to arbitrary code execution!! - plg_name = plugin.NAME - plg_key = slugify( - plugin.SLUG if getattr(plugin, 'SLUG', None) else plg_name - ) # keys are slugs! - - logger.info("Loading plugin '%s'", plg_key) - - if plg_key in configs: - plg_db = configs[plg_key] - else: - plg_db = self.get_plugin_config(plg_key, plg_name) - - plugin.db = plg_db - - # Check if this is a 'builtin' plugin - builtin = plugin.check_is_builtin() - - package_name = None - - # Extract plugin package name - if getattr(plugin, 'is_package', False): - package_name = getattr(plugin, 'package_name', None) - - # Auto-enable builtin plugins - if builtin and plg_db and not plg_db.active: - plg_db.active = True - plg_db.save() - - # Save the package_name attribute to the plugin - if plg_db.package_name != package_name: - plg_db.package_name = package_name - plg_db.save() - - # Determine if this plugin should be loaded: - # - If PLUGIN_TESTING is enabled - # - If this is a 'builtin' plugin - # - If this plugin has been explicitly enabled by the user - if settings.PLUGIN_TESTING or builtin or (plg_db and plg_db.active): - # Initialize package - we can be sure that an admin has activated the plugin - logger.debug('Loading plugin `%s`', plg_name) - - try: - t_start = time.time() - plg_i: InvenTreePlugin = plugin() - dt = time.time() - t_start - logger.debug('Loaded plugin `%s` in %.3fs', plg_name, dt) - except Exception as error: - handle_error( - error, log_name='init' - ) # log error and raise it -> disable plugin - - logger.warning('Plugin `%s` could not be loaded', plg_name) - - # Safe extra attributes - plg_i.is_package = getattr(plg_i, 'is_package', False) - - plg_i.pk = plg_db.pk if plg_db else None - plg_i.db = plg_db - - # Run version check for plugin - if (plg_i.MIN_VERSION or plg_i.MAX_VERSION) and not plg_i.check_version(): - # Disable plugin - safe_reference(plugin=plg_i, key=plg_key, active=False) - - p = plg_name - v = version.inventreeVersion() - _msg = _( - f"Plugin '{p}' is not compatible with the current InvenTree version {v}" - ) - if v := plg_i.MIN_VERSION: - _msg += _(f'Plugin requires at least version {v}') - if v := plg_i.MAX_VERSION: - _msg += _(f'Plugin requires at most version {v}') - # Log to error stack - log_error(_msg, reference='init') - else: - safe_reference(plugin=plg_i, key=plg_key) - else: # pragma: no cover - safe_reference(plugin=plugin, key=plg_key, active=False) - - def _init_plugins(self): - """Initialise all found plugins. - - Args: - disabled (str, optional): Loading path of disabled app. Defaults to None. - - Raises: - error: IntegrationPluginError - """ - # Imports need to be in this level to prevent early db model imports - from plugin.models import PluginConfig - logger.debug('Starting plugin initialization') # Fetch and cache list of existing plugin configuration instances @@ -563,32 +501,102 @@ def _init_plugins(self): # Initialize plugins for plg in self.plugin_modules: - # Attempt to load each individual plugin - attempts = settings.PLUGIN_RETRY + # These checks only use attributes - never use plugin supplied functions -> that would lead to arbitrary code execution!! + plg_name = plg.NAME + plg_key = slugify( + plg.SLUG if getattr(plg, 'SLUG', None) else plg_name + ) # keys are slugs! - while attempts > 0: - attempts -= 1 + try: + if plg_key in plugin_configs: + # Configuration already exists + plg_db = plugin_configs[plg_key] + else: + # Configuration needs to be created + plg_db = self.get_plugin_config(plg_key, plg_name) + except (OperationalError, ProgrammingError) as error: + # Exception if the database has not been migrated yet - check if test are running - raise if not + if not settings.PLUGIN_TESTING: + raise error # pragma: no cover + plg_db = None + except IntegrityError as error: # pragma: no cover + logger.exception('Error initializing plugin `%s`: %s', plg_name, error) + handle_error(error, log_name='init') + + # Append reference to plugin + plg.db = plg_db + + # Check if this is a 'builtin' plugin + builtin = plg.check_is_builtin() + + package_name = None + + # Extract plugin package name + if getattr(plg, 'is_package', False): + package_name = getattr(plg, 'package_name', None) + + # Auto-enable builtin plugins + if builtin and plg_db and not plg_db.active: + plg_db.active = True + plg_db.save() + + # Save the package_name attribute to the plugin + if plg_db.package_name != package_name: + plg_db.package_name = package_name + plg_db.save() + + # Determine if this plugin should be loaded: + # - If PLUGIN_TESTING is enabled + # - If this is a 'builtin' plugin + # - If this plugin has been explicitly enabled by the user + if settings.PLUGIN_TESTING or builtin or (plg_db and plg_db.active): + # Check if the plugin was blocked -> threw an error; option1: package, option2: file-based + if disabled and disabled in (plg.__name__, plg.__module__): + safe_reference(plugin=plg, key=plg_key, active=False) + continue # continue -> the plugin is not loaded + + # Initialize package - we can be sure that an admin has activated the plugin + logger.debug('Loading plugin `%s`', plg_name) try: - self._init_plugin(plg, plugin_configs) - break - except IntegrationPluginError: - # Error has been handled downstream - pass + t_start = time.time() + plg_i: InvenTreePlugin = plg() + dt = time.time() - t_start + logger.debug('Loaded plugin `%s` in %.3fs', plg_name, dt) except Exception as error: - # Handle the error, log it and try again handle_error( - error, log_name='init', do_raise=settings.PLUGIN_TESTING + error, log_name='init' + ) # log error and raise it -> disable plugin + logger.warning('Plugin `%s` could not be loaded', plg_name) + + # Safe extra attributes + plg_i.is_package = getattr(plg_i, 'is_package', False) + + plg_i.pk = plg_db.pk if plg_db else None + plg_i.db = plg_db + + # Run version check for plugin + if ( + plg_i.MIN_VERSION or plg_i.MAX_VERSION + ) and not plg_i.check_version(): + # Disable plugin + safe_reference(plugin=plg_i, key=plg_key, active=False) + + p = plg_name + v = version.inventreeVersion() + _msg = _( + f"Plugin '{p}' is not compatible with the current InvenTree version {v}" ) - - if attempts == 0: - logger.exception( - '[PLUGIN] Encountered an error with %s:\n%s', - error.path, - str(error), - ) - - logger.debug('Finished plugin initialization') + if v := plg_i.MIN_VERSION: + _msg += _(f'Plugin requires at least version {v}') + if v := plg_i.MAX_VERSION: + _msg += _(f'Plugin requires at most version {v}') + # Log to error stack + log_error(_msg, reference='init') + else: + safe_reference(plugin=plg_i, key=plg_key) + else: # pragma: no cover + safe_reference(plugin=plg, key=plg_key, active=False) def __get_mixin_order(self): """Returns a list of mixin classes, in the order that they should be activated.""" @@ -715,10 +723,12 @@ def _update_urls(self): # region plugin registry hash calculations def update_plugin_hash(self): """When the state of the plugin registry changes, update the hash.""" + from common.models import InvenTreeSetting + self.registry_hash = self.calculate_plugin_hash() try: - old_hash = get_global_setting( + old_hash = InvenTreeSetting.get_setting( '_PLUGIN_REGISTRY_HASH', '', create=False, cache=False ) except Exception: @@ -729,7 +739,7 @@ def update_plugin_hash(self): logger.debug( 'Updating plugin registry hash: %s', str(self.registry_hash) ) - set_global_setting( + InvenTreeSetting.set_setting( '_PLUGIN_REGISTRY_HASH', self.registry_hash, change_user=None ) except (OperationalError, ProgrammingError): @@ -739,16 +749,6 @@ def update_plugin_hash(self): # Some other exception, we want to know about it logger.exception('Failed to update plugin registry hash: %s', str(exc)) - def plugin_settings_keys(self): - """A list of keys which are used to store plugin settings.""" - return [ - 'ENABLE_PLUGINS_URL', - 'ENABLE_PLUGINS_NAVIGATION', - 'ENABLE_PLUGINS_APP', - 'ENABLE_PLUGINS_SCHEDULE', - 'ENABLE_PLUGINS_EVENTS', - ] - def calculate_plugin_hash(self): """Calculate a 'hash' value for the current registry. @@ -757,6 +757,8 @@ def calculate_plugin_hash(self): """ from hashlib import md5 + from common.models import InvenTreeSetting + data = md5() # Hash for all loaded plugins @@ -766,12 +768,24 @@ def calculate_plugin_hash(self): data.update(str(plug.version).encode()) data.update(str(plug.is_active()).encode()) - for k in self.plugin_settings_keys(): - try: - val = get_global_setting(k) - msg = f'{k}-{val}' + # Also hash for all config settings which define plugin behavior + keys = [ + 'ENABLE_PLUGINS_URL', + 'ENABLE_PLUGINS_NAVIGATION', + 'ENABLE_PLUGINS_APP', + 'ENABLE_PLUGINS_SCHEDULE', + 'ENABLE_PLUGINS_EVENTS', + ] - data.update(msg.encode()) + for k in keys: + try: + data.update( + str( + InvenTreeSetting.get_setting( + k, False, cache=False, create=False + ) + ).encode() + ) except Exception: pass @@ -779,6 +793,8 @@ def calculate_plugin_hash(self): def check_reload(self): """Determine if the registry needs to be reloaded.""" + from common.models import InvenTreeSetting + if settings.TESTING: # Skip if running during unit testing return @@ -794,7 +810,9 @@ def check_reload(self): self.registry_hash = self.calculate_plugin_hash() try: - reg_hash = get_global_setting('_PLUGIN_REGISTRY_HASH', '', create=False) + reg_hash = InvenTreeSetting.get_setting( + '_PLUGIN_REGISTRY_HASH', '', create=False, cache=False + ) except Exception as exc: logger.exception('Failed to retrieve plugin registry hash: %s', str(exc)) return @@ -812,18 +830,3 @@ def check_reload(self): def call_function(plugin_name, function_name, *args, **kwargs): """Global helper function to call a specific member function of a plugin.""" return registry.call_plugin_function(plugin_name, function_name, *args, **kwargs) - - -def _load_source(modname, filename): - """Helper function to replace deprecated & removed imp.load_source. - - See https://docs.python.org/3/whatsnew/3.12.html#imp - """ - loader = importlib.machinery.SourceFileLoader(modname, filename) - spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) - module = importlib.util.module_from_spec(spec) - # The module is always executed and not cached in sys.modules. - # Uncomment the following line to cache the module. - # sys.modules[module.__name__] = module - loader.exec_module(module) - return module diff --git a/src/backend/InvenTree/plugin/samples/icons/icon_sample.py b/src/backend/InvenTree/plugin/samples/icons/icon_sample.py deleted file mode 100644 index 795f147ebf84..000000000000 --- a/src/backend/InvenTree/plugin/samples/icons/icon_sample.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Sample icon pack plugin to add custom icons.""" - -from django.templatetags.static import static - -from common.icons import IconPack -from plugin.base.icons.mixins import IconPackMixin -from plugin.plugin import InvenTreePlugin - - -class SampleIconPlugin(IconPackMixin, InvenTreePlugin): - """Example plugin to add custom icons.""" - - NAME = 'SampleIconPackPlugin' - SLUG = 'sampleicons' - TITLE = 'My sample icon pack plugin' - - VERSION = '0.0.1' - - def icon_packs(self): - """Return a list of custom icon packs.""" - return [ - IconPack( - name='My Custom Icons', - prefix='my', - fonts={ - 'woff2': static('fontawesome/webfonts/fa-regular-400.woff2'), - 'woff': static('fontawesome/webfonts/fa-regular-400.woff'), - 'truetype': static('fontawesome/webfonts/fa-regular-400.ttf'), - }, - icons={ - 'my-icon': { - 'name': 'My Icon', - 'category': '', - 'tags': ['my', 'icon'], - 'variants': {'filled': 'f0a5', 'cool': 'f073'}, - } - }, - ) - ] diff --git a/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py b/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py deleted file mode 100644 index fa1eef5af831..000000000000 --- a/src/backend/InvenTree/plugin/samples/icons/test_icon_sample.py +++ /dev/null @@ -1,52 +0,0 @@ -"""Unit tests for icon pack sample plugins.""" - -from django.urls import reverse - -from InvenTree.unit_test import InvenTreeAPITestCase -from plugin import InvenTreePlugin, registry -from plugin.helpers import MixinNotImplementedError -from plugin.mixins import IconPackMixin - - -class SampleIconPackPluginTests(InvenTreeAPITestCase): - """Tests for SampleIconPackPlugin.""" - - def test_get_icons_api(self): - """Check get icons api.""" - # Activate plugin - config = registry.get_plugin('sampleicons').plugin_config() - config.active = True - config.save() - - response = self.get(reverse('api-icon-list'), expected_code=200) - self.assertEqual(len(response.data), 2) - - for icon_pack in response.data: - if icon_pack['prefix'] == 'my': - break - else: - self.fail('My icon pack not found') - - self.assertEqual(icon_pack['prefix'], 'my') - self.assertEqual(icon_pack['name'], 'My Custom Icons') - for font_format in ['woff2', 'woff', 'truetype']: - self.assertIn(font_format, icon_pack['fonts']) - - self.assertEqual(len(icon_pack['icons']), 1) - self.assertEqual(icon_pack['icons']['my-icon']['name'], 'My Icon') - self.assertEqual(icon_pack['icons']['my-icon']['category'], '') - self.assertEqual(icon_pack['icons']['my-icon']['tags'], ['my', 'icon']) - self.assertEqual( - icon_pack['icons']['my-icon']['variants'], - {'filled': 'f0a5', 'cool': 'f073'}, - ) - - def test_mixin(self): - """Test that MixinNotImplementedError is raised.""" - - class Wrong(IconPackMixin, InvenTreePlugin): - pass - - with self.assertRaises(MixinNotImplementedError): - plugin = Wrong() - plugin.icon_packs() diff --git a/src/backend/InvenTree/plugin/samples/integration/label_sample.py b/src/backend/InvenTree/plugin/samples/integration/label_sample.py index 312205314e38..7e7c5c8645ec 100644 --- a/src/backend/InvenTree/plugin/samples/integration/label_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/label_sample.py @@ -34,9 +34,7 @@ def print_label(self, **kwargs): print(f"Printing Label: {kwargs['filename']} (User: {kwargs['user']})") pdf_data = kwargs['pdf_data'] - png_file = self.render_to_png( - kwargs['label_instance'], kwargs['item_instance'], **kwargs - ) + png_file = self.render_to_png(label=None, pdf_data=pdf_data) filename = str(BASE_DIR / '_testfolder' / 'label.pdf') diff --git a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py index b67c8e96f16f..a0b37b53f17b 100644 --- a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py @@ -4,6 +4,7 @@ from plugin import InvenTreePlugin from plugin.mixins import ReportMixin +from report.models import PurchaseOrderReport class SampleReportPlugin(ReportMixin, InvenTreePlugin): @@ -31,7 +32,7 @@ def add_report_context(self, report_instance, model_instance, request, context): context['random_int'] = self.some_custom_function() # We can also add extra data to the context which is specific to the report type - context['is_purchase_order'] = report_instance.model_type == 'purchaseorder' + context['is_purchase_order'] = isinstance(report_instance, PurchaseOrderReport) # We can also use the 'request' object to add extra context data context['request_method'] = request.method diff --git a/src/backend/InvenTree/plugin/samples/integration/transition.py b/src/backend/InvenTree/plugin/samples/integration/transition.py index b0a6ff1826bf..97166506bdf9 100644 --- a/src/backend/InvenTree/plugin/samples/integration/transition.py +++ b/src/backend/InvenTree/plugin/samples/integration/transition.py @@ -2,8 +2,8 @@ from common.notifications import trigger_notification from generic.states import TransitionMethod +from InvenTree.status_codes import ReturnOrderStatus from order.models import ReturnOrder -from order.status_codes import ReturnOrderStatus from plugin import InvenTreePlugin diff --git a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py index 3541d122404e..c1edd4e980fc 100644 --- a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py @@ -121,7 +121,7 @@ def validate_part_parameter(self, parameter, data): if d >= 100: self.raise_error('Value must be less than 100') - def validate_serial_number(self, serial: str, part, stock_item=None): + def validate_serial_number(self, serial: str, part): """Validate serial number for a given StockItem. These examples are silly, but serve to demonstrate how the feature could be used @@ -145,17 +145,7 @@ def validate_batch_code(self, batch_code: str, item): if len(batch_code) > 0 and prefix and not batch_code.startswith(prefix): self.raise_error(f"Batch code must start with '{prefix}'") - def generate_batch_code(self, **kwargs): + def generate_batch_code(self): """Generate a new batch code.""" now = datetime.now() - batch = f'SAMPLE-BATCH-{now.year}:{now.month}:{now.day}' - - # If a Part instance is provided, prepend the part name to the batch code - if part := kwargs.get('part', None): - batch = f'{part.name}-{batch}' - - # If a Build instance is provided, prepend the build number to the batch code - if build := kwargs.get('build_order', None): - batch = f'{build.reference}-{batch}' - - return batch + return f'BATCH-{now.year}:{now.month}:{now.day}' diff --git a/src/backend/InvenTree/plugin/serializers.py b/src/backend/InvenTree/plugin/serializers.py index 30fd5325eeb9..507ba20799ab 100644 --- a/src/backend/InvenTree/plugin/serializers.py +++ b/src/backend/InvenTree/plugin/serializers.py @@ -150,11 +150,6 @@ class PluginConfigEmptySerializer(serializers.Serializer): class PluginReloadSerializer(serializers.Serializer): """Serializer for remotely forcing plugin registry reload.""" - class Meta: - """Meta for serializer.""" - - fields = ['full_reload', 'force_reload', 'collect_plugins'] - full_reload = serializers.BooleanField( required=False, default=False, @@ -194,11 +189,6 @@ class PluginActivateSerializer(serializers.Serializer): model = PluginConfig - class Meta: - """Metaclass for serializer.""" - - fields = ['active'] - active = serializers.BooleanField( required=False, default=True, @@ -208,18 +198,21 @@ class Meta: def update(self, instance, validated_data): """Apply the new 'active' value to the plugin instance.""" - instance.activate(validated_data.get('active', True)) + from InvenTree.tasks import check_for_migrations, offload_task + + instance.active = validated_data.get('active', True) + instance.save() + + if instance.active: + # A plugin has just been activated - check for database migrations + offload_task(check_for_migrations) + return instance class PluginUninstallSerializer(serializers.Serializer): """Serializer for uninstalling a plugin.""" - class Meta: - """Metaclass for serializer.""" - - fields = ['delete_config'] - delete_config = serializers.BooleanField( required=False, default=True, @@ -260,11 +253,6 @@ class NotificationUserSettingSerializer(GenericReferencedSettingSerializer): class PluginRegistryErrorSerializer(serializers.Serializer): """Serializer for a plugin registry error.""" - class Meta: - """Meta for serializer.""" - - fields = ['stage', 'name', 'message'] - stage = serializers.CharField() name = serializers.CharField() message = serializers.CharField() @@ -273,33 +261,4 @@ class Meta: class PluginRegistryStatusSerializer(serializers.Serializer): """Serializer for plugin registry status.""" - class Meta: - """Meta for serializer.""" - - fields = ['active_plugins', 'registry_errors'] - - active_plugins = serializers.IntegerField(read_only=True) registry_errors = serializers.ListField(child=PluginRegistryErrorSerializer()) - - -class PluginRelationSerializer(serializers.PrimaryKeyRelatedField): - """Serializer for a plugin field. Uses the 'slug' of the plugin as the lookup.""" - - def __init__(self, **kwargs): - """Custom init routine for the serializer.""" - kwargs['pk_field'] = 'key' - kwargs['queryset'] = PluginConfig.objects.all() - - super().__init__(**kwargs) - - def use_pk_only_optimization(self): - """Disable the PK optimization.""" - return False - - def to_internal_value(self, data): - """Lookup the PluginConfig object based on the slug.""" - return PluginConfig.objects.filter(key=data).first() - - def to_representation(self, value): - """Return the 'key' of the PluginConfig object.""" - return value.key diff --git a/src/backend/InvenTree/plugin/staticfiles.py b/src/backend/InvenTree/plugin/staticfiles.py deleted file mode 100644 index 0ece4bcc7ec2..000000000000 --- a/src/backend/InvenTree/plugin/staticfiles.py +++ /dev/null @@ -1,95 +0,0 @@ -"""Static files management for InvenTree plugins.""" - -import logging - -from django.contrib.staticfiles.storage import staticfiles_storage - -from plugin.registry import registry - -logger = logging.getLogger('inventree') - - -def clear_static_dir(path, recursive=True): - """Clear the specified directory from the 'static' output directory. - - Arguments: - path: The path to the directory to clear - recursive: If True, clear the directory recursively - """ - if not staticfiles_storage.exists(path): - return - - dirs, files = staticfiles_storage.listdir(path) - - for f in files: - staticfiles_storage.delete(f'{path}{f}') - - if recursive: - for d in dirs: - clear_static_dir(f'{path}{d}/', recursive=True) - staticfiles_storage.delete(f'{path}{d}') - - # Finally, delete the directory itself to remove orphan folders when uninstalling a plugin - staticfiles_storage.delete(path) - - -def collect_plugins_static_files(): - """Copy static files from all installed plugins into the static directory.""" - registry.check_reload() - - logger.info('Collecting static files for all installed plugins.') - - for slug in registry.plugins.keys(): - copy_plugin_static_files(slug, check_reload=False) - - -def copy_plugin_static_files(slug, check_reload=True): - """Copy static files for the specified plugin.""" - if check_reload: - registry.check_reload() - - plugin = registry.get_plugin(slug) - - if not plugin: - return - - logger.info("Copying static files for plugin '%s'", slug) - - # Get the source path for the plugin - source_path = plugin.path().joinpath('static') - - if not source_path.is_dir(): - return - - # Create prefix for the destination path - destination_prefix = f'plugins/{slug}/' - - # Clear the destination path - clear_static_dir(destination_prefix) - - items = list(source_path.glob('*')) - - idx = 0 - copied = 0 - - while idx < len(items): - item = items[idx] - - idx += 1 - - if item.is_dir(): - items.extend(item.glob('*')) - continue - - if item.is_file(): - relative_path = item.relative_to(source_path) - - destination_path = f'{destination_prefix}{relative_path}' - - with item.open('rb') as src: - staticfiles_storage.save(destination_path, src) - - logger.debug('- copied %s to %s', str(item), str(destination_path)) - copied += 1 - - logger.info("Copied %s static files for plugin '%s'.", copied, slug) diff --git a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py index c7d15e95a85b..0483b1588e22 100644 --- a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py +++ b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py @@ -2,12 +2,11 @@ from django import template from django.conf import settings as djangosettings -from django.templatetags.static import static from django.urls import reverse +from common.models import InvenTreeSetting from common.notifications import storage -from common.settings import get_global_setting -from plugin.registry import registry +from plugin import registry register = template.Library() @@ -56,7 +55,7 @@ def navigation_enabled(*args, **kwargs): """Is plugin navigation enabled?""" if djangosettings.PLUGIN_TESTING: return True - return get_global_setting('ENABLE_PLUGINS_NAVIGATION') # pragma: no cover + return InvenTreeSetting.get_setting('ENABLE_PLUGINS_NAVIGATION') # pragma: no cover @register.simple_tag() @@ -97,27 +96,3 @@ def notification_list(context, *args, **kwargs): } for a in storage.liste ] - - -@register.simple_tag(takes_context=True) -def plugin_static(context, file: str, **kwargs): - """Return the URL for a static file within a plugin. - - Arguments: - file: The path to the file within the plugin static directory - - Keyword Arguments: - plugin: The plugin slug (optional, will be inferred from the context if not provided) - - """ - plugin = context.get('plugin', None) - - if plugin: - plugin = plugin.slug - else: - plugin = kwargs.get('plugin', None) - - if not plugin: - return file - - return static(f'plugins/{plugin}/{file}') diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index d5cd8a1a4a0c..b66282f21be3 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -35,25 +35,18 @@ def test_plugin_install(self): 'packagename': 'invalid_package_name-asdads-asfd-asdf-asdf-asdf', }, expected_code=400, - max_query_time=30, ) # valid - Pypi data = self.post( - url, - {'confirm': True, 'packagename': self.PKG_NAME}, - expected_code=201, - max_query_time=30, + url, {'confirm': True, 'packagename': self.PKG_NAME}, expected_code=201 ).data self.assertEqual(data['success'], 'Installed plugin successfully') # valid - github url data = self.post( - url, - {'confirm': True, 'url': self.PKG_URL}, - expected_code=201, - max_query_time=30, + url, {'confirm': True, 'url': self.PKG_URL}, expected_code=201 ).data self.assertEqual(data['success'], 'Installed plugin successfully') @@ -63,7 +56,6 @@ def test_plugin_install(self): url, {'confirm': True, 'url': self.PKG_URL, 'packagename': self.PKG_NAME}, expected_code=201, - max_query_time=30, ).data self.assertEqual(data['success'], 'Installed plugin successfully') @@ -105,10 +97,12 @@ def assert_plugin_active(self, active): assert plgs is not None self.assertEqual(plgs.active, active) - url = reverse('api-plugin-detail-activate', kwargs={'plugin': test_plg.key}) - # Should not work - not a superuser - response = self.client.post(url, {}, follow=True) + response = self.client.post( + reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), + {}, + follow=True, + ) self.assertEqual(response.status_code, 403) # Make user superuser @@ -121,7 +115,11 @@ def assert_plugin_active(self, active): # Activate plugin with detail url assert_plugin_active(self, False) - response = self.client.patch(url, {}, follow=True) + response = self.client.patch( + reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), + {}, + follow=True, + ) self.assertEqual(response.status_code, 200) assert_plugin_active(self, True) @@ -131,7 +129,11 @@ def assert_plugin_active(self, active): # Activate plugin assert_plugin_active(self, False) - response = self.client.patch(url, {}, follow=True) + response = self.client.patch( + reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), + {}, + follow=True, + ) self.assertEqual(response.status_code, 200) assert_plugin_active(self, True) @@ -194,9 +196,8 @@ def test_model(self): mixin_dict = plg.mixins() self.assertIn('base', mixin_dict) - self.assertEqual( - mixin_dict, - {**mixin_dict, **{'base': {'key': 'base', 'human_name': 'base'}}}, + self.assertDictContainsSubset( + {'base': {'key': 'base', 'human_name': 'base'}}, mixin_dict ) # check reload on save @@ -233,9 +234,9 @@ def test_plugin_settings(self): # Activate the 'sample' plugin via the API cfg = PluginConfig.objects.filter(key='sample').first() - self.assertIsNotNone(cfg) + assert cfg is not None - url = reverse('api-plugin-detail-activate', kwargs={'plugin': cfg.key}) + url = reverse('api-plugin-detail-activate', kwargs={'pk': cfg.pk}) self.client.patch(url, {}, expected_code=200) # Valid plugin settings endpoints @@ -292,14 +293,3 @@ def test_plugin_settings(self): ) self.assertEqual(response.data['value'], '456') - - def test_plugin_metadata(self): - """Test metadata endpoint for plugin.""" - self.user.is_superuser = True - self.user.save() - - cfg = PluginConfig.objects.filter(key='sample').first() - self.assertIsNotNone(cfg) - - url = reverse('api-plugin-metadata', kwargs={'plugin': cfg.key}) - self.get(url, expected_code=200) diff --git a/src/backend/InvenTree/plugin/test_helpers.py b/src/backend/InvenTree/plugin/test_helpers.py index 95cff3ea95e2..4a32c02fb97e 100644 --- a/src/backend/InvenTree/plugin/test_helpers.py +++ b/src/backend/InvenTree/plugin/test_helpers.py @@ -22,5 +22,5 @@ class ErrorSource: response = render_template( ErrorSource(), 'sample/wrongsample.html', {'abc': 123} ) - self.assertIn('lert alert-block alert-danger', response) - self.assertIn('Template file sample/wrongsample.html', response) + self.assertTrue('lert alert-block alert-danger' in response) + self.assertTrue('Template file sample/wrongsample.html' in response) diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index 4fe03ea1c9a5..557a86b75ab0 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -273,17 +273,15 @@ def test_broken_samples(self): # Reload to rediscover plugins registry.reload_plugins(full_reload=True, collect=True) - self.assertEqual(len(registry.errors), 2) - + self.assertEqual(len(registry.errors), 3) # There should be at least one discovery error in the module `broken_file` - self.assertGreater(len(registry.errors.get('discovery')), 0) + self.assertTrue(len(registry.errors.get('discovery')) > 0) self.assertEqual( registry.errors.get('discovery')[0]['broken_file'], "name 'bb' is not defined", ) - # There should be at least one load error with an intentional KeyError - self.assertGreater(len(registry.errors.get('init')), 0) + self.assertTrue(len(registry.errors.get('load')) > 0) self.assertEqual( - registry.errors.get('init')[0]['broken_sample'], "'This is a dummy error'" + registry.errors.get('load')[0]['broken_sample'], "'This is a dummy error'" ) diff --git a/src/backend/InvenTree/plugin/urls.py b/src/backend/InvenTree/plugin/urls.py index 5d6485e4ec78..a551d9d9e5f3 100644 --- a/src/backend/InvenTree/plugin/urls.py +++ b/src/backend/InvenTree/plugin/urls.py @@ -3,18 +3,23 @@ from django.conf import settings from django.urls import include, re_path -from common.validators import get_global_setting - PLUGIN_BASE = 'plugin' # Constant for links def get_plugin_urls(): """Returns a urlpattern that can be integrated into the global urls.""" - from plugin.registry import registry + from common.models import InvenTreeSetting + from plugin import registry urls = [] - if get_global_setting('ENABLE_PLUGINS_URL', False) or settings.PLUGIN_TESTING_SETUP: + # Only allow custom routing if the setting is enabled + if ( + InvenTreeSetting.get_setting( + 'ENABLE_PLUGINS_URL', False, create=False, cache=False + ) + or settings.PLUGIN_TESTING_SETUP + ): for plugin in registry.plugins.values(): if plugin.mixin_enabled('urls'): urls.append(plugin.urlpatterns) diff --git a/src/backend/InvenTree/report/admin.py b/src/backend/InvenTree/report/admin.py index 04cab8734931..6a715f913403 100644 --- a/src/backend/InvenTree/report/admin.py +++ b/src/backend/InvenTree/report/admin.py @@ -2,32 +2,32 @@ from django.contrib import admin -from .helpers import report_model_options from .models import ( - LabelOutput, - LabelTemplate, + BillOfMaterialsReport, + BuildReport, + PurchaseOrderReport, ReportAsset, - ReportOutput, ReportSnippet, - ReportTemplate, + ReturnOrderReport, + SalesOrderReport, + StockLocationReport, + TestReport, ) -@admin.register(LabelTemplate) -@admin.register(ReportTemplate) -class ReportAdmin(admin.ModelAdmin): - """Admin class for the LabelTemplate and ReportTemplate models.""" - - list_display = ('name', 'description', 'model_type', 'enabled') - - list_filter = ('model_type', 'enabled') - - def formfield_for_dbfield(self, db_field, request, **kwargs): - """Provide custom choices for 'model_type' field.""" - if db_field.name == 'model_type': - db_field.choices = report_model_options() +@admin.register( + BillOfMaterialsReport, + BuildReport, + PurchaseOrderReport, + ReturnOrderReport, + SalesOrderReport, + StockLocationReport, + TestReport, +) +class ReportTemplateAdmin(admin.ModelAdmin): + """Admin class for the various reporting models.""" - return super().formfield_for_dbfield(db_field, request, **kwargs) + list_display = ('name', 'description', 'template', 'filters', 'enabled', 'revision') @admin.register(ReportSnippet) @@ -42,11 +42,3 @@ class ReportAssetAdmin(admin.ModelAdmin): """Admin class for the ReportAsset model.""" list_display = ('id', 'asset', 'description') - - -@admin.register(LabelOutput) -@admin.register(ReportOutput) -class TemplateOutputAdmin(admin.ModelAdmin): - """Admin class for the TemplateOutput model.""" - - list_display = ('id', 'output', 'progress', 'complete') diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index 75959557f76a..315c6b015953 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -1,337 +1,164 @@ """API functionality for the 'report' app.""" -from django.core.exceptions import ValidationError +from django.core.exceptions import FieldError, ValidationError from django.core.files.base import ContentFile +from django.http import HttpResponse from django.template.exceptions import TemplateDoesNotExist -from django.urls import include, path +from django.urls import include, path, re_path from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views.decorators.cache import cache_page, never_cache -from django_filters import rest_framework as rest_filters from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import permissions -from rest_framework.generics import GenericAPIView -from rest_framework.request import clone_request from rest_framework.response import Response +import build.models import common.models -import InvenTree.exceptions import InvenTree.helpers -import InvenTree.permissions -import report.helpers +import order.models +import part.models import report.models import report.serializers -from InvenTree.api import BulkDeleteMixin, MetadataView +from InvenTree.api import MetadataView from InvenTree.exceptions import log_error from InvenTree.filters import InvenTreeSearchFilter -from InvenTree.mixins import ( - ListAPI, - ListCreateAPI, - RetrieveAPI, - RetrieveUpdateDestroyAPI, -) -from plugin.builtin.labels.inventree_label import InvenTreeLabelPlugin -from plugin.registry import registry +from InvenTree.mixins import ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI +from stock.models import StockItem, StockItemAttachment, StockLocation -class TemplatePermissionMixin: - """Permission mixin for report and label templates.""" +class ReportListView(ListCreateAPI): + """Generic API class for report templates.""" - # Read only for non-staff users - permission_classes = [ - permissions.IsAuthenticated, - InvenTree.permissions.IsStaffOrReadOnly, - ] + filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] + filterset_fields = ['enabled'] -@method_decorator(cache_page(5), name='dispatch') -class TemplatePrintBase(RetrieveAPI): - """Base class for printing against templates.""" + search_fields = ['name', 'description'] - @method_decorator(never_cache) - def dispatch(self, *args, **kwargs): - """Prevent caching when printing report templates.""" - return super().dispatch(*args, **kwargs) - def check_permissions(self, request): - """Override request method to GET so that also non superusers can print using a post request.""" - if request.method == 'POST': - request = clone_request(request, 'GET') - return super().check_permissions(request) +class ReportFilterMixin: + """Mixin for extracting multiple objects from query params. - def post(self, request, *args, **kwargs): - """Respond as if a POST request was provided.""" - return self.get(request, *args, **kwargs) + Each subclass *must* have an attribute called 'ITEM_KEY', + which is used to determine what 'key' is used in the query parameters. - def get(self, request, *args, **kwargs): - """GET action for a template printing endpoint. + This mixin defines a 'get_items' method which provides a generic implementation + to return a list of matching database model instances + """ - - Items are expected to be passed as a list of valid IDs - """ - # Extract a list of items to print from the queryset - item_ids = [] + # Database model for instances to actually be "printed" against this report template + ITEM_MODEL = None - for value in request.query_params.get('items', '').split(','): - try: - item_ids.append(int(value)) - except Exception: - pass - - template = self.get_object() - - items = template.get_model().objects.filter(pk__in=item_ids) + # Default key for looking up database model instances + ITEM_KEY = 'item' - if len(items) == 0: - # At least one item must be provided - return Response( - {'error': _('No valid objects provided to template')}, status=400 + def get_items(self): + """Return a list of database objects from query parameters.""" + if not self.ITEM_MODEL: + raise NotImplementedError( + f'ITEM_MODEL attribute not defined for {__class__}' ) - return self.print(request, items) - + ids = [] -class ReportFilterBase(rest_filters.FilterSet): - """Base filter class for label and report templates.""" + # Construct a list of possible query parameter value options + # e.g. if self.ITEM_KEY = 'order' -> ['order', 'order[]', 'orders', 'orders[]'] + for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: + if ids := self.request.query_params.getlist(k, []): + # Return the first list of matches + break - enabled = rest_filters.BooleanFilter() + # Next we must validated each provided object ID + valid_ids = [] - model_type = rest_filters.ChoiceFilter( - choices=report.helpers.report_model_options(), label=_('Model Type') - ) + for id in ids: + try: + valid_ids.append(int(id)) + except ValueError: + pass - items = rest_filters.CharFilter(method='filter_items', label=_('Items')) + # Filter queryset by matching ID values + return self.ITEM_MODEL.objects.filter(pk__in=valid_ids) - def filter_items(self, queryset, name, values): - """Filter against a comma-separated list of provided items. + def filter_queryset(self, queryset): + """Filter the queryset based on the provided report ID values. - Note: This filter is only applied if the 'model_type' is also provided. + As each 'report' instance may optionally define its own filters, + the resulting queryset is the 'union' of the two """ - model_type = self.data.get('model_type', None) - values = values.strip().split(',') + queryset = super().filter_queryset(queryset) - if model_class := report.helpers.report_model_from_name(model_type): - model_items = model_class.objects.filter(pk__in=values) + items = self.get_items() - # Ensure that we have already filtered by model_type - queryset = queryset.filter(model_type=model_type) + if len(items) > 0: + """At this point, we are basically forced to be inefficient: - # Construct a list of templates which match the list of provided IDs - matching_template_ids = [] + We need to compare the 'filters' string of each report template, + and see if it matches against each of the requested items. - for template in queryset.all(): - filters = template.get_filters() - results = model_items.filter(**filters) - # If the resulting queryset is *shorter* than the provided items, then this template does not match - if results.count() == model_items.count(): - matching_template_ids.append(template.pk) + In practice, this is not too bad. + """ - queryset = queryset.filter(pk__in=matching_template_ids) - - return queryset + valid_report_ids = set() + for report in queryset.all(): + matches = True -class ReportFilter(ReportFilterBase): - """Filter class for report template list.""" - - class Meta: - """Filter options.""" - - model = report.models.ReportTemplate - fields = ['landscape'] - - -class LabelFilter(ReportFilterBase): - """Filter class for label template list.""" - - class Meta: - """Filter options.""" - - model = report.models.LabelTemplate - fields = [] - - -class LabelPrint(GenericAPIView): - """API endpoint for printing labels.""" - - # Any authenticated user can print labels - permission_classes = [permissions.IsAuthenticated] - serializer_class = report.serializers.LabelPrintSerializer - - def get_plugin_class(self, plugin_slug: str, raise_error=False): - """Return the plugin class for the given plugin key.""" - from plugin.models import PluginConfig - - if not plugin_slug: - # Use the default label printing plugin - plugin_slug = InvenTreeLabelPlugin.NAME.lower() + try: + filters = InvenTree.helpers.validateFilterString(report.filters) + except ValidationError: + continue - plugin = None + for item in items: + item_query = self.ITEM_MODEL.objects.filter(pk=item.pk) - try: - plugin_config = PluginConfig.objects.get(key=plugin_slug) - plugin = plugin_config.plugin - except (ValueError, PluginConfig.DoesNotExist): - pass - - error = None - - if not plugin: - error = _('Plugin not found') - elif not plugin.is_active(): - error = _('Plugin is not active') - elif not plugin.mixin_enabled('labels'): - error = _('Plugin does not support label printing') - - if error: - plugin = None - - if raise_error: - raise ValidationError({'plugin': error}) - - return plugin - - def get_plugin_serializer(self, plugin): - """Return the serializer for the given plugin.""" - if plugin and hasattr(plugin, 'get_printing_options_serializer'): - return plugin.get_printing_options_serializer( - self.request, - data=self.request.data, - context=self.get_serializer_context(), - ) + try: + if not item_query.filter(**filters).exists(): + matches = False + break + except FieldError: + matches = False + break - return None + # Matched all items + if matches: + valid_report_ids.add(report.pk) - def get_serializer(self, *args, **kwargs): - """Return serializer information for the label print endpoint.""" - plugin = None + # Reduce queryset to only valid matches + queryset = queryset.filter(pk__in=list(valid_report_ids)) - # Plugin information provided? - if self.request: - plugin_key = self.request.data.get('plugin', '') - # Legacy url based lookup - if not plugin_key: - plugin_key = self.request.query_params.get('plugin', '') - plugin = self.get_plugin_class(plugin_key) - plugin_serializer = self.get_plugin_serializer(plugin) + return queryset - if plugin_serializer: - kwargs['plugin_serializer'] = plugin_serializer - serializer = super().get_serializer(*args, **kwargs) - return serializer +@method_decorator(cache_page(5), name='dispatch') +class ReportPrintMixin: + """Mixin for printing reports.""" @method_decorator(never_cache) - def post(self, request, *args, **kwargs): - """POST action for printing labels.""" - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - - template = serializer.validated_data['template'] - - if template.width <= 0 or template.height <= 0: - raise ValidationError({'template': _('Invalid label dimensions')}) - - items = serializer.validated_data['items'] - - # Default to the InvenTreeLabelPlugin - plugin_key = InvenTreeLabelPlugin.NAME.lower() - - if plugin_config := serializer.validated_data.get('plugin', None): - plugin_key = plugin_config.key - - plugin = self.get_plugin_class(plugin_key, raise_error=True) - - instances = template.get_model().objects.filter(pk__in=items) - - if instances.count() == 0: - raise ValidationError(_('No valid items provided to template')) - - return self.print(template, instances, plugin, request) - - def print(self, template, items_to_print, plugin, request): - """Print this label template against a number of provided items.""" - if plugin_serializer := plugin.get_printing_options_serializer( - request, data=request.data, context=self.get_serializer_context() - ): - plugin_serializer.is_valid(raise_exception=True) - - # Create a new LabelOutput instance to print against - output = report.models.LabelOutput.objects.create( - template=template, - items=len(items_to_print), - plugin=plugin.slug, - user=request.user, - progress=0, - complete=False, - ) - - try: - plugin.before_printing() - plugin.print_labels( - template, - output, - items_to_print, - request, - printing_options=(plugin_serializer.data if plugin_serializer else {}), - ) - plugin.after_printing() - except ValidationError as e: - raise (e) - except Exception as e: - InvenTree.exceptions.log_error(f'plugins.{plugin.slug}.print_labels') - raise ValidationError([_('Error printing label'), str(e)]) - - output.refresh_from_db() - - return Response( - report.serializers.LabelOutputSerializer(output).data, status=201 - ) - - -class LabelTemplateList(TemplatePermissionMixin, ListCreateAPI): - """API endpoint for viewing list of LabelTemplate objects.""" - - queryset = report.models.LabelTemplate.objects.all() - serializer_class = report.serializers.LabelTemplateSerializer - filterset_class = LabelFilter - filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] - search_fields = ['name', 'description'] - ordering_fields = ['name', 'enabled'] - - -class LabelTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): - """Detail API endpoint for label template model.""" - - queryset = report.models.LabelTemplate.objects.all() - serializer_class = report.serializers.LabelTemplateSerializer - - -class ReportPrint(GenericAPIView): - """API endpoint for printing reports.""" - - # Any authenticated user can print reports - permission_classes = [permissions.IsAuthenticated] - serializer_class = report.serializers.ReportPrintSerializer + def dispatch(self, *args, **kwargs): + """Prevent caching when printing report templates.""" + return super().dispatch(*args, **kwargs) - @method_decorator(never_cache) - def post(self, request, *args, **kwargs): - """POST action for printing a report.""" - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) + def report_callback(self, object, report, request): + """Callback function for each object/report combination. - template = serializer.validated_data['template'] - items = serializer.validated_data['items'] + Allows functionality to be performed before returning the consolidated PDF - instances = template.get_model().objects.filter(pk__in=items) + Arguments: + object: The model instance to be printed + report: The individual PDF file object + request: The request instance associated with this print call + """ + ... - if instances.count() == 0: - raise ValidationError(_('No valid items provided to template')) + def print(self, request, items_to_print): + """Print this report template against a number of pre-validated items.""" + if len(items_to_print) == 0: + # No valid items provided, return an error message + data = {'error': _('No valid objects provided to template')} - return self.print(template, instances, request) + return Response(data, status=400) - def print(self, template, items_to_print, request): - """Print this report template against a number of provided items.""" outputs = [] # In debug mode, generate single HTML output, rather than PDF @@ -344,30 +171,25 @@ def print(self, template, items_to_print, request): try: # Merge one or more PDF files into a single download - for instance in items_to_print: - context = template.get_context(instance, request) - report_name = template.generate_filename(context) + for item in items_to_print: + report = self.get_object() + report.object_to_print = item - output = template.render(instance, request) + report_name = report.generate_filename(request) + output = report.render(request) - # Provide generated report to any interested plugins - for plugin in registry.with_mixin('report'): - try: - plugin.report_callback(self, instance, output, request) - except Exception: - InvenTree.exceptions.log_error( - f'plugins.{plugin.slug}.report_callback' - ) + # Run report callback for each generated report + self.report_callback(item, output, request) try: if debug_mode: - outputs.append(template.render_as_string(instance, request)) + outputs.append(report.render_as_string(request)) else: - outputs.append(template.render(instance, request)) + outputs.append(output) except TemplateDoesNotExist as e: template = str(e) if not template: - template = template.template + template = report.template return Response( { @@ -384,8 +206,9 @@ def print(self, template, items_to_print, request): if debug_mode: """Concatenate all rendered templates into a single HTML string, and return the string as a HTML response.""" - data = '\n'.join(outputs) - report_name = report_name.replace('.pdf', '.html') + html = '\n'.join(outputs) + + return HttpResponse(html) else: """Concatenate all rendered pages into a single PDF object, and return the resulting document!""" @@ -397,13 +220,13 @@ def print(self, template, items_to_print, request): for page in doc.pages: pages.append(page) - data = outputs[0].get_document().copy(pages).write_pdf() + pdf = outputs[0].get_document().copy(pages).write_pdf() except TemplateDoesNotExist as e: template = str(e) if not template: - template = template.template + template = report.template return Response( { @@ -414,6 +237,14 @@ def print(self, template, items_to_print, request): status=400, ) + inline = common.models.InvenTreeUserSetting.get_setting( + 'REPORT_INLINE', user=request.user, cache=False + ) + + return InvenTree.helpers.DownloadFile( + pdf, report_name, content_type='application/pdf', inline=inline + ) + except Exception as exc: # Log the exception to the database if InvenTree.helpers.str2bool( @@ -430,167 +261,504 @@ def print(self, template, items_to_print, request): 'path': request.path, }) - # Generate a report output object - # TODO: This should be moved to a separate function - # TODO: Allow background printing of reports, with progress reporting - output = report.models.ReportOutput.objects.create( - template=template, - items=len(items_to_print), - user=request.user, - progress=100, - complete=True, - output=ContentFile(data, report_name), - ) + def get(self, request, *args, **kwargs): + """Default implementation of GET for a print endpoint. - return Response( - report.serializers.ReportOutputSerializer(output).data, status=201 - ) + Note that it expects the class has defined a get_items() method + """ + items = self.get_items() + return self.print(request, items) -class ReportTemplateList(TemplatePermissionMixin, ListCreateAPI): - """API endpoint for viewing list of ReportTemplate objects.""" +class StockItemTestReportMixin(ReportFilterMixin): + """Mixin for StockItemTestReport report template.""" + + ITEM_MODEL = StockItem + ITEM_KEY = 'item' + queryset = report.models.TestReport.objects.all() + serializer_class = report.serializers.TestReportSerializer + + +class StockItemTestReportList(StockItemTestReportMixin, ReportListView): + """API endpoint for viewing list of TestReport objects. + + Filterable by: + + - enabled: Filter by enabled / disabled status + - item: Filter by stock item(s) + """ + + pass + + +class StockItemTestReportDetail(StockItemTestReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single TestReport object.""" + + pass + + +class StockItemTestReportPrint(StockItemTestReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a TestReport object.""" + + def report_callback(self, item, report, request): + """Callback to (optionally) save a copy of the generated report.""" + if common.models.InvenTreeSetting.get_setting( + 'REPORT_ATTACH_TEST_REPORT', cache=False + ): + # Construct a PDF file object + try: + pdf = report.get_document().write_pdf() + pdf_content = ContentFile(pdf, 'test_report.pdf') + except TemplateDoesNotExist: + return + + StockItemAttachment.objects.create( + attachment=pdf_content, + stock_item=item, + user=request.user, + comment=_('Test report'), + ) + + +class BOMReportMixin(ReportFilterMixin): + """Mixin for BillOfMaterialsReport report template.""" + + ITEM_MODEL = part.models.Part + ITEM_KEY = 'part' + + queryset = report.models.BillOfMaterialsReport.objects.all() + serializer_class = report.serializers.BOMReportSerializer + + +class BOMReportList(BOMReportMixin, ReportListView): + """API endpoint for viewing a list of BillOfMaterialReport objects. + + Filterably by: + + - enabled: Filter by enabled / disabled status + - part: Filter by part(s) + """ + + pass + + +class BOMReportDetail(BOMReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single BillOfMaterialReport object.""" + + pass + + +class BOMReportPrint(BOMReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a BillOfMaterialReport object.""" + + pass + + +class BuildReportMixin(ReportFilterMixin): + """Mixin for the BuildReport report template.""" + + ITEM_MODEL = build.models.Build + ITEM_KEY = 'build' + + queryset = report.models.BuildReport.objects.all() + serializer_class = report.serializers.BuildReportSerializer + + +class BuildReportList(BuildReportMixin, ReportListView): + """API endpoint for viewing a list of BuildReport objects. + + Can be filtered by: + + - enabled: Filter by enabled / disabled status + - build: Filter by Build object + """ + + pass + + +class BuildReportDetail(BuildReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single BuildReport object.""" + + pass + + +class BuildReportPrint(BuildReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a BuildReport.""" + + pass + + +class PurchaseOrderReportMixin(ReportFilterMixin): + """Mixin for the PurchaseOrderReport report template.""" + + ITEM_MODEL = order.models.PurchaseOrder + ITEM_KEY = 'order' + + queryset = report.models.PurchaseOrderReport.objects.all() + serializer_class = report.serializers.PurchaseOrderReportSerializer + + +class PurchaseOrderReportList(PurchaseOrderReportMixin, ReportListView): + """API list endpoint for the PurchaseOrderReport model.""" + + pass + + +class PurchaseOrderReportDetail(PurchaseOrderReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single PurchaseOrderReport object.""" + + pass + + +class PurchaseOrderReportPrint(PurchaseOrderReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a PurchaseOrderReport object.""" + + pass + + +class SalesOrderReportMixin(ReportFilterMixin): + """Mixin for the SalesOrderReport report template.""" + + ITEM_MODEL = order.models.SalesOrder + ITEM_KEY = 'order' + + queryset = report.models.SalesOrderReport.objects.all() + serializer_class = report.serializers.SalesOrderReportSerializer - queryset = report.models.ReportTemplate.objects.all() - serializer_class = report.serializers.ReportTemplateSerializer - filterset_class = ReportFilter - filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] - search_fields = ['name', 'description'] - ordering_fields = ['name', 'enabled'] +class SalesOrderReportList(SalesOrderReportMixin, ReportListView): + """API list endpoint for the SalesOrderReport model.""" -class ReportTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): - """Detail API endpoint for report template model.""" + pass - queryset = report.models.ReportTemplate.objects.all() - serializer_class = report.serializers.ReportTemplateSerializer +class SalesOrderReportDetail(SalesOrderReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single SalesOrderReport object.""" -class ReportSnippetList(TemplatePermissionMixin, ListCreateAPI): + pass + + +class SalesOrderReportPrint(SalesOrderReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a PurchaseOrderReport object.""" + + pass + + +class ReturnOrderReportMixin(ReportFilterMixin): + """Mixin for the ReturnOrderReport report template.""" + + ITEM_MODEL = order.models.ReturnOrder + ITEM_KEY = 'order' + + queryset = report.models.ReturnOrderReport.objects.all() + serializer_class = report.serializers.ReturnOrderReportSerializer + + +class ReturnOrderReportList(ReturnOrderReportMixin, ReportListView): + """API list endpoint for the ReturnOrderReport model.""" + + pass + + +class ReturnOrderReportDetail(ReturnOrderReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single ReturnOrderReport object.""" + + pass + + +class ReturnOrderReportPrint(ReturnOrderReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a ReturnOrderReport object.""" + + pass + + +class StockLocationReportMixin(ReportFilterMixin): + """Mixin for StockLocation report template.""" + + ITEM_MODEL = StockLocation + ITEM_KEY = 'location' + queryset = report.models.StockLocationReport.objects.all() + serializer_class = report.serializers.StockLocationReportSerializer + + +class StockLocationReportList(StockLocationReportMixin, ReportListView): + """API list endpoint for the StockLocationReportList model.""" + + pass + + +class StockLocationReportDetail(StockLocationReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single StockLocationReportDetail object.""" + + pass + + +class StockLocationReportPrint(StockLocationReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a StockLocationReportPrint object.""" + + pass + + +class ReportSnippetList(ListCreateAPI): """API endpoint for listing ReportSnippet objects.""" queryset = report.models.ReportSnippet.objects.all() serializer_class = report.serializers.ReportSnippetSerializer -class ReportSnippetDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): +class ReportSnippetDetail(RetrieveUpdateDestroyAPI): """API endpoint for a single ReportSnippet object.""" queryset = report.models.ReportSnippet.objects.all() serializer_class = report.serializers.ReportSnippetSerializer -class ReportAssetList(TemplatePermissionMixin, ListCreateAPI): +class ReportAssetList(ListCreateAPI): """API endpoint for listing ReportAsset objects.""" queryset = report.models.ReportAsset.objects.all() serializer_class = report.serializers.ReportAssetSerializer -class ReportAssetDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): +class ReportAssetDetail(RetrieveUpdateDestroyAPI): """API endpoint for a single ReportAsset object.""" queryset = report.models.ReportAsset.objects.all() serializer_class = report.serializers.ReportAssetSerializer -class LabelOutputList(TemplatePermissionMixin, BulkDeleteMixin, ListAPI): - """List endpoint for LabelOutput objects.""" - - queryset = report.models.LabelOutput.objects.all() - serializer_class = report.serializers.LabelOutputSerializer - - -class ReportOutputList(TemplatePermissionMixin, BulkDeleteMixin, ListAPI): - """List endpoint for ReportOutput objects.""" - - queryset = report.models.ReportOutput.objects.all() - serializer_class = report.serializers.ReportOutputSerializer - - -label_api_urls = [ - # Printing endpoint - path('print/', LabelPrint.as_view(), name='api-label-print'), - # Label templates +report_api_urls = [ + # Report assets + path( + 'asset/', + include([ + path( + '/', ReportAssetDetail.as_view(), name='api-report-asset-detail' + ), + path('', ReportAssetList.as_view(), name='api-report-asset-list'), + ]), + ), + # Report snippets + path( + 'snippet/', + include([ + path( + '/', + ReportSnippetDetail.as_view(), + name='api-report-snippet-detail', + ), + path('', ReportSnippetList.as_view(), name='api-report-snippet-list'), + ]), + ), + # Purchase order reports path( - 'template/', + 'po/', include([ + # Detail views path( '/', include([ + re_path( + r'print/?', + PurchaseOrderReportPrint.as_view(), + name='api-po-report-print', + ), path( 'metadata/', MetadataView.as_view(), - {'model': report.models.LabelTemplate}, - name='api-label-template-metadata', + {'model': report.models.PurchaseOrderReport}, + name='api-po-report-metadata', ), path( '', - LabelTemplateDetail.as_view(), - name='api-label-template-detail', + PurchaseOrderReportDetail.as_view(), + name='api-po-report-detail', ), ]), ), - path('', LabelTemplateList.as_view(), name='api-label-template-list'), + # List view + path('', PurchaseOrderReportList.as_view(), name='api-po-report-list'), ]), ), - # Label outputs + # Sales order reports path( - 'output/', - include([path('', LabelOutputList.as_view(), name='api-label-output-list')]), + 'so/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + SalesOrderReportPrint.as_view(), + name='api-so-report-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': report.models.SalesOrderReport}, + name='api-so-report-metadata', + ), + path( + '', + SalesOrderReportDetail.as_view(), + name='api-so-report-detail', + ), + ]), + ), + path('', SalesOrderReportList.as_view(), name='api-so-report-list'), + ]), ), -] - -report_api_urls = [ - # Printing endpoint - path('print/', ReportPrint.as_view(), name='api-report-print'), - # Report templates + # Return order reports path( - 'template/', + 'ro/', include([ path( '/', include([ + path( + r'print/', + ReturnOrderReportPrint.as_view(), + name='api-return-order-report-print', + ), path( 'metadata/', MetadataView.as_view(), - {'model': report.models.ReportTemplate}, - name='api-report-template-metadata', + {'model': report.models.ReturnOrderReport}, + name='api-so-report-metadata', ), path( '', - ReportTemplateDetail.as_view(), - name='api-report-template-detail', + ReturnOrderReportDetail.as_view(), + name='api-return-order-report-detail', ), ]), ), - path('', ReportTemplateList.as_view(), name='api-report-template-list'), + path( + '', ReturnOrderReportList.as_view(), name='api-return-order-report-list' + ), ]), ), - # Generated report outputs + # Build reports path( - 'output/', - include([path('', ReportOutputList.as_view(), name='api-report-output-list')]), + 'build/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + BuildReportPrint.as_view(), + name='api-build-report-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': report.models.BuildReport}, + name='api-build-report-metadata', + ), + path( + '', BuildReportDetail.as_view(), name='api-build-report-detail' + ), + ]), + ), + # List view + path('', BuildReportList.as_view(), name='api-build-report-list'), + ]), ), - # Report assets + # Bill of Material reports path( - 'asset/', + 'bom/', include([ + # Detail views path( - '/', ReportAssetDetail.as_view(), name='api-report-asset-detail' + '/', + include([ + re_path( + r'print/?', + BOMReportPrint.as_view(), + name='api-bom-report-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': report.models.BillOfMaterialsReport}, + name='api-bom-report-metadata', + ), + path('', BOMReportDetail.as_view(), name='api-bom-report-detail'), + ]), ), - path('', ReportAssetList.as_view(), name='api-report-asset-list'), + # List view + path('', BOMReportList.as_view(), name='api-bom-report-list'), ]), ), - # Report snippets + # Stock item test reports path( - 'snippet/', + 'test/', include([ + # Detail views path( '/', - ReportSnippetDetail.as_view(), - name='api-report-snippet-detail', + include([ + re_path( + r'print/?', + StockItemTestReportPrint.as_view(), + name='api-stockitem-testreport-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'report': report.models.TestReport}, + name='api-stockitem-testreport-metadata', + ), + path( + '', + StockItemTestReportDetail.as_view(), + name='api-stockitem-testreport-detail', + ), + ]), + ), + # List view + path( + '', + StockItemTestReportList.as_view(), + name='api-stockitem-testreport-list', + ), + ]), + ), + # Stock Location reports (Stock Location Reports -> sir) + path( + 'slr/', + include([ + # Detail views + path( + '/', + include([ + re_path( + r'print/?', + StockLocationReportPrint.as_view(), + name='api-stocklocation-report-print', + ), + path( + 'metadata/', + MetadataView.as_view(), + {'report': report.models.StockLocationReport}, + name='api-stocklocation-report-metadata', + ), + path( + '', + StockLocationReportDetail.as_view(), + name='api-stocklocation-report-detail', + ), + ]), + ), + # List view + path( + '', + StockLocationReportList.as_view(), + name='api-stocklocation-report-list', ), - path('', ReportSnippetList.as_view(), name='api-report-snippet-list'), ]), ), ] diff --git a/src/backend/InvenTree/report/apps.py b/src/backend/InvenTree/report/apps.py index c5c874f79ea5..7926d4f76a95 100644 --- a/src/backend/InvenTree/report/apps.py +++ b/src/backend/InvenTree/report/apps.py @@ -1,25 +1,18 @@ """Config options for the report app.""" import logging -import os from pathlib import Path from django.apps import AppConfig -from django.core.exceptions import AppRegistryNotReady -from django.core.files.base import ContentFile -from django.db.utils import IntegrityError, OperationalError, ProgrammingError -from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode +from generic.templating.apps import TemplatingMixin -import InvenTree.ready -logger = logging.getLogger('inventree') - - -class ReportConfig(AppConfig): +class ReportConfig(TemplatingMixin, AppConfig): """Configuration class for the "report" app.""" name = 'report' + db = 'template' def ready(self): """This function is called whenever the app is loaded.""" @@ -29,192 +22,103 @@ def ready(self): super().ready() - # skip loading if plugin registry is not loaded or we run in a background thread - if ( - not InvenTree.ready.isPluginRegistryLoaded() - or not InvenTree.ready.isInMainThread() - ): - return - - if not InvenTree.ready.canAppAccessDatabase(allow_test=False): - return # pragma: no cover - - with maintenance_mode_on(): - try: - self.create_default_labels() - self.create_default_reports() - except ( - AppRegistryNotReady, - IntegrityError, - OperationalError, - ProgrammingError, - ): - logger.warning( - 'Database not ready for creating default report templates' - ) - - set_maintenance_mode(False) - - def create_default_labels(self): - """Create default label templates.""" - # Test if models are ready - try: - import report.models - except Exception: # pragma: no cover - # Database is not ready yet - return - - assert bool(report.models.LabelTemplate is not None) - - label_templates = [ - { - 'file': 'part_label.html', - 'name': 'InvenTree Part Label', - 'description': 'Sample part label', - 'model_type': 'part', - }, - { - 'file': 'part_label_code128.html', - 'name': 'InvenTree Part Label (Code128)', - 'description': 'Sample part label with Code128 barcode', - 'model_type': 'part', - }, - { - 'file': 'stockitem_qr.html', - 'name': 'InvenTree Stock Item Label (QR)', - 'description': 'Sample stock item label with QR code', - 'model_type': 'stockitem', - }, - { - 'file': 'stocklocation_qr_and_text.html', - 'name': 'InvenTree Stock Location Label (QR + Text)', - 'description': 'Sample stock item label with QR code and text', - 'model_type': 'stocklocation', - }, - { - 'file': 'stocklocation_qr.html', - 'name': 'InvenTree Stock Location Label (QR)', - 'description': 'Sample stock location label with QR code', - 'model_type': 'stocklocation', - }, - { - 'file': 'buildline_label.html', - 'name': 'InvenTree Build Line Label', - 'description': 'Sample build line label', - 'model_type': 'buildline', - }, - ] - - for template in label_templates: - # Ignore matching templates which are already in the database - if report.models.LabelTemplate.objects.filter( - name=template['name'] - ).exists(): - continue - - filename = template.pop('file') - - template_file = Path(__file__).parent.joinpath( - 'templates', 'label', filename - ) - - if not template_file.exists(): - logger.warning("Missing template file: '%s'", template['name']) - continue - - # Read the existing template file - data = template_file.open('r').read() - - logger.info("Creating new label template: '%s'", template['name']) - - # Create a new entry - report.models.LabelTemplate.objects.create( - **template, template=ContentFile(data, os.path.basename(filename)) - ) - - def create_default_reports(self): - """Create default report templates.""" + def create_defaults(self): + """Create all default templates.""" # Test if models are ready try: import report.models except Exception: # pragma: no cover # Database is not ready yet return - - assert bool(report.models.ReportTemplate is not None) - - # Construct a set of default ReportTemplate instances - report_templates = [ - { - 'file': 'inventree_bill_of_materials_report.html', - 'name': 'InvenTree Bill of Materials', - 'description': 'Sample bill of materials report', - 'model_type': 'part', - }, - { - 'file': 'inventree_build_order_report.html', - 'name': 'InvenTree Build Order', - 'description': 'Sample build order report', - 'model_type': 'build', - }, - { - 'file': 'inventree_purchase_order_report.html', - 'name': 'InvenTree Purchase Order', - 'description': 'Sample purchase order report', - 'model_type': 'purchaseorder', - 'filename_pattern': 'PurchaseOrder-{{ reference }}.pdf', - }, - { - 'file': 'inventree_sales_order_report.html', - 'name': 'InvenTree Sales Order', - 'description': 'Sample sales order report', - 'model_type': 'salesorder', - 'filename_pattern': 'SalesOrder-{{ reference }}.pdf', - }, - { - 'file': 'inventree_return_order_report.html', - 'name': 'InvenTree Return Order', - 'description': 'Sample return order report', - 'model_type': 'returnorder', - 'filename_pattern': 'ReturnOrder-{{ reference }}.pdf', - }, - { - 'file': 'inventree_test_report.html', - 'name': 'InvenTree Test Report', - 'description': 'Sample stock item test report', - 'model_type': 'stockitem', - }, - { - 'file': 'inventree_stock_location_report.html', - 'name': 'InvenTree Stock Location Report', - 'description': 'Sample stock location report', - 'model_type': 'stocklocation', - }, - ] - - for template in report_templates: - # Ignore matching templates which are already in the database - if report.models.ReportTemplate.objects.filter( - name=template['name'] - ).exists(): - continue - - filename = template.pop('file') - - template_file = Path(__file__).parent.joinpath( - 'templates', 'report', filename - ) - - if not template_file.exists(): - logger.warning("Missing template file: '%s'", template['name']) - continue - - # Read the existing template file - data = template_file.open('r').read() - - logger.info("Creating new report template: '%s'", template['name']) - - # Create a new entry - report.models.ReportTemplate.objects.create( - **template, template=ContentFile(data, os.path.basename(filename)) - ) + assert bool(report.models.TestReport is not None) + + # Create the categories + self.create_template_dir( + report.models.TestReport, + [ + { + 'file': 'inventree_test_report.html', + 'name': 'InvenTree Test Report', + 'description': 'Stock item test report', + } + ], + ) + + self.create_template_dir( + report.models.BuildReport, + [ + { + 'file': 'inventree_build_order.html', + 'name': 'InvenTree Build Order', + 'description': 'Build Order job sheet', + } + ], + ) + + self.create_template_dir( + report.models.BillOfMaterialsReport, + [ + { + 'file': 'inventree_bill_of_materials_report.html', + 'name': 'Bill of Materials', + 'description': 'Bill of Materials report', + } + ], + ) + + self.create_template_dir( + report.models.PurchaseOrderReport, + [ + { + 'file': 'inventree_po_report.html', + 'name': 'InvenTree Purchase Order', + 'description': 'Purchase Order example report', + } + ], + ) + + self.create_template_dir( + report.models.SalesOrderReport, + [ + { + 'file': 'inventree_so_report.html', + 'name': 'InvenTree Sales Order', + 'description': 'Sales Order example report', + } + ], + ) + + self.create_template_dir( + report.models.ReturnOrderReport, + [ + { + 'file': 'inventree_return_order_report.html', + 'name': 'InvenTree Return Order', + 'description': 'Return Order example report', + } + ], + ) + + self.create_template_dir( + report.models.StockLocationReport, + [ + { + 'file': 'inventree_slr_report.html', + 'name': 'InvenTree Stock Location', + 'description': 'Stock Location example report', + } + ], + ) + + def get_src_dir(self, ref_name): + """Get the source directory.""" + return Path(__file__).parent.joinpath('templates', self.name) + + def get_new_obj_data(self, data, filename): + """Get the data for a new template db object.""" + return { + 'name': data['name'], + 'description': data['description'], + 'template': filename, + 'enabled': True, + } diff --git a/src/backend/InvenTree/report/helpers.py b/src/backend/InvenTree/report/helpers.py index 04e328da8a49..43f2baab722c 100644 --- a/src/backend/InvenTree/report/helpers.py +++ b/src/backend/InvenTree/report/helpers.py @@ -6,37 +6,9 @@ from django.utils.translation import gettext_lazy as _ -from common.settings import get_global_setting - logger = logging.getLogger('inventree') -def report_model_types(): - """Return a list of database models for which reports can be generated.""" - from InvenTree.helpers_model import getModelsWithMixin - from report.mixins import InvenTreeReportMixin - - return list(getModelsWithMixin(InvenTreeReportMixin)) - - -def report_model_from_name(model_name: str): - """Returns the internal model class from the provided name.""" - if not model_name: - return None - - for model in report_model_types(): - if model.__name__.lower() == model_name: - return model - - -def report_model_options(): - """Return a list of options for models which support report printing.""" - return [ - (model.__name__.lower(), model._meta.verbose_name) - for model in report_model_types() - ] - - def report_page_size_options(): """Returns a list of page size options for PDF reports.""" return [ @@ -69,8 +41,10 @@ def page_size(page_code): def report_page_size_default(): """Returns the default page size for PDF reports.""" + from common.models import InvenTreeSetting + try: - page_size = get_global_setting('REPORT_DEFAULT_PAGE_SIZE', 'A4', create=False) + page_size = InvenTreeSetting.get_setting('REPORT_DEFAULT_PAGE_SIZE', 'A4') except Exception as exc: logger.exception('Error getting default page size: %s', str(exc)) page_size = 'A4' @@ -78,21 +52,21 @@ def report_page_size_default(): return page_size -def encode_image_base64(image, img_format: str = 'PNG'): +def encode_image_base64(image, format: str = 'PNG'): """Return a base-64 encoded image which can be rendered in an tag. Arguments: image: {Image} -- Image to encode - img_format: {str} -- Image format (default = 'PNG') + format: {str} -- Image format (default = 'PNG') Returns: str -- Base64 encoded image data e.g. 'data:image/png;base64,xxxxxxxxx' """ - img_format = str(img_format).lower() + fmt = format.lower() buffered = io.BytesIO() - image.save(buffered, img_format) + image.save(buffered, fmt) img_str = base64.b64encode(buffered.getvalue()) - return f'data:image/{img_format};charset=utf-8;base64,' + img_str.decode() + return f'data:image/{fmt};charset=utf-8;base64,' + img_str.decode() diff --git a/src/backend/InvenTree/report/migrations/0001_initial.py b/src/backend/InvenTree/report/migrations/0001_initial.py index 60b199c44c3e..8b5c2af09f39 100644 --- a/src/backend/InvenTree/report/migrations/0001_initial.py +++ b/src/backend/InvenTree/report/migrations/0001_initial.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): name='ReportAsset', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('asset', models.FileField(help_text='Report asset file', upload_to='report/assets')), + ('asset', models.FileField(help_text='Report asset file', upload_to=report.models.rename_asset)), ('description', models.CharField(help_text='Asset file description', max_length=250)), ], ), @@ -26,7 +26,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, unique=True)), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), ('description', models.CharField(help_text='Report template description', max_length=250)), ], options={ @@ -38,9 +38,9 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, unique=True)), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), ('description', models.CharField(help_text='Report template description', max_length=250)), - ('part_filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250)), + ('part_filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validateFilterString])), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py b/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py index 714267e6fdbd..717176e39090 100644 --- a/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py +++ b/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -19,7 +20,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='filters', - field=models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters'), + field=models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_item_report_filters], verbose_name='Filters'), ), migrations.AlterField( model_name='testreport', @@ -29,6 +30,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='template', - field=models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], verbose_name='Template'), + field=models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], verbose_name='Template'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0006_reportsnippet.py b/src/backend/InvenTree/report/migrations/0006_reportsnippet.py index 8a550b1b3fce..6875ebb5306a 100644 --- a/src/backend/InvenTree/report/migrations/0006_reportsnippet.py +++ b/src/backend/InvenTree/report/migrations/0006_reportsnippet.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -15,7 +16,7 @@ class Migration(migrations.Migration): name='ReportSnippet', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('snippet', models.FileField(help_text='Report snippet file', upload_to='report/snippets', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])])), + ('snippet', models.FileField(help_text='Report snippet file', upload_to=report.models.rename_snippet, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])])), ('description', models.CharField(help_text='Snippet file description', max_length=250)), ], ), diff --git a/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py b/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py index 5cdcb3c18964..b110f63365fa 100644 --- a/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py +++ b/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='template', - field=models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), + field=models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py b/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py index 9545e0fae60a..b1a93656cfe4 100644 --- a/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py +++ b/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -16,11 +17,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs', max_length=250, verbose_name='Part Filters')), + ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs', max_length=250, validators=[report.models.validate_part_report_filters], verbose_name='Part Filters')), ], options={ 'abstract': False, @@ -29,6 +30,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='filters', - field=models.CharField(blank=True, help_text='StockItem query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters'), + field=models.CharField(blank=True, help_text='StockItem query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_item_report_filters], verbose_name='Filters'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0012_buildreport.py b/src/backend/InvenTree/report/migrations/0012_buildreport.py index 900ef3d2fce9..b2d36034809e 100644 --- a/src/backend/InvenTree/report/migrations/0012_buildreport.py +++ b/src/backend/InvenTree/report/migrations/0012_buildreport.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -16,11 +17,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Build query filters (comma-separated list of key=value pairs', max_length=250, verbose_name='Build Filters')), + ('filters', models.CharField(blank=True, help_text='Build query filters (comma-separated list of key=value pairs', max_length=250, validators=[report.models.validate_build_report_filters], verbose_name='Build Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py b/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py index 58504048a372..ab734b7b4839 100644 --- a/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py +++ b/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -16,11 +17,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Purchase order query filters', max_length=250, verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Purchase order query filters', max_length=250, validators=[report.models.validate_purchase_order_filters], verbose_name='Filters')), ], options={ 'abstract': False, @@ -31,11 +32,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Sales order query filters', max_length=250, verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Sales order query filters', max_length=250, validators=[report.models.validate_sales_order_filters], verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py b/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py index ceb0ff9baaff..0348db5b35d9 100644 --- a/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py +++ b/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='reportasset', name='asset', - field=models.FileField(help_text='Report asset file', upload_to='report/assets', verbose_name='Asset'), + field=models.FileField(help_text='Report asset file', upload_to=report.models.rename_asset, verbose_name='Asset'), ), migrations.AlterField( model_name='reportasset', @@ -30,6 +30,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='reportsnippet', name='snippet', - field=models.FileField(help_text='Report snippet file', upload_to='report/snippets', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), + field=models.FileField(help_text='Report snippet file', upload_to=report.models.rename_snippet, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0018_returnorderreport.py b/src/backend/InvenTree/report/migrations/0018_returnorderreport.py index 04822b4a7876..8bdbb6ebe8b7 100644 --- a/src/backend/InvenTree/report/migrations/0018_returnorderreport.py +++ b/src/backend/InvenTree/report/migrations/0018_returnorderreport.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -16,12 +17,12 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('filename_pattern', models.CharField(default='report.pdf', help_text='Pattern for generating report filenames', max_length=100, verbose_name='Filename Pattern')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Return order query filters', max_length=250, verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Return order query filters', max_length=250, validators=[report.models.validate_return_order_filters], verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py b/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py index 048d5455cf60..b43c414e3bea 100644 --- a/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py +++ b/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py @@ -2,6 +2,7 @@ import django.core.validators from django.db import migrations, models +import report.models class Migration(migrations.Migration): @@ -17,12 +18,12 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('filename_pattern', models.CharField(default='report.pdf', help_text='Pattern for generating report filenames', max_length=100, verbose_name='Filename Pattern')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='stock location query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='stock location query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_location_report_filters], verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0022_reporttemplate.py b/src/backend/InvenTree/report/migrations/0022_reporttemplate.py deleted file mode 100644 index c0c4c01b3f51..000000000000 --- a/src/backend/InvenTree/report/migrations/0022_reporttemplate.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-21 03:11 - -import InvenTree.models -import django.core.validators -from django.db import migrations, models -import report.helpers -import report.models -import report.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('report', '0021_auto_20231009_0144'), - ] - - operations = [ - migrations.CreateModel( - name='ReportTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), - ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Template file', upload_to='report/report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), - ('description', models.CharField(help_text='Template description', max_length=250, verbose_name='Description')), - ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Revision number (auto-increments)', verbose_name='Revision')), - ('page_size', models.CharField(default=report.helpers.report_page_size_default, help_text='Page size for PDF reports', max_length=20, verbose_name='Page Size')), - ('landscape', models.BooleanField(default=False, help_text='Render report in landscape orientation', verbose_name='Landscape')), - ('filename_pattern', models.CharField(default='output.pdf', help_text='Pattern for generating filenames', max_length=100, verbose_name='Filename Pattern')), - ('enabled', models.BooleanField(default=True, help_text='Template is enabled', verbose_name='Enabled')), - ('model_type', models.CharField(max_length=100, help_text='Target model type for template', validators=[report.validators.validate_report_model_type])), - ('filters', models.CharField(blank=True, help_text='Template query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.validators.validate_filters], verbose_name='Filters')), - ], - options={ - 'abstract': False, - 'unique_together': [('name', 'model_type')] - }, - bases=(InvenTree.models.PluginValidationMixin, models.Model), - ), - ] diff --git a/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py b/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py deleted file mode 100644 index 4326acaa0460..000000000000 --- a/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py +++ /dev/null @@ -1,106 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-21 04:55 - -import os - -from django.db import migrations -from django.core.files.base import ContentFile - - -def report_model_map(): - """Return a map of model_type: report_type keys.""" - - return { - 'stockitem': 'testreport', - 'stocklocation': 'stocklocationreport', - 'build': 'buildreport', - 'part': 'billofmaterialsreport', - 'purchaseorder': 'purchaseorderreport', - 'salesorder': 'salesorderreport', - 'returnorder': 'returnorderreport' - } - - -def forward(apps, schema_editor): - """Run forwards migration. - - - Create a new ReportTemplate instance for each existing report - """ - - # New 'generic' report template model - ReportTemplate = apps.get_model('report', 'reporttemplate') - - count = 0 - - for model_type, report_model in report_model_map().items(): - - model = apps.get_model('report', report_model) - - for template in model.objects.all(): - # Construct a new ReportTemplate instance - - filename = template.template.path - - if not os.path.exists(filename): - print(f"Migration error: Template file '{filename}' does not exist") - continue - - if '/report/inventree/' in filename: - # Do not migrate internal report templates - continue - - filename = os.path.basename(filename) - filedata = template.template.open('r').read() - - name = template.name - offset = 1 - - # Prevent duplicate names during migration - while ReportTemplate.objects.filter(name=name, model_type=model_type).exists(): - name = template.name + f"_{offset}" - offset += 1 - - ReportTemplate.objects.create( - name=name, - template=ContentFile(filedata, filename), - model_type=model_type, - description=template.description, - revision=template.revision, - filters=template.filters, - filename_pattern=template.filename_pattern, - enabled=template.enabled, - page_size=template.page_size, - landscape=template.landscape, - ) - - count += 1 - - if count > 0: - print(f"Migrated {count} report templates to new ReportTemplate model.") - - -def reverse(apps, schema_editor): - """Run reverse migration. - - - Delete any ReportTemplate instances in the database - """ - ReportTemplate = apps.get_model('report', 'reporttemplate') - - n = ReportTemplate.objects.count() - - if n > 0: - for item in ReportTemplate.objects.all(): - item.template.delete() - item.delete() - - print(f"Deleted {n} ReportTemplate objects and templates") - - -class Migration(migrations.Migration): - - dependencies = [ - ('report', '0022_reporttemplate'), - ] - - operations = [ - migrations.RunPython(forward, reverse_code=reverse) - ] diff --git a/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py b/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py deleted file mode 100644 index 429a8c2a788b..000000000000 --- a/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-21 14:03 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('report', '0023_auto_20240421_0455'), - ] - - operations = [ - migrations.DeleteModel( - name='BillOfMaterialsReport', - ), - migrations.DeleteModel( - name='BuildReport', - ), - migrations.DeleteModel( - name='PurchaseOrderReport', - ), - migrations.DeleteModel( - name='ReturnOrderReport', - ), - migrations.DeleteModel( - name='SalesOrderReport', - ), - migrations.DeleteModel( - name='StockLocationReport', - ), - migrations.DeleteModel( - name='TestReport', - ), - ] diff --git a/src/backend/InvenTree/report/migrations/0025_labeltemplate.py b/src/backend/InvenTree/report/migrations/0025_labeltemplate.py deleted file mode 100644 index 4ce2babc9fd9..000000000000 --- a/src/backend/InvenTree/report/migrations/0025_labeltemplate.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-22 12:48 - -import InvenTree.models -import django.core.validators -from django.db import migrations, models -import report.models -import report.validators - - -class Migration(migrations.Migration): - - dependencies = [ - ('report', '0024_delete_billofmaterialsreport_delete_buildreport_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='LabelTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), - ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('description', models.CharField(help_text='Template description', max_length=250, verbose_name='Description')), - ('template', models.FileField(help_text='Template file', upload_to='report/label', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), - ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Revision number (auto-increments)', verbose_name='Revision')), - ('filename_pattern', models.CharField(default='output.pdf', help_text='Pattern for generating filenames', max_length=100, verbose_name='Filename Pattern')), - ('enabled', models.BooleanField(default=True, help_text='Template is enabled', verbose_name='Enabled')), - ('model_type', models.CharField(max_length=100, validators=[report.validators.validate_report_model_type])), - ('filters', models.CharField(blank=True, help_text='Template query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.validators.validate_filters], verbose_name='Filters')), - ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), - ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), - ], - options={ - 'abstract': False, - 'unique_together': {('name', 'model_type')}, - }, - bases=(InvenTree.models.PluginValidationMixin, models.Model), - ), - ] diff --git a/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py b/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py deleted file mode 100644 index 0e04b915dbfd..000000000000 --- a/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py +++ /dev/null @@ -1,145 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-22 13:01 - -import os - -from django.db import connection, migrations -from django.core.files.base import ContentFile -from django.core.files.storage import default_storage - -import InvenTree.ready - - -def label_model_map(): - """Map legacy label template models to model_type values.""" - - return { - "stockitemlabel": "stockitem", - "stocklocationlabel": "stocklocation", - "partlabel": "part", - "buildlinelabel": "buildline", - } - - -def convert_legacy_labels(table_name, model_name, template_model): - """Map labels from an existing table to a new model type - - Arguments: - table_name: The name of the existing table - model_name: The name of the new model type - template_model: The model class for the new template model - - Note: We use raw SQL queries here, as the original 'label' app has been removed entirely. - """ - count = 0 - - fields = [ - 'name', 'description', 'label', 'enabled', 'height', 'width', 'filename_pattern', 'filters' - ] - - non_null_fields = ['description', 'filename_pattern', 'filters'] - - fieldnames = ', '.join(fields) - - query = f"SELECT {fieldnames} FROM {table_name};" - - with connection.cursor() as cursor: - try: - cursor.execute(query) - except Exception: - # Table likely does not exist - if not InvenTree.ready.isInTestMode(): - print(f"Legacy label table {table_name} not found - skipping migration") - return 0 - - rows = cursor.fetchall() - - for row in rows: - data = { - fields[idx]: row[idx] for idx in range(len(fields)) - } - - for field in non_null_fields: - if data.get(field, None) is None: - data[field] = '' - - # Skip any "builtin" labels - if 'label/inventree/' in data['label']: - continue - - print(f"Creating new LabelTemplate for {model_name} - {data['name']}") - - if template_model.objects.filter(name=data['name'], model_type=model_name).exists(): - print(f"LabelTemplate {data['name']} already exists for {model_name} - skipping") - continue - - - if not default_storage.exists(data['label']): - print(f"Label template file {data['label']} does not exist - skipping") - continue - - # Create a new template file object - filedata = default_storage.open(data['label']).read() - filename = os.path.basename(data['label']) - - # Remove the 'label' key from the data dictionary - data.pop('label') - - data['template'] = ContentFile(filedata, filename) - data['model_type'] = model_name - - template_model.objects.create(**data) - - count += 1 - - return count - - -def forward(apps, schema_editor): - """Run forwards migrations. - - - Create a new LabelTemplate instance for each existing legacy label template. - """ - - LabelTemplate = apps.get_model('report', 'labeltemplate') - - count = 0 - - for template_class, model_type in label_model_map().items(): - - table_name = f'label_{template_class}' - - count += convert_legacy_labels(table_name, model_type, LabelTemplate) or 0 - - if count > 0: - print(f"Migrated {count} report templates to new LabelTemplate model.") - -def reverse(apps, schema_editor): - """Run reverse migrations. - - - Delete any LabelTemplate instances in the database - """ - - LabelTemplate = apps.get_model('report', 'labeltemplate') - - n = LabelTemplate.objects.count() - - if n > 0: - for item in LabelTemplate.objects.all(): - - item.template.delete() - item.delete() - - print(f"Deleted {n} LabelTemplate objects and templates") - -class Migration(migrations.Migration): - - atomic = False - - dependencies = [ - ('report', '0025_labeltemplate'), - ] - - operations = [ - migrations.RunPython(forward, reverse_code=reverse) - ] - diff --git a/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py b/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py deleted file mode 100644 index 4fa5b23aff12..000000000000 --- a/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py +++ /dev/null @@ -1,77 +0,0 @@ -# Generated by Django 4.2.11 on 2024-04-30 09:50 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import report.models -import report.validators - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('report', '0026_auto_20240422_1301'), - ] - - operations = [ - migrations.AlterField( - model_name='labeltemplate', - name='model_type', - field=models.CharField(help_text='Target model type for template', max_length=100, validators=[report.validators.validate_report_model_type]), - ), - migrations.AlterField( - model_name='labeltemplate', - name='template', - field=models.FileField(help_text='Template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), - ), - migrations.AlterField( - model_name='reportasset', - name='asset', - field=models.FileField(help_text='Report asset file', upload_to=report.models.rename_template, verbose_name='Asset'), - ), - migrations.AlterField( - model_name='reportsnippet', - name='snippet', - field=models.FileField(help_text='Report snippet file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), - ), - migrations.AlterField( - model_name='reporttemplate', - name='template', - field=models.FileField(help_text='Template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), - ), - migrations.CreateModel( - name='ReportOutput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateField(auto_now_add=True)), - ('items', models.PositiveIntegerField(default=0, help_text='Number of items to process', verbose_name='Items')), - ('complete', models.BooleanField(default=False, help_text='Report generation is complete', verbose_name='Complete')), - ('progress', models.PositiveIntegerField(default=0, help_text='Report generation progress', verbose_name='Progress')), - ('output', models.FileField(blank=True, help_text='Generated output file', null=True, upload_to='report/output', verbose_name='Output File')), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='report.reporttemplate', verbose_name='Report Template')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='LabelOutput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateField(auto_now_add=True)), - ('items', models.PositiveIntegerField(default=0, help_text='Number of items to process', verbose_name='Items')), - ('complete', models.BooleanField(default=False, help_text='Report generation is complete', verbose_name='Complete')), - ('progress', models.PositiveIntegerField(default=0, help_text='Report generation progress', verbose_name='Progress')), - ('output', models.FileField(blank=True, help_text='Generated output file', null=True, upload_to='label/output', verbose_name='Output File')), - ('plugin', models.CharField(blank=True, help_text='Label output plugin', max_length=100, verbose_name='Plugin')), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='report.labeltemplate', verbose_name='Label Template')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/backend/InvenTree/report/mixins.py b/src/backend/InvenTree/report/mixins.py deleted file mode 100644 index 12142dc16209..000000000000 --- a/src/backend/InvenTree/report/mixins.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Report mixin classes.""" - -from django.db import models - - -class InvenTreeReportMixin(models.Model): - """A mixin class for adding report generation functionality to a model class. - - In addition to exposing the model to the report generation interface, - this mixin provides a hook for providing extra context information to the reports. - """ - - class Meta: - """Metaclass options for this mixin.""" - - abstract = True - - def report_context(self) -> dict: - """Generate a dict of context data to provide to the reporting framework. - - The default implementation returns an empty dict object. - """ - return {} diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 58cb2a099850..6575b494cb10 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -1,26 +1,30 @@ """Report template model definitions.""" +import datetime import logging import os import sys from django.conf import settings -from django.contrib.auth.models import User +from django.core.cache import cache from django.core.exceptions import ValidationError -from django.core.files.storage import default_storage -from django.core.validators import FileExtensionValidator, MinValueValidator +from django.core.validators import FileExtensionValidator from django.db import models from django.template import Context, Template from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import gettext_lazy as _ +import build.models +import common.models import InvenTree.exceptions import InvenTree.helpers import InvenTree.models +import order.models +import part.models import report.helpers -import report.validators -from common.settings import get_global_setting +import stock.models +from InvenTree.helpers import validateFilterString from InvenTree.helpers_model import get_base_url from InvenTree.models import MetadataMixin from plugin.registry import registry @@ -29,7 +33,6 @@ from django_weasyprint import WeasyTemplateResponseMixin except OSError as err: # pragma: no cover print(f'OSError: {err}') - print("Unable to import 'django_weasyprint' module.") print('You may require some further system packages to be installed.') sys.exit(1) @@ -37,104 +40,78 @@ logger = logging.getLogger('inventree') -class WeasyprintReport(WeasyTemplateResponseMixin): - """Class for rendering a HTML template to a PDF.""" - - def __init__(self, request, template, **kwargs): - """Initialize the report mixin with some standard attributes.""" - self.request = request - self.template_name = template - self.pdf_filename = kwargs.get('filename', 'output.pdf') - - def rename_template(instance, filename): - """Function to rename a report template once uploaded. + """Helper function for 'renaming' uploaded report files. - - Retains the original uploaded filename - - Checks for duplicate filenames across instance class + Pass responsibility back to the calling class, + to ensure that files are uploaded to the correct directory. """ - path = instance.get_upload_path(filename) + return instance.rename_file(filename) - # Throw error if any other model instances reference this path - instance.check_existing_file(path, raise_error=True) - # Delete file with this name if it already exists - if default_storage.exists(path): - logger.info(f'Deleting existing template file: {path}') - default_storage.delete(path) +def validate_stock_item_report_filters(filters): + """Validate filter string against StockItem model.""" + return validateFilterString(filters, model=stock.models.StockItem) - return path +def validate_part_report_filters(filters): + """Validate filter string against Part model.""" + return validateFilterString(filters, model=part.models.Part) -class TemplateUploadMixin: - """Mixin class for providing template pathing functions. - - Provides generic method for determining the upload path for a template - - Provides generic method for checking for duplicate filenames +def validate_build_report_filters(filters): + """Validate filter string against Build model.""" + return validateFilterString(filters, model=build.models.Build) - Classes which inherit this mixin can guarantee that uploaded templates are unique, - and that the same filename will be retained when uploaded. - """ - # Directory in which to store uploaded templates - SUBDIR = '' +def validate_purchase_order_filters(filters): + """Validate filter string against PurchaseOrder model.""" + return validateFilterString(filters, model=order.models.PurchaseOrder) - # Name of the template field - TEMPLATE_FIELD = 'template' - def __str__(self) -> str: - """String representation of a TemplateUploadMixin instance.""" - return str(os.path.basename(self.template_name)) +def validate_sales_order_filters(filters): + """Validate filter string against SalesOrder model.""" + return validateFilterString(filters, model=order.models.SalesOrder) - @property - def template_name(self): - """Return the filename of the template associated with this model class.""" - template = getattr(self, self.TEMPLATE_FIELD).name - template = template.replace('/', os.path.sep) - template = template.replace('\\', os.path.sep) - template = settings.MEDIA_ROOT.joinpath(template) +def validate_return_order_filters(filters): + """Validate filter string against ReturnOrder model.""" + return validateFilterString(filters, model=order.models.ReturnOrder) - return str(template) - @property - def extension(self): - """Return the filename extension of the associated template file.""" - return os.path.splitext(self.template.name)[1].lower() - - def get_upload_path(self, filename): - """Generate an upload path for the given filename.""" - fn = os.path.basename(filename) - return os.path.join('report', self.SUBDIR, fn) - - def check_existing_file(self, path, raise_error=False): - """Check if a file already exists with the given filename.""" - filters = {self.TEMPLATE_FIELD: self.get_upload_path(path)} +def validate_stock_location_report_filters(filters): + """Validate filter string against StockLocation model.""" + return validateFilterString(filters, model=stock.models.StockLocation) - exists = self.__class__.objects.filter(**filters).exclude(pk=self.pk).exists() - if exists and raise_error: - raise ValidationError({ - self.TEMPLATE_FIELD: _('Template file with this name already exists') - }) +class WeasyprintReportMixin(WeasyTemplateResponseMixin): + """Class for rendering a HTML template to a PDF.""" - return exists + pdf_filename = 'report.pdf' + pdf_attachment = True - def validate_unique(self, exclude=None): - """Validate that this template is unique.""" - proposed_path = self.get_upload_path(self.template_name) - self.check_existing_file(proposed_path, raise_error=True) - return super().validate_unique(exclude) + def __init__(self, request, template, **kwargs): + """Initialize the report mixin with some standard attributes.""" + self.request = request + self.template_name = template + self.pdf_filename = kwargs.get('filename', 'report.pdf') -class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): - """Base class for reports, labels.""" +class ReportBase(InvenTree.models.InvenTreeModel): + """Base class for uploading html templates.""" class Meta: - """Metaclass options.""" + """Metaclass options. Abstract ensures no database table is created.""" abstract = True - unique_together = ('name', 'model_type') + + def __init__(self, *args, **kwargs): + """Initialize the particular report instance.""" + super().__init__(*args, **kwargs) + + self._meta.get_field( + 'page_size' + ).choices = report.helpers.report_page_size_options() def save(self, *args, **kwargs): """Perform additional actions when the report is saved.""" @@ -143,6 +120,56 @@ def save(self, *args, **kwargs): super().save() + def __str__(self): + """Format a string representation of a report instance.""" + return f'{self.name} - {self.description}' + + @classmethod + def getSubdir(cls): + """Return the subdirectory where template files for this report model will be located.""" + return '' + + def rename_file(self, filename): + """Function for renaming uploaded file.""" + filename = os.path.basename(filename) + + path = os.path.join('report', 'report_template', self.getSubdir(), filename) + + fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() + + # If the report file is the *same* filename as the one being uploaded, + # remove the original one from the media directory + if str(filename) == str(self.template): + if fullpath.exists(): + logger.info("Deleting existing report template: '%s'", filename) + os.remove(fullpath) + + # Ensure that the cache is cleared for this template! + cache.delete(fullpath) + + return path + + @property + def extension(self): + """Return the filename extension of the associated template file.""" + return os.path.splitext(self.template.name)[1].lower() + + @property + def template_name(self): + """Returns the file system path to the template file. + + Required for passing the file to an external process + """ + template = self.template.name + + # TODO @matmair change to using new file objects + template = template.replace('/', os.path.sep) + template = template.replace('\\', os.path.sep) + + template = settings.MEDIA_ROOT.joinpath(template) + + return template + name = models.CharField( blank=False, max_length=100, @@ -150,355 +177,474 @@ def save(self, *args, **kwargs): help_text=_('Template name'), ) + template = models.FileField( + upload_to=rename_template, + verbose_name=_('Template'), + help_text=_('Report template file'), + validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], + ) + description = models.CharField( max_length=250, verbose_name=_('Description'), - help_text=_('Template description'), + help_text=_('Report template description'), ) revision = models.PositiveIntegerField( default=1, verbose_name=_('Revision'), - help_text=_('Revision number (auto-increments)'), + help_text=_('Report revision number (auto-increments)'), editable=False, ) - def generate_filename(self, context, **kwargs): + page_size = models.CharField( + max_length=20, + default=report.helpers.report_page_size_default, + verbose_name=_('Page Size'), + help_text=_('Page size for PDF reports'), + ) + + landscape = models.BooleanField( + default=False, + verbose_name=_('Landscape'), + help_text=_('Render report in landscape orientation'), + ) + + +class ReportTemplateBase(MetadataMixin, ReportBase): + """Reporting template model. + + Able to be passed context data + """ + + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + + abstract = True + + # Pass a single top-level object to the report template + object_to_print = None + + def get_context_data(self, request): + """Supply context data to the template for rendering.""" + return {} + + def get_report_size(self): + """Return the printable page size for this report.""" + try: + page_size_default = common.models.InvenTreeSetting.get_setting( + 'REPORT_DEFAULT_PAGE_SIZE', 'A4' + ) + except Exception: + page_size_default = 'A4' + + page_size = self.page_size or page_size_default + + if self.landscape: + page_size = page_size + ' landscape' + + return page_size + + def context(self, request): + """All context to be passed to the renderer.""" + # Generate custom context data based on the particular report subclass + context = self.get_context_data(request) + + context['base_url'] = get_base_url(request=request) + context['date'] = InvenTree.helpers.current_date() + context['datetime'] = InvenTree.helpers.current_time() + context['page_size'] = self.get_report_size() + context['report_template'] = self + context['report_description'] = self.description + context['report_name'] = self.name + context['report_revision'] = self.revision + context['request'] = request + context['user'] = request.user + + # Pass the context through to any active reporting plugins + plugins = registry.with_mixin('report') + + for plugin in plugins: + # Let each plugin add its own context data + try: + plugin.add_report_context(self, self.object_to_print, request, context) + except Exception: + InvenTree.exceptions.log_error( + f'plugins.{plugin.slug}.add_report_context' + ) + + return context + + def generate_filename(self, request, **kwargs): """Generate a filename for this report.""" template_string = Template(self.filename_pattern) - return template_string.render(Context(context)) + ctx = self.context(request) + + context = Context(ctx) - def render_as_string(self, instance, request=None, **kwargs): + return template_string.render(context) + + def render_as_string(self, request, **kwargs): """Render the report to a HTML string. Useful for debug mode (viewing generated code) """ - context = self.get_context(instance, request, **kwargs) - - return render_to_string(self.template_name, context, request) + return render_to_string(self.template_name, self.context(request), request) - def render(self, instance, request=None, **kwargs): + def render(self, request, **kwargs): """Render the template to a PDF file. Uses django-weasyprint plugin to render HTML template against Weasyprint """ - context = self.get_context(instance, request) + # TODO: Support custom filename generation! + # filename = kwargs.get('filename', 'report.pdf') # Render HTML template to PDF - wp = WeasyprintReport( + wp = WeasyprintReportMixin( request, self.template_name, base_url=request.build_absolute_uri('/'), presentational_hints=True, - filename=self.generate_filename(context), + filename=self.generate_filename(request), **kwargs, ) - return wp.render_to_response(context, **kwargs) + return wp.render_to_response(self.context(request), **kwargs) filename_pattern = models.CharField( - default='output.pdf', + default='report.pdf', verbose_name=_('Filename Pattern'), - help_text=_('Pattern for generating filenames'), + help_text=_('Pattern for generating report filenames'), max_length=100, ) enabled = models.BooleanField( - default=True, verbose_name=_('Enabled'), help_text=_('Template is enabled') - ) - - model_type = models.CharField( - max_length=100, - validators=[report.validators.validate_report_model_type], - help_text=_('Target model type for template'), + default=True, + verbose_name=_('Enabled'), + help_text=_('Report template is enabled'), ) - def clean(self): - """Clean model instance, and ensure validity.""" - super().clean() - model = self.get_model() - filters = self.filters +class TestReport(ReportTemplateBase): + """Render a TestReport against a StockItem object.""" - if model and filters: - report.validators.validate_filters(filters, model=model) + @staticmethod + def get_api_url(): + """Return the API URL associated with the TestReport model.""" + return reverse('api-stockitem-testreport-list') - def get_model(self): - """Return the database model class associated with this report template.""" - return report.helpers.report_model_from_name(self.model_type) + @classmethod + def getSubdir(cls): + """Return the subdirectory where TestReport templates are located.""" + return 'test' filters = models.CharField( blank=True, max_length=250, verbose_name=_('Filters'), - help_text=_('Template query filters (comma-separated list of key=value pairs)'), - validators=[report.validators.validate_filters], + help_text=_( + 'StockItem query filters (comma-separated list of key=value pairs)' + ), + validators=[validate_stock_item_report_filters], ) - def get_filters(self): - """Return a filter dict which can be applied to the target model.""" - return report.validators.validate_filters(self.filters, model=self.get_model()) - - def base_context(self, request=None): - """Return base context data (available to all templates).""" - return { - 'base_url': get_base_url(request=request), - 'date': InvenTree.helpers.current_date(), - 'datetime': InvenTree.helpers.current_time(), - 'template': self, - 'template_description': self.description, - 'template_name': self.name, - 'template_revision': self.revision, - 'user': request.user if request else None, - } + include_installed = models.BooleanField( + default=False, + verbose_name=_('Include Installed Tests'), + help_text=_( + 'Include test results for stock items installed inside assembled item' + ), + ) - def get_context(self, instance, request=None, **kwargs): - """Supply context data to the generic template for rendering. + def get_test_keys(self, stock_item): + """Construct a flattened list of test 'keys' for this StockItem. - Arguments: - instance: The model instance we are printing against - request: The request object (optional) + The list is constructed as follows: + - First, any 'required' tests + - Second, any 'non required' tests + - Finally, any test results which do not match a test """ - # Provide base context information to all templates - base_context = self.base_context(request=request) + keys = [] - # Add in an context information provided by the model instance itself - context = {**base_context, **instance.report_context()} + for test in stock_item.part.getTestTemplates(required=True): + if test.key not in keys: + keys.append(test.key) - return context + for test in stock_item.part.getTestTemplates(required=False): + if test.key not in keys: + keys.append(test.key) + for result in stock_item.testResultList( + include_installed=self.include_installed + ): + if result.key not in keys: + keys.append(result.key) -class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): - """Class representing the ReportTemplate database model.""" + return list(keys) - SUBDIR = 'report' - TEMPLATE_FIELD = 'template' + def get_context_data(self, request): + """Return custom context data for the TestReport template.""" + stock_item = self.object_to_print - @staticmethod - def get_api_url(): - """Return the API endpoint for the ReportTemplate model.""" - return reverse('api-report-template-list') + return { + 'stock_item': stock_item, + 'serial': stock_item.serial, + 'part': stock_item.part, + 'parameters': stock_item.part.parameters_map(), + 'test_keys': self.get_test_keys(stock_item), + 'test_template_list': stock_item.part.getTestTemplates(), + 'test_template_map': stock_item.part.getTestTemplateMap(), + 'results': stock_item.testResultMap( + include_installed=self.include_installed + ), + 'result_list': stock_item.testResultList( + include_installed=self.include_installed + ), + 'installed_items': stock_item.get_installed_items(cascade=True), + } - def __init__(self, *args, **kwargs): - """Initialize the particular report instance.""" - super().__init__(*args, **kwargs) - self._meta.get_field( - 'page_size' - ).choices = report.helpers.report_page_size_options() +class BuildReport(ReportTemplateBase): + """Build order / work order report.""" - template = models.FileField( - upload_to=rename_template, - verbose_name=_('Template'), - help_text=_('Template file'), - validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], - ) + @staticmethod + def get_api_url(): + """Return the API URL associated with the BuildReport model.""" + return reverse('api-build-report-list') - page_size = models.CharField( - max_length=20, - default=report.helpers.report_page_size_default, - verbose_name=_('Page Size'), - help_text=_('Page size for PDF reports'), - ) + @classmethod + def getSubdir(cls): + """Return the subdirectory where BuildReport templates are located.""" + return 'build' - landscape = models.BooleanField( - default=False, - verbose_name=_('Landscape'), - help_text=_('Render report in landscape orientation'), + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Build Filters'), + help_text=_('Build query filters (comma-separated list of key=value pairs'), + validators=[validate_build_report_filters], ) - def get_report_size(self): - """Return the printable page size for this report.""" - try: - page_size_default = get_global_setting( - 'REPORT_DEFAULT_PAGE_SIZE', 'A4', create=False - ) - except Exception: - page_size_default = 'A4' - - page_size = self.page_size or page_size_default + def get_context_data(self, request): + """Custom context data for the build report.""" + my_build = self.object_to_print - if self.landscape: - page_size = page_size + ' landscape' - - return page_size + if not isinstance(my_build, build.models.Build): + raise TypeError('Provided model is not a Build object') - def get_context(self, instance, request=None, **kwargs): - """Supply context data to the report template for rendering.""" - context = { - **super().get_context(instance, request), - 'page_size': self.get_report_size(), - 'landscape': self.landscape, + return { + 'build': my_build, + 'part': my_build.part, + 'build_outputs': my_build.build_outputs.all(), + 'line_items': my_build.build_lines.all(), + 'bom_items': my_build.part.get_bom_items(), + 'reference': my_build.reference, + 'quantity': my_build.quantity, + 'title': str(my_build), } - # Pass the context through to the plugin registry for any additional information - for plugin in registry.with_mixin('report'): - try: - plugin.add_report_context(self, instance, request, context) - except Exception: - InvenTree.exceptions.log_error( - f'plugins.{plugin.slug}.add_report_context' - ) - - return context - -class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): - """Class representing the LabelTemplate database model.""" - - SUBDIR = 'label' - TEMPLATE_FIELD = 'template' +class BillOfMaterialsReport(ReportTemplateBase): + """Render a Bill of Materials against a Part object.""" @staticmethod def get_api_url(): - """Return the API endpoint for the LabelTemplate model.""" - return reverse('api-label-template-list') + """Return the API URL associated with the BillOfMaterialsReport model.""" + return reverse('api-bom-report-list') - template = models.FileField( - upload_to=rename_template, - verbose_name=_('Template'), - help_text=_('Template file'), - validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], - ) - - width = models.FloatField( - default=50, - verbose_name=_('Width [mm]'), - help_text=_('Label width, specified in mm'), - validators=[MinValueValidator(2)], - ) + @classmethod + def getSubdir(cls): + """Return the directory where BillOfMaterialsReport templates are located.""" + return 'bom' - height = models.FloatField( - default=20, - verbose_name=_('Height [mm]'), - help_text=_('Label height, specified in mm'), - validators=[MinValueValidator(2)], + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Part Filters'), + help_text=_('Part query filters (comma-separated list of key=value pairs'), + validators=[validate_part_report_filters], ) - def generate_page_style(self, **kwargs): - """Generate @page style for the label template. - - This is inserted at the top of the style block for a given label - """ - width = kwargs.get('width', self.width) - height = kwargs.get('height', self.height) - margin = kwargs.get('margin', 0) - - return f""" - @page {{ - size: {width}mm {height}mm; - margin: {margin}mm; - }} - """ + def get_context_data(self, request): + """Return custom context data for the BillOfMaterialsReport template.""" + part = self.object_to_print - def get_context(self, instance, request=None, **kwargs): - """Supply context data to the label template for rendering.""" - context = { - **super().get_context(instance, request, **kwargs), - 'width': self.width, - 'height': self.height, + return { + 'part': part, + 'category': part.category, + 'bom_items': part.get_bom_items(), } - if kwargs.pop('insert_page_style', True): - context['page_style'] = self.generate_page_style() - # Pass the context through to any registered plugins - plugins = registry.with_mixin('report') +class PurchaseOrderReport(ReportTemplateBase): + """Render a report against a PurchaseOrder object.""" - for plugin in plugins: - # Let each plugin add its own context data - plugin.add_label_context(self, instance, request, context) + @staticmethod + def get_api_url(): + """Return the API URL associated with the PurchaseOrderReport model.""" + return reverse('api-po-report-list') - return context + @classmethod + def getSubdir(cls): + """Return the directory where PurchaseOrderReport templates are stored.""" + return 'purchaseorder' + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Filters'), + help_text=_('Purchase order query filters'), + validators=[validate_purchase_order_filters], + ) -class TemplateOutput(models.Model): - """Base class representing a generated file from a template. + def get_context_data(self, request): + """Return custom context data for the PurchaseOrderReport template.""" + order = self.object_to_print - As reports (or labels) may take a long time to render, - this process is offloaded to the background worker process. + return { + 'description': order.description, + 'lines': order.lines, + 'extra_lines': order.extra_lines, + 'order': order, + 'reference': order.reference, + 'supplier': order.supplier, + 'title': str(order), + } - The result is either a file made available for download, - or a message indicating that the output is handled externally. - """ - class Meta: - """Metaclass options.""" +class SalesOrderReport(ReportTemplateBase): + """Render a report against a SalesOrder object.""" - abstract = True + @staticmethod + def get_api_url(): + """Return the API URL associated with the SalesOrderReport model.""" + return reverse('api-so-report-list') - created = models.DateField(auto_now_add=True, editable=False) + @classmethod + def getSubdir(cls): + """Return the subdirectory where SalesOrderReport templates are located.""" + return 'salesorder' - user = models.ForeignKey( - User, on_delete=models.SET_NULL, blank=True, null=True, related_name='+' + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Filters'), + help_text=_('Sales order query filters'), + validators=[validate_sales_order_filters], ) - items = models.PositiveIntegerField( - default=0, verbose_name=_('Items'), help_text=_('Number of items to process') - ) + def get_context_data(self, request): + """Return custom context data for a SalesOrderReport template.""" + order = self.object_to_print - complete = models.BooleanField( - default=False, - verbose_name=_('Complete'), - help_text=_('Report generation is complete'), - ) + return { + 'customer': order.customer, + 'description': order.description, + 'lines': order.lines, + 'extra_lines': order.extra_lines, + 'order': order, + 'reference': order.reference, + 'title': str(order), + } - progress = models.PositiveIntegerField( - default=0, verbose_name=_('Progress'), help_text=_('Report generation progress') - ) +class ReturnOrderReport(ReportTemplateBase): + """Render a custom report against a ReturnOrder object.""" -class ReportOutput(TemplateOutput): - """Class representing a generated report output file.""" + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrderReport model.""" + return reverse('api-return-order-report-list') - template = models.ForeignKey( - ReportTemplate, on_delete=models.CASCADE, verbose_name=_('Report Template') - ) + @classmethod + def getSubdir(cls): + """Return the directory where the ReturnOrderReport templates are stored.""" + return 'returnorder' - output = models.FileField( - upload_to='report/output', + filters = models.CharField( blank=True, - null=True, - verbose_name=_('Output File'), - help_text=_('Generated output file'), + max_length=250, + verbose_name=_('Filters'), + help_text=_('Return order query filters'), + validators=[validate_return_order_filters], ) + def get_context_data(self, request): + """Return custom context data for the ReturnOrderReport template.""" + order = self.object_to_print -class LabelOutput(TemplateOutput): - """Class representing a generated label output file.""" + return { + 'order': order, + 'description': order.description, + 'reference': order.reference, + 'customer': order.customer, + 'lines': order.lines, + 'extra_lines': order.extra_lines, + 'title': str(order), + } - plugin = models.CharField( - max_length=100, - blank=True, - verbose_name=_('Plugin'), - help_text=_('Label output plugin'), - ) - template = models.ForeignKey( - LabelTemplate, on_delete=models.CASCADE, verbose_name=_('Label Template') - ) +def rename_snippet(instance, filename): + """Function to rename a report snippet once uploaded.""" + path = ReportSnippet.snippet_path(filename) + fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() - output = models.FileField( - upload_to='label/output', - blank=True, - null=True, - verbose_name=_('Output File'), - help_text=_('Generated output file'), - ) + # If the snippet file is the *same* filename as the one being uploaded, + # delete the original one from the media directory + if str(filename) == str(instance.snippet): + if fullpath.exists(): + logger.info("Deleting existing snippet file: '%s'", filename) + os.remove(fullpath) + # Ensure that the cache is deleted for this snippet + cache.delete(fullpath) + + return path -class ReportSnippet(TemplateUploadMixin, models.Model): + +class ReportSnippet(models.Model): """Report template 'snippet' which can be used to make templates that can then be included in other reports. Useful for 'common' template actions, sub-templates, etc """ - SUBDIR = 'snippets' - TEMPLATE_FIELD = 'snippet' + def __str__(self) -> str: + """String representation of a ReportSnippet instance.""" + return f'snippets/{self.filename}' + + @property + def filename(self): + """Return the filename of the asset.""" + path = self.snippet.name + if path: + return os.path.basename(path) + else: + return '-' + + @staticmethod + def snippet_path(filename): + """Return the fully-qualified snippet path for the given filename.""" + return os.path.join('report', 'snippets', os.path.basename(str(filename))) + + def validate_unique(self, exclude=None): + """Validate that this report asset is unique.""" + proposed_path = self.snippet_path(self.snippet) + + if ( + ReportSnippet.objects.filter(snippet=proposed_path) + .exclude(pk=self.pk) + .count() + > 0 + ): + raise ValidationError({ + 'snippet': _('Snippet file with this name already exists') + }) + + return super().validate_unique(exclude) snippet = models.FileField( - upload_to=rename_template, + upload_to=rename_snippet, verbose_name=_('Snippet'), help_text=_('Report snippet file'), validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], @@ -511,7 +657,26 @@ class ReportSnippet(TemplateUploadMixin, models.Model): ) -class ReportAsset(TemplateUploadMixin, models.Model): +def rename_asset(instance, filename): + """Function to rename an asset file when uploaded.""" + path = ReportAsset.asset_path(filename) + fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() + + # If the asset file is the *same* filename as the one being uploaded, + # delete the original one from the media directory + if str(filename) == str(instance.asset): + if fullpath.exists(): + # Check for existing asset file with the same name + logger.info("Deleting existing asset file: '%s'", filename) + os.remove(fullpath) + + # Ensure the cache is deleted for this asset + cache.delete(fullpath) + + return path + + +class ReportAsset(models.Model): """Asset file for use in report templates. For example, an image to use in a header file. @@ -519,12 +684,41 @@ class ReportAsset(TemplateUploadMixin, models.Model): and can be loaded in a template using the {% report_asset %} tag. """ - SUBDIR = 'assets' - TEMPLATE_FIELD = 'asset' + def __str__(self): + """String representation of a ReportAsset instance.""" + return f'assets/{self.filename}' + + @property + def filename(self): + """Return the filename of the asset.""" + path = self.asset.name + if path: + return os.path.basename(path) + else: + return '-' + + @staticmethod + def asset_path(filename): + """Return the fully-qualified asset path for the given filename.""" + return os.path.join('report', 'assets', os.path.basename(str(filename))) + + def validate_unique(self, exclude=None): + """Validate that this report asset is unique.""" + proposed_path = self.asset_path(self.asset) + + if ( + ReportAsset.objects.filter(asset=proposed_path).exclude(pk=self.pk).count() + > 0 + ): + raise ValidationError({ + 'asset': _('Asset file with this name already exists') + }) + + return super().validate_unique(exclude) # Asset file asset = models.FileField( - upload_to=rename_template, + upload_to=rename_asset, verbose_name=_('Asset'), help_text=_('Report asset file'), ) @@ -535,3 +729,42 @@ class ReportAsset(TemplateUploadMixin, models.Model): verbose_name=_('Description'), help_text=_('Asset file description'), ) + + +class StockLocationReport(ReportTemplateBase): + """Render a StockLocationReport against a StockLocation object.""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the StockLocationReport model.""" + return reverse('api-stocklocation-report-list') + + @classmethod + def getSubdir(cls): + """Return the subdirectory where StockLocationReport templates are located.""" + return 'slr' + + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Filters'), + help_text=_( + 'stock location query filters (comma-separated list of key=value pairs)' + ), + validators=[validate_stock_location_report_filters], + ) + + def get_context_data(self, request): + """Return custom context data for the StockLocationReport template.""" + stock_location = self.object_to_print + + if not isinstance(stock_location, stock.models.StockLocation): + raise TypeError( + 'Provided model is not a StockLocation object -> ' + + str(type(stock_location)) + ) + + return { + 'stock_location': stock_location, + 'stock_items': stock_location.get_stock_items(), + } diff --git a/src/backend/InvenTree/report/serializers.py b/src/backend/InvenTree/report/serializers.py index 1dadc7114ff8..320c489a3733 100644 --- a/src/backend/InvenTree/report/serializers.py +++ b/src/backend/InvenTree/report/serializers.py @@ -1,208 +1,102 @@ """API serializers for the reporting models.""" -from django.utils.translation import gettext_lazy as _ - from rest_framework import serializers -import plugin.models -import plugin.serializers -import report.helpers import report.models from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, - UserSerializer, ) class ReportSerializerBase(InvenTreeModelSerializer): - """Base serializer class for report and label templates.""" - - def __init__(self, *args, **kwargs): - """Override the constructor for the ReportSerializerBase. - - The primary goal here is to ensure that the 'choices' attribute - is set correctly for the 'model_type' field. - """ - super().__init__(*args, **kwargs) + """Base class for report serializer.""" - if len(self.fields['model_type'].choices) == 0: - self.fields['model_type'].choices = report.helpers.report_model_options() + template = InvenTreeAttachmentSerializerField(required=True) @staticmethod - def base_fields(): - """Base serializer field set.""" + def report_fields(): + """Generic serializer fields for a report template.""" return [ 'pk', 'name', 'description', - 'model_type', 'template', 'filters', - 'filename_pattern', + 'page_size', + 'landscape', 'enabled', - 'revision', ] - template = InvenTreeAttachmentSerializerField(required=True) - - revision = serializers.IntegerField(read_only=True) - # Note: The choices are overridden at run-time - model_type = serializers.ChoiceField( - label=_('Model Type'), - choices=report.helpers.report_model_options(), - required=True, - allow_blank=False, - allow_null=False, - ) - - -class ReportTemplateSerializer(ReportSerializerBase): - """Serializer class for report template model.""" +class TestReportSerializer(ReportSerializerBase): + """Serializer class for the TestReport model.""" class Meta: """Metaclass options.""" - model = report.models.ReportTemplate - fields = [*ReportSerializerBase.base_fields(), 'page_size', 'landscape'] - - page_size = serializers.ChoiceField( - required=False, - default=report.helpers.report_page_size_default(), - choices=report.helpers.report_page_size_options(), - ) + model = report.models.TestReport + fields = ReportSerializerBase.report_fields() -class ReportPrintSerializer(serializers.Serializer): - """Serializer class for printing a report.""" +class BuildReportSerializer(ReportSerializerBase): + """Serializer class for the BuildReport model.""" class Meta: """Metaclass options.""" - fields = ['template', 'items'] - - template = serializers.PrimaryKeyRelatedField( - queryset=report.models.ReportTemplate.objects.all(), - many=False, - required=True, - allow_null=False, - label=_('Template'), - help_text=_('Select report template'), - ) - - items = serializers.ListField( - child=serializers.IntegerField(), - required=True, - allow_empty=False, - label=_('Items'), - help_text=_('List of item primary keys to include in the report'), - ) + model = report.models.BuildReport + fields = ReportSerializerBase.report_fields() -class LabelPrintSerializer(serializers.Serializer): - """Serializer class for printing a label.""" - - # List of extra plugin field names - plugin_fields = [] +class BOMReportSerializer(ReportSerializerBase): + """Serializer class for the BillOfMaterialsReport model.""" class Meta: """Metaclass options.""" - fields = ['template', 'items', 'plugin'] - - def __init__(self, *args, **kwargs): - """Override the constructor to add the extra plugin fields.""" - # Reset to a known state - self.Meta.fields = ['template', 'items', 'plugin'] - - if plugin_serializer := kwargs.pop('plugin_serializer', None): - for key, field in plugin_serializer.fields.items(): - self.Meta.fields.append(key) - setattr(self, key, field) - - super().__init__(*args, **kwargs) - - template = serializers.PrimaryKeyRelatedField( - queryset=report.models.LabelTemplate.objects.all(), - many=False, - required=True, - allow_null=False, - label=_('Template'), - help_text=_('Select label template'), - ) - - # Plugin field - note that we use the 'key' (not the pk) for lookup - plugin = plugin.serializers.PluginRelationSerializer( - many=False, - required=False, - allow_null=False, - label=_('Printing Plugin'), - help_text=_('Select plugin to use for label printing'), - ) - - items = serializers.ListField( - child=serializers.IntegerField(), - required=True, - allow_empty=False, - label=_('Items'), - help_text=_('List of item primary keys to include in the report'), - ) - - -class LabelTemplateSerializer(ReportSerializerBase): - """Serializer class for label template model.""" + model = report.models.BillOfMaterialsReport + fields = ReportSerializerBase.report_fields() + + +class PurchaseOrderReportSerializer(ReportSerializerBase): + """Serializer class for the PurchaseOrdeReport model.""" class Meta: """Metaclass options.""" - model = report.models.LabelTemplate - fields = [*ReportSerializerBase.base_fields(), 'width', 'height'] + model = report.models.PurchaseOrderReport + fields = ReportSerializerBase.report_fields() -class BaseOutputSerializer(InvenTreeModelSerializer): - """Base serializer class for template output.""" +class SalesOrderReportSerializer(ReportSerializerBase): + """Serializer class for the SalesOrderReport model.""" - @staticmethod - def base_fields(): - """Basic field set.""" - return [ - 'pk', - 'created', - 'user', - 'user_detail', - 'model_type', - 'items', - 'complete', - 'progress', - 'output', - 'template', - ] - - output = InvenTreeAttachmentSerializerField() - model_type = serializers.CharField(source='template.model_type', read_only=True) + class Meta: + """Metaclass options.""" - user_detail = UserSerializer(source='user', read_only=True, many=False) + model = report.models.SalesOrderReport + fields = ReportSerializerBase.report_fields() -class LabelOutputSerializer(BaseOutputSerializer): - """Serializer class for the LabelOutput model.""" +class ReturnOrderReportSerializer(ReportSerializerBase): + """Serializer class for the ReturnOrderReport model.""" class Meta: """Metaclass options.""" - model = report.models.LabelOutput - fields = [*BaseOutputSerializer.base_fields(), 'plugin'] + model = report.models.ReturnOrderReport + fields = ReportSerializerBase.report_fields() -class ReportOutputSerializer(BaseOutputSerializer): - """Serializer class for the ReportOutput model.""" +class StockLocationReportSerializer(ReportSerializerBase): + """Serializer class for the StockLocationReport model.""" class Meta: """Metaclass options.""" - model = report.models.ReportOutput - fields = BaseOutputSerializer.base_fields() + model = report.models.StockLocationReport + fields = ReportSerializerBase.report_fields() class ReportSnippetSerializer(InvenTreeModelSerializer): diff --git a/src/backend/InvenTree/report/tasks.py b/src/backend/InvenTree/report/tasks.py deleted file mode 100644 index 606cd7130461..000000000000 --- a/src/backend/InvenTree/report/tasks.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Background tasks for the report app.""" - -from datetime import timedelta - -from InvenTree.helpers import current_time -from InvenTree.tasks import ScheduledTask, scheduled_task -from report.models import LabelOutput, ReportOutput - - -@scheduled_task(ScheduledTask.DAILY) -def cleanup_old_report_outputs(): - """Remove old report/label outputs from the database.""" - # Remove any outputs which are older than 5 days - threshold = current_time() - timedelta(days=5) - - LabelOutput.objects.filter(created__lte=threshold).delete() - ReportOutput.objects.filter(created__lte=threshold).delete() diff --git a/src/backend/InvenTree/report/templates/report/inventree_build_order.html b/src/backend/InvenTree/report/templates/report/inventree_build_order.html new file mode 100644 index 000000000000..72e52a889ad9 --- /dev/null +++ b/src/backend/InvenTree/report/templates/report/inventree_build_order.html @@ -0,0 +1,3 @@ +{% extends "report/inventree_build_order_base.html" %} + + diff --git a/src/backend/InvenTree/report/templates/report/inventree_build_order_report.html b/src/backend/InvenTree/report/templates/report/inventree_build_order_base.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_build_order_report.html rename to src/backend/InvenTree/report/templates/report/inventree_build_order_base.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html index f099b8425df3..6f936681dc3f 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html +++ b/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html @@ -12,7 +12,7 @@ {% endblock page_margin %} {% block bottom_left %} -content: "v{{ template_revision }} - {% format_date date %}"; +content: "v{{ report_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_po_report.html b/src/backend/InvenTree/report/templates/report/inventree_po_report.html new file mode 100644 index 000000000000..184ea896e19b --- /dev/null +++ b/src/backend/InvenTree/report/templates/report/inventree_po_report.html @@ -0,0 +1 @@ +{% extends "report/inventree_po_report_base.html" %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_purchase_order_report.html b/src/backend/InvenTree/report/templates/report/inventree_po_report_base.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_purchase_order_report.html rename to src/backend/InvenTree/report/templates/report/inventree_po_report_base.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html b/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html index 0dbc062e7114..cece937a0e15 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html +++ b/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html @@ -1,62 +1 @@ -{% extends "report/inventree_order_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load barcode %} -{% load inventree_extras %} -{% load markdownify %} - -{% block header_content %} - - -
    -

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

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

    {% trans "Line Items" %}

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

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

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

    {% trans "Line Items" %}

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

    - {{ part.full_name }} -

    -

    {{ part.description }}

    -

    {{ stock_item.location }}

    -

    Stock Item ID: {{ stock_item.pk }}

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

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

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

    {% trans "Test Results" %}

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

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

    {% trans "Installed Items" %}

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

    + {{ part.full_name }} +

    +

    {{ part.description }}

    +

    {{ stock_item.location }}

    +

    Stock Item ID: {{ stock_item.pk }}

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

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

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

    {% trans "Test Results" %}

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

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

    {% trans "Installed Items" %}

    + + + + + + {% for sub_item in installed_items %} + + + + + {% endfor %} + +
    + {% trans "Part image" %} + {{ sub_item.part.full_name }} + + {% if sub_item.serialized %} + {% trans "Serial" %}: {{ sub_item.serial }} + {% else %} + {% trans "Quantity" %}: {% decimal sub_item.quantity %} + {% endif %} +
    + +{% endif %} + +{% endblock page_content %} + +{% block post_page_content %} + +{% endblock post_page_content %} diff --git a/src/backend/InvenTree/report/templatetags/barcode.py b/src/backend/InvenTree/report/templatetags/barcode.py index 85aeed953fd9..72568421adc6 100644 --- a/src/backend/InvenTree/report/templatetags/barcode.py +++ b/src/backend/InvenTree/report/templatetags/barcode.py @@ -3,20 +3,12 @@ from django import template import barcode as python_barcode -import qrcode.constants as ECL -from qrcode.main import QRCode +import qrcode as python_qrcode import report.helpers register = template.Library() -QR_ECL_LEVEL_MAP = { - 'L': ECL.ERROR_CORRECT_L, - 'M': ECL.ERROR_CORRECT_M, - 'Q': ECL.ERROR_CORRECT_Q, - 'H': ECL.ERROR_CORRECT_H, -} - def image_data(img, fmt='PNG'): """Convert an image into HTML renderable data. @@ -30,44 +22,36 @@ def image_data(img, fmt='PNG'): def qrcode(data, **kwargs): """Return a byte-encoded QR code image. - Arguments: - data: Data to encode - - Keyword Arguments: - version: QR code version, (None to auto detect) (default = None) - error_correction: Error correction level (L: 7%, M: 15%, Q: 25%, H: 30%) (default = 'M') - box_size: pixel dimensions for one black square pixel in the QR code (default = 20) - border: count white QR square pixels around the qr code, needed as padding (default = 1) - optimize: data will be split into multiple chunks of at least this length using different modes (text, alphanumeric, binary) to optimize the QR code size. Set to `0` to disable. (default = 1) - format: Image format (default = 'PNG') - fill_color: Fill color (default = "black") - back_color: Background color (default = "white") + kwargs: + fill_color: Fill color (default = black) + back_color: Background color (default = white) + version: Default = 1 + box_size: Default = 20 + border: Default = 1 Returns: base64 encoded image data """ - # Extract other arguments from kwargs + # Construct "default" values + params = {'box_size': 20, 'border': 1, 'version': 1} + fill_color = kwargs.pop('fill_color', 'black') back_color = kwargs.pop('back_color', 'white') - image_format = kwargs.pop('format', 'PNG') - optimize = kwargs.pop('optimize', 1) - - # Construct QR code object - qr = QRCode(**{ - 'box_size': 20, - 'border': 1, - 'version': None, - **kwargs, - 'error_correction': QR_ECL_LEVEL_MAP[kwargs.get('error_correction', 'M')], - }) - qr.add_data(data, optimize=optimize) - qr.make(fit=False) # if version is None, it will automatically use fit=True + + format = kwargs.pop('format', 'PNG') + + params.update(**kwargs) + + qr = python_qrcode.QRCode(**params) + + qr.add_data(data, optimize=20) + qr.make(fit=True) qri = qr.make_image(fill_color=fill_color, back_color=back_color) # Render to byte-encoded image - return image_data(qri, fmt=image_format) + return image_data(qri, fmt=format) @register.simple_tag() @@ -75,7 +59,7 @@ def barcode(data, barcode_class='code128', **kwargs): """Render a barcode.""" constructor = python_barcode.get_barcode_class(barcode_class) - img_format = kwargs.pop('format', 'PNG') + format = kwargs.pop('format', 'PNG') data = str(data).zfill(constructor.digits) @@ -86,4 +70,4 @@ def barcode(data, barcode_class='code128', **kwargs): image = barcode_image.render(writer_options=kwargs) # Render to byte-encoded image - return image_data(image, fmt=img_format) + return image_data(image, fmt=format) diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 39f664b87092..aea2105abbf8 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -7,17 +7,15 @@ from django import template from django.conf import settings -from django.core.exceptions import ValidationError from django.utils.safestring import SafeString, mark_safe from django.utils.translation import gettext_lazy as _ from PIL import Image -import common.icons import InvenTree.helpers import InvenTree.helpers_model import report.helpers -from common.settings import get_global_setting +from common.models import InvenTreeSetting from company.models import Company from part.models import Part @@ -89,7 +87,7 @@ def asset(filename): 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) + debug_mode = InvenTreeSetting.get_setting('REPORT_DEBUG_MODE', cache=False) # Test if the file actually exists full_path = settings.MEDIA_ROOT.joinpath('report', 'assets', filename).resolve() @@ -134,7 +132,7 @@ def uploaded_image( 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) + debug_mode = InvenTreeSetting.get_setting('REPORT_DEBUG_MODE', cache=False) # Check if the file exists if not filename: @@ -172,18 +170,6 @@ def uploaded_image( width = kwargs.get('width', None) height = kwargs.get('height', None) - if width is not None: - try: - width = int(width) - except ValueError: - width = None - - if height is not None: - try: - height = int(height) - except ValueError: - height = None - if width is not None and height is not None: # Resize the image, width *and* height are provided img = img.resize((width, height)) @@ -199,12 +185,10 @@ def uploaded_image( img = img.resize((wsize, height)) # Optionally rotate the image - if rotate := kwargs.get('rotate', None): - try: - rotate = int(rotate) - img = img.rotate(rotate) - except ValueError: - pass + rotate = kwargs.get('rotate', None) + + if rotate is not None: + img = img.rotate(rotate) # Return a base-64 encoded image img_data = report.helpers.encode_image_base64(img) @@ -316,7 +300,7 @@ def logo_image(**kwargs): - Otherwise, return a path to the default InvenTree logo """ # If in debug mode, return URL to the image, not a local file - debug_mode = get_global_setting('REPORT_DEBUG_MODE', cache=False) + debug_mode = InvenTreeSetting.get_setting('REPORT_DEBUG_MODE', cache=False) return InvenTree.helpers.getLogoImage(as_file=not debug_mode, **kwargs) @@ -475,61 +459,3 @@ def format_date(date, timezone=None, format=None): return date.strftime(format) else: return date.isoformat() - - -@register.simple_tag() -def icon(name, **kwargs): - """Render an icon from the icon packs. - - Arguments: - name: The name of the icon to render - - Keyword Arguments: - class: Optional class name(s) to apply to the icon element - """ - if not name: - return '' - - try: - pack, icon, variant = common.icons.validate_icon(name) - except ValidationError: - return '' - - unicode = chr(int(icon['variants'][variant], 16)) - return mark_safe( - f'{unicode}' - ) - - -@register.simple_tag() -def include_icon_fonts(): - """Return the CSS font-face rule for the icon fonts used on the current page (or all).""" - fonts = [] - - for font in common.icons.get_icon_packs().values(): - # generate the font src string (prefer ttf over woff, woff2 is not supported by weasyprint) - if 'truetype' in font.fonts: - font_format, url = 'truetype', font.fonts['truetype'] - elif 'woff' in font.fonts: - font_format, url = 'woff', font.fonts['woff'] - - fonts.append(f""" -@font-face {'{'} - font-family: 'inventree-icon-font-{font.prefix}'; - src: url('{InvenTree.helpers_model.construct_absolute_url(url)}') format('{font_format}'); -{'}'}\n""") - - icon_class = f""" -.icon {'{'} - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better font rendering */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -{'}'} - """ - - return mark_safe(icon_class + '\n'.join(fonts)) diff --git a/src/backend/InvenTree/report/tests.py b/src/backend/InvenTree/report/tests.py index e534a3ab3946..e44d19b46708 100644 --- a/src/backend/InvenTree/report/tests.py +++ b/src/backend/InvenTree/report/tests.py @@ -1,10 +1,12 @@ """Unit testing for the various report models.""" +import os +import shutil from io import StringIO -from django.apps import apps from django.conf import settings from django.core.cache import cache +from django.http.response import StreamingHttpResponse from django.test import TestCase, override_settings from django.urls import reverse from django.utils import timezone @@ -15,14 +17,12 @@ import report.models as report_models from build.models import Build -from common.models import Attachment, InvenTreeSetting +from common.models import InvenTreeSetting, InvenTreeUserSetting +from InvenTree.files import MEDIA_STORAGE_DIR, TEMPLATES_DIR from InvenTree.unit_test import InvenTreeAPITestCase -from order.models import ReturnOrder, SalesOrder -from plugin.registry import registry -from report.models import LabelTemplate, ReportTemplate from report.templatetags import barcode as barcode_tags from report.templatetags import report as report_tags -from stock.models import StockItem +from stock.models import StockItem, StockItemAttachment class ReportTagTest(TestCase): @@ -186,31 +186,6 @@ def test_date_tags(self): result = report_tags.format_datetime(time, tz, fmt) self.assertEqual(result, expected) - def test_icon(self): - """Test the icon template tag.""" - for icon in [None, '', 'not:the-correct-format', 'any-non-existent-icon']: - self.assertEqual(report_tags.icon(icon), '') - - self.assertEqual( - report_tags.icon('ti:package:outline'), - f'{chr(int("eaff", 16))}', - ) - self.assertEqual( - report_tags.icon( - 'ti:package:outline', **{'class': 'my-custom-class my-seconds-class'} - ), - f'{chr(int("eaff", 16))}', - ) - - def test_include_icon_fonts(self): - """Test the include_icon_fonts template tag.""" - style = report_tags.include_icon_fonts() - - self.assertIn('@font-face {', style) - self.assertIn("font-family: 'inventree-icon-font-ti';", style) - self.assertIn('tabler-icons/tabler-icons.ttf', style) - self.assertIn('.icon {', style) - class BarcodeTagTest(TestCase): """Unit tests for the barcode template tags.""" @@ -219,19 +194,19 @@ def test_barcode(self): """Test the barcode generation tag.""" barcode = barcode_tags.barcode('12345') - self.assertIsInstance(barcode, str) + self.assertTrue(isinstance(barcode, str)) self.assertTrue(barcode.startswith('data:image/png;')) # Try with a different format barcode = barcode_tags.barcode('99999', format='BMP') - self.assertIsInstance(barcode, str) + self.assertTrue(isinstance(barcode, str)) self.assertTrue(barcode.startswith('data:image/bmp;')) def test_qrcode(self): """Test the qrcode generation tag.""" # Test with default settings qrcode = barcode_tags.qrcode('hello world') - self.assertIsInstance(qrcode, str) + self.assertTrue(isinstance(qrcode, str)) self.assertTrue(qrcode.startswith('data:image/png;')) self.assertEqual(len(qrcode), 700) @@ -239,7 +214,7 @@ def test_qrcode(self): qrcode = barcode_tags.qrcode( 'hello_world', version=2, box_size=50, format='BMP' ) - self.assertIsInstance(qrcode, str) + self.assertTrue(isinstance(qrcode, str)) self.assertTrue(qrcode.startswith('data:image/bmp;')) self.assertEqual(len(qrcode), 309720) @@ -258,29 +233,64 @@ class ReportTest(InvenTreeAPITestCase): 'stock_tests', 'bom', 'build', - 'order', - 'return_order', - 'sales_order', ] superuser = True + model = None + list_url = None + detail_url = None + print_url = None + def setUp(self): """Ensure cache is cleared as part of test setup.""" cache.clear() + return super().setUp() - apps.get_app_config('report').create_default_reports() + def copyReportTemplate(self, filename, description): + """Copy the provided report template into the required media directory.""" + src_dir = TEMPLATES_DIR.joinpath('report', 'templates', 'report') + template_dir = os.path.join('report', 'inventree', self.model.getSubdir()) + dst_dir = MEDIA_STORAGE_DIR.joinpath(template_dir) - return super().setUp() + if not dst_dir.exists(): # pragma: no cover + dst_dir.mkdir(parents=True, exist_ok=True) + + src_file = src_dir.joinpath(filename) + dst_file = dst_dir.joinpath(filename) + + if not dst_file.exists(): # pragma: no cover + shutil.copyfile(src_file, dst_file) + + # Convert to an "internal" filename + db_filename = os.path.join(template_dir, filename) + + # Create a database entry for this report template! + self.model.objects.create( + name=os.path.splitext(filename)[0], + description=description, + template=db_filename, + enabled=True, + ) + + def test_api_url(self): + """Test returned API Url against URL tag defined in this file.""" + if not self.list_url: + return + + self.assertEqual(reverse(self.list_url), self.model.get_api_url()) def test_list_endpoint(self): """Test that the LIST endpoint works for each report.""" - url = reverse('api-report-template-list') + if not self.list_url: + return + + url = reverse(self.list_url) response = self.get(url) self.assertEqual(response.status_code, 200) - reports = ReportTemplate.objects.all() + reports = self.model.objects.all() n = len(reports) # API endpoint must return correct number of reports @@ -307,7 +317,10 @@ def test_list_endpoint(self): def test_create_endpoint(self): """Test that creating a new report works for each report.""" - url = reverse('api-report-template-list') + if not self.list_url: + return + + url = reverse(self.list_url) # Create a new report # Django REST API "APITestCase" does not work like requests - to send a file without it existing on disk, @@ -317,23 +330,16 @@ def test_create_endpoint(self): ) filestr.name = 'ExampleTemplate.html' - data = { - 'name': 'New report', - 'description': 'A fancy new report created through API test', - 'template': filestr, - 'model_type': 'part2', - } - - # Test with invalid model type - response = self.post(url, data=data, expected_code=400) - - self.assertIn('"part2" is not a valid choice', str(response.data['model_type'])) - - # With valid model type - data['model_type'] = 'part' - filestr.seek(0) - - response = self.post(url, data=data, format=None, expected_code=201) + response = self.post( + url, + data={ + 'name': 'New report', + 'description': 'A fancy new report created through API test', + 'template': filestr, + }, + format=None, + expected_code=201, + ) # Make sure the expected keys are in the response self.assertIn('pk', response.data) @@ -351,7 +357,10 @@ def test_create_endpoint(self): def test_detail_endpoint(self): """Test that the DETAIL endpoint works for each report.""" - reports = ReportTemplate.objects.all() + if not self.detail_url: + return + + reports = self.model.objects.all() n = len(reports) @@ -360,8 +369,7 @@ def test_detail_endpoint(self): # Check detail page for first report response = self.get( - reverse('api-report-template-detail', kwargs={'pk': reports[0].pk}), - expected_code=200, + reverse(self.detail_url, kwargs={'pk': reports[0].pk}), expected_code=200 ) # Make sure the expected keys are in the response @@ -379,7 +387,7 @@ def test_detail_endpoint(self): # Check PATCH method response = self.patch( - reverse('api-report-template-detail', kwargs={'pk': reports[0].pk}), + reverse(self.detail_url, kwargs={'pk': reports[0].pk}), { 'name': 'Changed name during test', 'description': 'New version of the template', @@ -406,206 +414,218 @@ def test_detail_endpoint(self): # Delete the last report response = self.delete( - reverse('api-report-template-detail', kwargs={'pk': reports[n - 1].pk}), + reverse(self.detail_url, kwargs={'pk': reports[n - 1].pk}), expected_code=204, ) def test_metadata(self): """Unit tests for the metadata field.""" - p = ReportTemplate.objects.first() + if self.model is not None: + p = self.model.objects.first() - self.assertEqual(p.metadata, {}) + self.assertEqual(p.metadata, {}) - self.assertIsNone(p.get_metadata('test')) - self.assertEqual(p.get_metadata('test', backup_value=123), 123) + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) - # Test update via the set_metadata() method - p.set_metadata('test', 3) - self.assertEqual(p.get_metadata('test'), 3) + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) - for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: - p.set_metadata(k, k) + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) - self.assertEqual(len(p.metadata.keys()), 4) + self.assertEqual(len(p.metadata.keys()), 4) - def test_report_template_permissions(self): - """Test that the user permissions are correctly applied. - - For all /api/report/ endpoints, any authenticated user should have full read access - - Write access is limited to staff users - - Non authenticated users should have no access at all - """ - # First test the "report list" endpoint - url = reverse('api-report-template-list') +class TestReportTest(ReportTest): + """Unit testing class for the stock item TestReport model.""" - template = ReportTemplate.objects.first() + model = report_models.TestReport - detail_url = reverse('api-report-template-detail', kwargs={'pk': template.pk}) + list_url = 'api-stockitem-testreport-list' + detail_url = 'api-stockitem-testreport-detail' + print_url = 'api-stockitem-testreport-print' - # Non-authenticated user should have no access - self.logout() + def setUp(self): + """Setup function for the stock item TestReport.""" + self.copyReportTemplate('inventree_test_report.html', 'stock item test report') - self.get(url, expected_code=401) + return super().setUp() - # Authenticated user should have read access - self.user.is_staff = False - self.user.save() + def test_print(self): + """Printing tests for the TestReport.""" + report = self.model.objects.first() - self.login() + url = reverse(self.print_url, kwargs={'pk': report.pk}) - # Check read access to template list URL - self.get(url, expected_code=200) + # Try to print without providing a valid StockItem + response = self.get(url, expected_code=400) - # Check read access to template detail URL - self.get(detail_url, expected_code=200) + # Try to print with an invalid StockItem + response = self.get(url, {'item': 9999}, expected_code=400) - # An update to the report template should fail - self.patch( - detail_url, - data={'description': 'Some new description here?'}, - expected_code=403, - ) + # Now print with a valid StockItem + item = StockItem.objects.first() - # Now, test with a staff user - self.logout() + response = self.get(url, {'item': item.pk}, expected_code=200) - self.user.is_staff = True - self.user.save() + # Response should be a StreamingHttpResponse (PDF file) + self.assertEqual(type(response), StreamingHttpResponse) - self.login() + headers = response.headers + self.assertEqual(headers['Content-Type'], 'application/pdf') - self.patch( - detail_url, - data={'description': 'An updated description'}, - expected_code=200, - ) + # By default, this should *not* have created an attachment against this stockitem + self.assertFalse(StockItemAttachment.objects.filter(stock_item=item).exists()) - template.refresh_from_db() - self.assertEqual(template.description, 'An updated description') + # Change the setting, now the test report should be attached automatically + InvenTreeSetting.set_setting('REPORT_ATTACH_TEST_REPORT', True, None) + response = self.get(url, {'item': item.pk}, expected_code=200) -class PrintTestMixins: - """Mixin that enables e2e printing tests.""" + headers = response.headers + self.assertEqual(headers['Content-Type'], 'application/pdf') - plugin_ref = 'samplelabelprinter' + # Check that a report has been uploaded + attachment = StockItemAttachment.objects.filter(stock_item=item).first() + self.assertIsNotNone(attachment) - def do_activate_plugin(self): - """Activate the 'samplelabel' plugin.""" - plugin = registry.get_plugin(self.plugin_ref) - self.assertIsNotNone(plugin) - config = plugin.plugin_config() - self.assertIsNotNone(config) - config.active = True - config.save() - def run_print_test(self, qs, model_type, label: bool = True): - """Run tests on single and multiple page printing. +class BuildReportTest(ReportTest): + """Unit test class for the BuildReport model.""" - Args: - qs: class of the base queryset - model_type: the model type of the queryset - label: whether the model is a label or report - """ - mdl = LabelTemplate if label else ReportTemplate - url = reverse('api-label-print' if label else 'api-report-print') + model = report_models.BuildReport - qs = qs.objects.all() - template = mdl.objects.filter(enabled=True, model_type=model_type).first() - plugin = registry.get_plugin(self.plugin_ref) + list_url = 'api-build-report-list' + detail_url = 'api-build-report-detail' + print_url = 'api-build-report-print' - # Single page printing - self.post( - url, - {'template': template.pk, 'plugin': plugin.pk, 'items': [qs[0].pk]}, - expected_code=201, + def setUp(self): + """Setup unit testing functions.""" + self.copyReportTemplate('inventree_build_order.html', 'build order template') + + return super().setUp() + + def test_print(self): + """Printing tests for the BuildReport.""" + report = self.model.objects.first() + + url = reverse(self.print_url, kwargs={'pk': report.pk}) + + # Try to print without providing a valid BuildOrder + response = self.get(url, expected_code=400) + + # Try to print with an invalid BuildOrder + response = self.get(url, {'build': 9999}, expected_code=400) + + # Now print with a valid BuildOrder + + build = Build.objects.first() + + response = self.get(url, {'build': build.pk}) + + self.assertEqual(type(response), StreamingHttpResponse) + + headers = response.headers + + self.assertEqual(headers['Content-Type'], 'application/pdf') + self.assertEqual( + headers['Content-Disposition'], 'attachment; filename="report.pdf"' ) - # Multi page printing - self.post( - url, - { - 'template': template.pk, - 'plugin': plugin.pk, - 'items': [item.pk for item in qs], - }, - expected_code=201, - max_query_time=15, - max_query_count=500 * len(qs), + # Now, set the download type to be "inline" + inline = InvenTreeUserSetting.get_setting_object( + 'REPORT_INLINE', cache=False, user=self.user + ) + inline.value = True + inline.save() + + response = self.get(url, {'build': 1}) + headers = response.headers + self.assertEqual(headers['Content-Type'], 'application/pdf') + self.assertEqual( + headers['Content-Disposition'], 'inline; filename="report.pdf"' ) -class TestReportTest(PrintTestMixins, ReportTest): - """Unit testing class for the stock item TestReport model.""" +class BOMReportTest(ReportTest): + """Unit test class for the BillOfMaterialsReport model.""" - model = report_models.ReportTemplate + model = report_models.BillOfMaterialsReport - list_url = 'api-report-template-list' - detail_url = 'api-report-template-detail' - print_url = 'api-report-print' + list_url = 'api-bom-report-list' + detail_url = 'api-bom-report-detail' + print_url = 'api-bom-report-print' def setUp(self): - """Setup function for the stock item TestReport.""" - apps.get_app_config('report').create_default_reports() - self.do_activate_plugin() + """Setup function for the bill of materials Report.""" + self.copyReportTemplate( + 'inventree_bill_of_materials_report.html', 'bill of materials report' + ) return super().setUp() - def test_print(self): - """Printing tests for the TestReport.""" - template = ReportTemplate.objects.filter( - enabled=True, model_type='stockitem' - ).first() - self.assertIsNotNone(template) - url = reverse(self.print_url) +class PurchaseOrderReportTest(ReportTest): + """Unit test class for the PurchaseOrderReport model.""" - # Try to print without providing a valid StockItem - self.post(url, {'template': template.pk}, expected_code=400) + model = report_models.PurchaseOrderReport - # Try to print with an invalid StockItem - self.post(url, {'template': template.pk, 'items': [9999]}, expected_code=400) + list_url = 'api-po-report-list' + detail_url = 'api-po-report-detail' + print_url = 'api-po-report-print' - # Now print with a valid StockItem - item = StockItem.objects.first() + def setUp(self): + """Setup function for the purchase order Report.""" + self.copyReportTemplate('inventree_po_report.html', 'purchase order report') - response = self.post( - url, {'template': template.pk, 'items': [item.pk]}, expected_code=201 - ) + return super().setUp() - # There should be a link to the generated PDF - self.assertEqual(response.data['output'].startswith('/media/report/'), True) - # By default, this should *not* have created an attachment against this stockitem - self.assertFalse( - Attachment.objects.filter(model_id=item.pk, model_type='stockitem').exists() - ) +class SalesOrderReportTest(ReportTest): + """Unit test class for the SalesOrderReport model.""" - return - # TODO @matmair - Re-add this test after https://github.com/inventree/InvenTree/pull/7074/files#r1600694356 is resolved - # Change the setting, now the test report should be attached automatically - InvenTreeSetting.set_setting('REPORT_ATTACH_TEST_REPORT', True, None) + model = report_models.SalesOrderReport - response = self.post( - url, {'template': template.pk, 'items': [item.pk]}, expected_code=201 + list_url = 'api-so-report-list' + detail_url = 'api-so-report-detail' + print_url = 'api-so-report-print' + + def setUp(self): + """Setup function for the sales order Report.""" + self.copyReportTemplate('inventree_so_report.html', 'sales order report') + + return super().setUp() + + +class ReturnOrderReportTest(ReportTest): + """Unit tests for the ReturnOrderReport model.""" + + model = report_models.ReturnOrderReport + list_url = 'api-return-order-report-list' + detail_url = 'api-return-order-report-detail' + print_url = 'api-return-order-report-print' + + def setUp(self): + """Setup function for the ReturnOrderReport tests.""" + self.copyReportTemplate( + 'inventree_return_order_report.html', 'return order report' ) - # There should be a link to the generated PDF - self.assertEqual(response.data['output'].startswith('/media/report/'), True) + return super().setUp() - # Check that a report has been uploaded - attachment = Attachment.objects.filter( - model_id=item.pk, model_type='stockitem' - ).first() - self.assertIsNotNone(attachment) - def test_mdl_build(self): - """Test the Build model.""" - self.run_print_test(Build, 'build', label=False) +class StockLocationReportTest(ReportTest): + """Unit tests for the StockLocationReport model.""" - def test_mdl_returnorder(self): - """Test the ReturnOrder model.""" - self.run_print_test(ReturnOrder, 'returnorder', label=False) + model = report_models.StockLocationReport + list_url = 'api-stocklocation-report-list' + detail_url = 'api-stocklocation-report-detail' + print_url = 'api-stocklocation-report-print' - def test_mdl_salesorder(self): - """Test the SalesOrder model.""" - self.run_print_test(SalesOrder, 'salesorder', label=False) + def setUp(self): + """Setup function for the StockLocationReport tests.""" + self.copyReportTemplate('inventree_slr_report.html', 'stock location report') + + return super().setUp() diff --git a/src/backend/InvenTree/report/validators.py b/src/backend/InvenTree/report/validators.py deleted file mode 100644 index ad9e8e0d3345..000000000000 --- a/src/backend/InvenTree/report/validators.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Validators for report models.""" - -from django.core.exceptions import ValidationError - -import report.helpers - - -def validate_report_model_type(value): - """Ensure that the selected model type is valid.""" - model_options = [el[0] for el in report.helpers.report_model_options()] - - if value not in model_options: - raise ValidationError('Not a valid model type') - - -def validate_filters(value, model=None): - """Validate that the provided model filters are valid.""" - from InvenTree.helpers import validateFilterString - - return validateFilterString(value, model=model) diff --git a/src/backend/InvenTree/script/update_icons.py b/src/backend/InvenTree/script/update_icons.py deleted file mode 100644 index 1d0dfb2a5726..000000000000 --- a/src/backend/InvenTree/script/update_icons.py +++ /dev/null @@ -1,67 +0,0 @@ -"""This script updates the vendored tabler icons package.""" - -import json -import os -import shutil -import tempfile - -if __name__ == '__main__': - MY_DIR = os.path.dirname(os.path.realpath(__file__)) - STATIC_FOLDER = os.path.abspath( - os.path.join(MY_DIR, '..', 'InvenTree', 'static', 'tabler-icons') - ) - TMP_FOLDER = os.path.join(tempfile.gettempdir(), 'tabler-icons') - - if not os.path.exists(TMP_FOLDER): - os.mkdir(TMP_FOLDER) - - if not os.path.exists(STATIC_FOLDER): - os.mkdir(STATIC_FOLDER) - - print('Downloading tabler icons...') - os.system(f'npm install --prefix {TMP_FOLDER} @tabler/icons @tabler/icons-webfont') - - print(f'Copying tabler icons to {STATIC_FOLDER}...') - - for font in ['tabler-icons.woff', 'tabler-icons.woff2', 'tabler-icons.ttf']: - shutil.copyfile( - os.path.join( - TMP_FOLDER, - 'node_modules', - '@tabler', - 'icons-webfont', - 'dist', - 'fonts', - font, - ), - os.path.join(STATIC_FOLDER, font), - ) - - # Copy license - shutil.copyfile( - os.path.join(TMP_FOLDER, 'node_modules', '@tabler', 'icons-webfont', 'LICENSE'), - os.path.join(STATIC_FOLDER, 'LICENSE'), - ) - - print('Generating icon list...') - with open( - os.path.join(TMP_FOLDER, 'node_modules', '@tabler', 'icons', 'icons.json'), 'r' - ) as f: - icons = json.load(f) - - res = {} - for icon in icons.values(): - res[icon['name']] = { - 'name': icon['name'], - 'category': icon['category'], - 'tags': icon['tags'], - 'variants': { - name: style['unicode'] for name, style in icon['styles'].items() - }, - } - - with open(os.path.join(STATIC_FOLDER, 'icons.json'), 'w') as f: - json.dump(res, f, separators=(',', ':')) - - print('Cleaning up...') - shutil.rmtree(TMP_FOLDER) diff --git a/src/backend/InvenTree/stock/admin.py b/src/backend/InvenTree/stock/admin.py index cd1bffab79e9..f97c281f52c6 100644 --- a/src/backend/InvenTree/stock/admin.py +++ b/src/backend/InvenTree/stock/admin.py @@ -16,6 +16,7 @@ from .models import ( StockItem, + StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation, @@ -142,7 +143,6 @@ class Meta: 'barcode_hash', 'barcode_data', 'owner', - 'status_custom_key', ] id = Field( @@ -180,11 +180,6 @@ class Meta: column_name=_('Supplier Part ID'), widget=widgets.ForeignKeyWidget(SupplierPart), ) - supplier_part_sku = Field( - attribute='supplier_part__SKU', - column_name=_('Supplier Part SKU'), - readonly=True, - ) supplier = Field( attribute='supplier_part__supplier__id', column_name=_('Supplier ID'), @@ -234,17 +229,17 @@ class Meta: is_building = Field( attribute='is_building', column_name=_('Building'), - widget=widgets.BooleanWidget(), + widget=widgets.IntegerWidget(), ) review_needed = Field( attribute='review_needed', column_name=_('Review Needed'), - widget=widgets.BooleanWidget(), + widget=widgets.IntegerWidget(), ) delete_on_deplete = Field( attribute='delete_on_deplete', column_name=_('Delete on Deplete'), - widget=widgets.BooleanWidget(), + widget=widgets.IntegerWidget(), ) # Date management @@ -297,10 +292,18 @@ class StockItemAdmin(ImportExportModelAdmin): 'sales_order', 'stocktake_user', 'supplier_part', - 'consumed_by', ] +@admin.register(StockItemAttachment) +class StockAttachmentAdmin(admin.ModelAdmin): + """Admin class for StockAttachment.""" + + list_display = ('stock_item', 'attachment', 'comment') + + autocomplete_fields = ['stock_item'] + + @admin.register(StockItemTracking) class StockTrackingAdmin(ImportExportModelAdmin): """Admin class for StockTracking.""" diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index 9fbf257b712f..f2b26743bcc2 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -1,7 +1,7 @@ """JSON API for the Stock app.""" from collections import OrderedDict -from datetime import timedelta +from datetime import datetime, timedelta from django.core.exceptions import ValidationError as DjangoValidationError from django.db import transaction @@ -12,9 +12,8 @@ from django_filters import rest_framework as rest_filters from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import extend_schema, extend_schema_field -from rest_framework import permissions, status -from rest_framework.generics import GenericAPIView +from drf_spectacular.utils import extend_schema_field +from rest_framework import status from rest_framework.response import Response from rest_framework.serializers import ValidationError @@ -27,20 +26,26 @@ from company.models import Company, SupplierPart from company.serializers import CompanySerializer from generic.states.api import StatusView -from importer.mixins import DataExportViewMixin -from InvenTree.api import ListCreateDestroyAPIView, MetadataView +from InvenTree.api import ( + APIDownloadMixin, + AttachmentMixin, + ListCreateDestroyAPIView, + MetadataView, +) from InvenTree.filters import ( - ORDER_FILTER_ALIAS, + ORDER_FILTER, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, ) from InvenTree.helpers import ( + DownloadFile, extract_serial_numbers, generateTestKey, is_ajax, isNull, str2bool, + str2int, ) from InvenTree.mixins import ( CreateAPI, @@ -50,6 +55,7 @@ RetrieveAPI, RetrieveUpdateDestroyAPI, ) +from InvenTree.status_codes import StockHistoryCode, StockStatus from order.models import PurchaseOrder, ReturnOrder, SalesOrder, SalesOrderAllocation from order.serializers import ( PurchaseOrderSerializer, @@ -58,47 +64,15 @@ ) from part.models import BomItem, Part, PartCategory from part.serializers import PartBriefSerializer -from stock.generators import generate_batch_code, generate_serial_number +from stock.admin import LocationResource, StockItemResource from stock.models import ( StockItem, + StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation, StockLocationType, ) -from stock.status_codes import StockHistoryCode, StockStatus - - -class GenerateBatchCode(GenericAPIView): - """API endpoint for generating batch codes.""" - - permission_classes = [permissions.IsAuthenticated] - serializer_class = StockSerializers.GenerateBatchCodeSerializer - - def post(self, request, *args, **kwargs): - """Generate a new batch code.""" - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - - data = {'batch_code': generate_batch_code(**serializer.validated_data)} - - return Response(data, status=status.HTTP_201_CREATED) - - -class GenerateSerialNumber(GenericAPIView): - """API endpoint for generating serial numbers.""" - - permission_classes = [permissions.IsAuthenticated] - serializer_class = StockSerializers.GenerateSerialNumberSerializer - - def post(self, request, *args, **kwargs): - """Generate a new serial number.""" - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - - data = {'serial_number': generate_serial_number(**serializer.validated_data)} - - return Response(data, status=status.HTTP_201_CREATED) class StockDetail(RetrieveUpdateDestroyAPI): @@ -324,21 +298,6 @@ def filter_depth(self, queryset, name, value): return queryset - top_level = rest_filters.BooleanFilter( - label=_('Top Level'), - method='filter_top_level', - help_text=_('Filter by top-level locations'), - ) - - def filter_top_level(self, queryset, name, value): - """Filter by top-level locations.""" - cascade = str2bool(self.data.get('cascade', False)) - - if value and not cascade: - return queryset.filter(parent=None) - - return queryset - cascade = rest_filters.BooleanFilter( label=_('Cascade'), method='filter_cascade', @@ -351,10 +310,9 @@ def filter_cascade(self, queryset, name, value): Note: If the "parent" filter is provided, we offload the logic to that method. """ parent = self.data.get('parent', None) - top_level = str2bool(self.data.get('top_level', None)) # If the parent is *not* provided, update the results based on the "cascade" value - if not parent or top_level: + if not parent: if not value: # If "cascade" is False, only return top-level location queryset = queryset.filter(parent=None) @@ -397,7 +355,7 @@ def filter_parent(self, queryset, name, value): return queryset -class StockLocationList(DataExportViewMixin, ListCreateAPI): +class StockLocationList(APIDownloadMixin, ListCreateAPI): """API endpoint for list view of StockLocation objects. - GET: Return list of StockLocation objects @@ -408,6 +366,14 @@ class StockLocationList(DataExportViewMixin, ListCreateAPI): serializer_class = StockSerializers.LocationSerializer filterset_class = StockLocationFilter + def download_queryset(self, queryset, export_format): + """Download the filtered queryset as a data file.""" + dataset = LocationResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f'InvenTree_Locations.{export_format}' + + return DownloadFile(filedata, filename) + def get_queryset(self, *args, **kwargs): """Return annotated queryset for the StockLocationList endpoint.""" queryset = super().get_queryset(*args, **kwargs) @@ -416,7 +382,7 @@ def get_queryset(self, *args, **kwargs): filter_backends = SEARCH_ORDER_FILTER - search_fields = ['name', 'description', 'pathstring', 'tags__name', 'tags__slug'] + search_fields = ['name', 'description', 'tags__name', 'tags__slug'] ordering_fields = ['name', 'pathstring', 'items', 'level', 'tree_id', 'lft'] @@ -429,15 +395,13 @@ class StockLocationTree(ListAPI): queryset = StockLocation.objects.all() serializer_class = StockSerializers.LocationTreeSerializer - filter_backends = ORDER_FILTER_ALIAS + filter_backends = ORDER_FILTER ordering_fields = ['level', 'name', 'sublocations'] # Order by tree level (top levels first) and then name ordering = ['level', 'name'] - ordering_field_aliases = {'level': ['level', 'name'], 'name': ['name', 'level']} - def get_queryset(self, *args, **kwargs): """Return annotated queryset for the StockLocationTree endpoint.""" queryset = super().get_queryset(*args, **kwargs) @@ -860,7 +824,7 @@ def filter_stale(self, queryset, name, value): return queryset.exclude(stale_filter) -class StockList(DataExportViewMixin, ListCreateDestroyAPIView): +class StockList(APIDownloadMixin, ListCreateDestroyAPIView): """API endpoint for list view of Stock objects. - GET: Return a list of all StockItem objects (with optional query filters) @@ -1078,6 +1042,49 @@ def create(self, request, *args, **kwargs): headers=self.get_success_headers(serializer.data), ) + def download_queryset(self, queryset, export_format): + """Download this queryset as a file. + + Uses the APIDownloadMixin mixin class + """ + dataset = StockItemResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f'InvenTree_StockItems_{InvenTree.helpers.current_date().strftime("%d-%b-%Y")}.{export_format}' + + return DownloadFile(filedata, filename) + + def list(self, request, *args, **kwargs): + """Override the 'list' method, as the StockLocation objects are very expensive to serialize. + + So, we fetch and serialize the required StockLocation objects only as required. + """ + queryset = self.filter_queryset(self.get_queryset()) + + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + else: + serializer = self.get_serializer(queryset, many=True) + + data = serializer.data + + """ + Determine the response type based on the request. + a) For HTTP requests (e.g. via the browsable API) return a DRF response + b) For AJAX requests, simply return a JSON rendered response. + + Note: b) is about 100x quicker than a), because the DRF framework adds a lot of cruft + """ + + if page is not None: + return self.get_paginated_response(data) + elif is_ajax(request): + return JsonResponse(data, safe=False) + return Response(data) + def get_queryset(self, *args, **kwargs): """Annotate queryset before returning.""" queryset = super().get_queryset(*args, **kwargs) @@ -1188,7 +1195,6 @@ def filter_queryset(self, queryset): 'updated', 'stocktake_date', 'expiry_date', - 'packaging', 'quantity', 'stock', 'status', @@ -1209,6 +1215,22 @@ def filter_queryset(self, queryset): ] +class StockAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing, creating and bulk deleting a StockItemAttachment (file upload).""" + + queryset = StockItemAttachment.objects.all() + serializer_class = StockSerializers.StockItemAttachmentSerializer + + filterset_fields = ['stock_item'] + + +class StockAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for StockItemAttachment.""" + + queryset = StockItemAttachment.objects.all() + serializer_class = StockSerializers.StockItemAttachmentSerializer + + class StockItemTestResultMixin: """Mixin class for the StockItemTestResult API endpoints.""" @@ -1286,54 +1308,6 @@ def filter_test_name(self, queryset, name, value): return queryset.filter(template__key=key) -class TestStatisticsFilter(rest_filters.FilterSet): - """API filter for the filtering the test results belonging to a specific build.""" - - class Meta: - """Metaclass options.""" - - model = StockItemTestResult - fields = [] - - # Created date filters - finished_before = InvenTreeDateFilter( - label='Finished before', field_name='finished_datetime', lookup_expr='lte' - ) - finished_after = InvenTreeDateFilter( - label='Finished after', field_name='finished_datetime', lookup_expr='gte' - ) - - -class TestStatistics(GenericAPIView): - """API endpoint for accessing a test statistics broken down by test templates.""" - - queryset = StockItemTestResult.objects.all() - serializer_class = StockSerializers.TestStatisticsSerializer - pagination_class = None - filterset_class = TestStatisticsFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS - - @extend_schema( - responses={200: StockSerializers.TestStatisticsSerializer(many=False)} - ) - def get(self, request, pk, *args, **kwargs): - """Return test execution count matrix broken down by test result.""" - instance = self.get_object() - serializer = self.get_serializer(instance) - if request.resolver_match.url_name == 'api-test-statistics-by-part': - serializer.context['type'] = 'by-part' - elif request.resolver_match.url_name == 'api-test-statistics-by-build': - serializer.context['type'] = 'by-build' - serializer.context['finished_datetime_after'] = self.request.query_params.get( - 'finished_datetime_after' - ) - serializer.context['finished_datetime_before'] = self.request.query_params.get( - 'finished_datetime_before' - ) - serializer.context['pk'] = pk - return Response([serializer.data]) - - class StockItemTestResultList(StockItemTestResultMixin, ListCreateDestroyAPIView): """API endpoint for listing (and creating) a StockItemTestResult object.""" @@ -1396,7 +1370,7 @@ class StockTrackingDetail(RetrieveAPI): serializer_class = StockSerializers.StockTrackingSerializer -class StockTrackingList(DataExportViewMixin, ListAPI): +class StockTrackingList(ListAPI): """API endpoint for list view of StockItemTracking objects. StockItemTracking objects are read-only @@ -1428,22 +1402,6 @@ def get_serializer(self, *args, **kwargs): return self.serializer_class(*args, **kwargs) - def get_delta_model_map(self) -> dict: - """Return a mapping of delta models to their respective models and serializers. - - This is used to generate additional context information for the historical data, - with some attempt at caching so that we can reduce the number of database hits. - """ - return { - 'part': (Part, PartBriefSerializer), - 'location': (StockLocation, StockSerializers.LocationSerializer), - 'customer': (Company, CompanySerializer), - 'purchaseorder': (PurchaseOrder, PurchaseOrderSerializer), - 'salesorder': (SalesOrder, SalesOrderSerializer), - 'returnorder': (ReturnOrder, ReturnOrderSerializer), - 'buildorder': (Build, BuildSerializer), - } - def list(self, request, *args, **kwargs): """List all stock tracking entries.""" queryset = self.filter_queryset(self.get_queryset()) @@ -1457,36 +1415,84 @@ def list(self, request, *args, **kwargs): data = serializer.data - delta_models = self.get_delta_model_map() + # Attempt to add extra context information to the historical data + for item in data: + deltas = item['deltas'] - # Construct a set of related models we need to lookup for later - related_model_lookups = {key: set() for key in delta_models.keys()} + if not deltas: + deltas = {} - # Run a first pass through the data to determine which related models we need to lookup - for item in data: - deltas = item['deltas'] or {} + # Add part detail + if 'part' in deltas: + try: + part = Part.objects.get(pk=deltas['part']) + serializer = PartBriefSerializer(part) + deltas['part_detail'] = serializer.data + except Exception: + pass - for key in delta_models.keys(): - if key in deltas: - related_model_lookups[key].add(deltas[key]) + # Add location detail + if 'location' in deltas: + try: + location = StockLocation.objects.get(pk=deltas['location']) + serializer = StockSerializers.LocationSerializer(location) + deltas['location_detail'] = serializer.data + except Exception: + pass - for key in delta_models.keys(): - model, serializer = delta_models[key] + # Add stockitem detail + if 'stockitem' in deltas: + try: + stockitem = StockItem.objects.get(pk=deltas['stockitem']) + serializer = StockSerializers.StockItemSerializer(stockitem) + deltas['stockitem_detail'] = serializer.data + except Exception: + pass - # Fetch all related models in one go - related_models = model.objects.filter(pk__in=related_model_lookups[key]) + # Add customer detail + if 'customer' in deltas: + try: + customer = Company.objects.get(pk=deltas['customer']) + serializer = CompanySerializer(customer) + deltas['customer_detail'] = serializer.data + except Exception: + pass - # Construct a mapping of pk -> serialized data - related_data = {obj.pk: serializer(obj).data for obj in related_models} + # Add PurchaseOrder detail + if 'purchaseorder' in deltas: + try: + order = PurchaseOrder.objects.get(pk=deltas['purchaseorder']) + serializer = PurchaseOrderSerializer(order) + deltas['purchaseorder_detail'] = serializer.data + except Exception: + pass + + # Add SalesOrder detail + if 'salesorder' in deltas: + try: + order = SalesOrder.objects.get(pk=deltas['salesorder']) + serializer = SalesOrderSerializer(order) + deltas['salesorder_detail'] = serializer.data + except Exception: + pass - # Now, update the data with the serialized data - for item in data: - deltas = item['deltas'] or {} + # Add ReturnOrder detail + if 'returnorder' in deltas: + try: + order = ReturnOrder.objects.get(pk=deltas['returnorder']) + serializer = ReturnOrderSerializer(order) + deltas['returnorder_detail'] = serializer.data + except Exception: + pass - if key in deltas: - item['deltas'][f'{key}_detail'] = related_data.get( - deltas[key], None - ) + # Add BuildOrder detail + if 'buildorder' in deltas: + try: + order = Build.objects.get(pk=deltas['buildorder']) + serializer = BuildSerializer(order) + deltas['buildorder_detail'] = serializer.data + except Exception: + pass if page is not None: return self.get_paginated_response(data) @@ -1629,6 +1635,18 @@ def destroy(self, request, *args, **kwargs): path('assign/', StockAssign.as_view(), name='api-stock-assign'), path('merge/', StockMerge.as_view(), name='api-stock-merge'), path('change_status/', StockChangeStatus.as_view(), name='api-stock-change-status'), + # StockItemAttachment API endpoints + path( + 'attachment/', + include([ + path( + '/', + StockAttachmentDetail.as_view(), + name='api-stock-attachment-detail', + ), + path('', StockAttachmentList.as_view(), name='api-stock-attachment-list'), + ]), + ), # StockItemTestResult API endpoints path( 'test/', @@ -1709,27 +1727,3 @@ def destroy(self, request, *args, **kwargs): # Anything else path('', StockList.as_view(), name='api-stock-list'), ] - -test_statistics_api_urls = [ - # Test statistics endpoints - path( - 'by-part/', - include([ - path( - '/', - TestStatistics.as_view(), - name='api-test-statistics-by-part', - ) - ]), - ), - path( - 'by-build/', - include([ - path( - '/', - TestStatistics.as_view(), - name='api-test-statistics-by-build', - ) - ]), - ), -] diff --git a/src/backend/InvenTree/stock/filters.py b/src/backend/InvenTree/stock/filters.py index ac3098a6329f..4257bd49b9b9 100644 --- a/src/backend/InvenTree/stock/filters.py +++ b/src/backend/InvenTree/stock/filters.py @@ -3,6 +3,8 @@ from django.db.models import F, Func, IntegerField, OuterRef, Q, Subquery from django.db.models.functions import Coalesce +from sql_util.utils import SubqueryCount + import stock.models diff --git a/src/backend/InvenTree/stock/generators.py b/src/backend/InvenTree/stock/generators.py deleted file mode 100644 index 37accce6e714..000000000000 --- a/src/backend/InvenTree/stock/generators.py +++ /dev/null @@ -1,111 +0,0 @@ -"""Generator functions for the stock app.""" - -from inspect import signature - -from django.core.exceptions import ValidationError - -from jinja2 import Template - -import common.models -import InvenTree.exceptions -import InvenTree.helpers - - -def generate_batch_code(**kwargs): - """Generate a default 'batch code' for a new StockItem. - - By default, this uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), - which can be passed through a simple template. - - Also, this function is exposed to the ValidationMixin plugin class, - allowing custom plugins to be used to generate new batch code values. - - Various kwargs can be passed to the function, which will be passed through to the plugin functions. - """ - # First, check if any plugins can generate batch codes - from plugin.registry import registry - - now = InvenTree.helpers.current_time() - - context = { - 'date': now, - 'year': now.year, - 'month': now.month, - 'day': now.day, - 'hour': now.hour, - 'minute': now.minute, - 'week': now.isocalendar()[1], - **kwargs, - } - - for plugin in registry.with_mixin('validation'): - generate = getattr(plugin, 'generate_batch_code', None) - - if not generate: - continue - - # Check if the function signature accepts kwargs - sig = signature(generate) - - if 'kwargs' in sig.parameters: - # Pass the kwargs through to the plugin - try: - batch = generate(**context) - except Exception: - InvenTree.exceptions.log_error('plugin.generate_batch_code') - continue - else: - # Ignore the kwargs (legacy plugin) - try: - batch = generate() - except Exception: - InvenTree.exceptions.log_error('plugin.generate_batch_code') - continue - - # Return the first non-null value generated by a plugin - if batch is not None: - return batch - - # If we get to this point, no plugin was able to generate a new batch code - batch_template = common.models.InvenTreeSetting.get_setting( - 'STOCK_BATCH_CODE_TEMPLATE', '' - ) - - return Template(batch_template).render(context) - - -def generate_serial_number(part=None, quantity=1, **kwargs) -> str: - """Generate a default 'serial number' for a new StockItem.""" - quantity = quantity or 1 - - if part is None: - # Cannot generate a serial number without a part - return None - - try: - quantity = int(quantity) - except Exception: - raise ValidationError({'quantity': 'Invalid quantity value'}) - - if quantity < 1: - raise ValidationError({'quantity': 'Quantity must be greater than zero'}) - - # If we are here, no plugins were available to generate a serial number - # In this case, we will generate a simple serial number based on the provided part - sn = part.get_latest_serial_number() - - serials = [] - - # Generate the required quantity of serial numbers - # Note that this call gets passed through to the plugin system - while quantity > 0: - sn = InvenTree.helpers.increment_serial_number(sn) - - # Exit if an empty or duplicated serial is generated - if not sn or sn in serials: - break - - serials.append(sn) - quantity -= 1 - - return ','.join(serials) diff --git a/src/backend/InvenTree/stock/migrations/0001_initial.py b/src/backend/InvenTree/stock/migrations/0001_initial.py index ac8b7b7a488a..09c033c06b84 100644 --- a/src/backend/InvenTree/stock/migrations/0001_initial.py +++ b/src/backend/InvenTree/stock/migrations/0001_initial.py @@ -35,9 +35,6 @@ class Migration(migrations.Migration): ('belongs_to', models.ForeignKey(blank=True, help_text='Is this item installed in another item?', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='owned_parts', to='stock.StockItem')), ('customer', models.ForeignKey(blank=True, help_text='Item assigned to customer?', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stockitems', to='company.Company')), ], - options={ - 'verbose_name': 'Stock Item', - } ), migrations.CreateModel( name='StockLocation', @@ -64,9 +61,6 @@ class Migration(migrations.Migration): ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tracking_info', to='stock.StockItem')), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ], - options={ - 'verbose_name': 'Stock Item Tracking', - } ), migrations.AddField( model_name='stockitem', diff --git a/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py b/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py index 1ffc87b1e21b..946f6251b035 100644 --- a/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py +++ b/src/backend/InvenTree/stock/migrations/0036_stockitemattachment.py @@ -16,7 +16,7 @@ class Migration(migrations.Migration): name='StockItemAttachment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.FileField(help_text='Select file to attach', upload_to='attachments')), + ('attachment', models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment)), ('comment', models.CharField(help_text='File comment', max_length=100)), ('stock_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='stock.StockItem')), ], diff --git a/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py b/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py index 6629d6634ddc..fdf0344925fe 100644 --- a/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py +++ b/src/backend/InvenTree/stock/migrations/0040_stockitemtestresult.py @@ -25,8 +25,5 @@ class Migration(migrations.Migration): ('stock_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='test_results', to='stock.StockItem')), ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ], - options={ - 'verbose_name': 'Stock Item Test Result', - }, ), ] diff --git a/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py b/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py index a7106f8af23c..0b0d6cbc5a88 100644 --- a/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py +++ b/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.currency +import common.settings class Migration(migrations.Migration): @@ -16,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='stockitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), ), migrations.AddField( model_name='stockitem', name='purchase_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.currency.all_currency_codes(), default=common.currency.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.settings.all_currency_codes(), default=common.settings.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py b/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py index 8aebb0c7c1bc..12ad90cc0a71 100644 --- a/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py +++ b/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.currency +import common.settings class Migration(migrations.Migration): @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py b/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py index 3305b719e55c..b027a5385423 100644 --- a/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py +++ b/src/backend/InvenTree/stock/migrations/0059_auto_20210404_2016.py @@ -32,7 +32,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitemattachment', name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), migrations.AlterField( model_name='stockitemattachment', diff --git a/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py b/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py index ba44e9c1bd0b..aacaf01edcd5 100644 --- a/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py +++ b/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py @@ -4,7 +4,7 @@ from django.db import migrations -from stock.status_codes import StockHistoryCode +from InvenTree.status_codes import StockHistoryCode def update_history(apps, schema_editor): diff --git a/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py b/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py index 3c23c28f650e..a2f6ef322d07 100644 --- a/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py +++ b/src/backend/InvenTree/stock/migrations/0070_auto_20211128_0151.py @@ -20,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitemattachment', name='attachment', - field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to='attachments', verbose_name='Attachment'), + field=models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py b/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py index 5faa8e81b3ac..646e25199ad6 100644 --- a/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py +++ b/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py @@ -1,7 +1,6 @@ # Generated by Django 3.2.12 on 2022-04-26 10:19 from django.db import migrations, models -import stock.generators import stock.models @@ -15,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='batch', - field=models.CharField(blank=True, default=stock.generators.generate_batch_code, help_text='Batch code for this stock item', max_length=100, null=True, verbose_name='Batch Code'), + field=models.CharField(blank=True, default=stock.models.generate_batch_code, help_text='Batch code for this stock item', max_length=100, null=True, verbose_name='Batch Code'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py b/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py index e8db1c5f77ac..b2dd16cc03ee 100644 --- a/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py +++ b/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py @@ -15,7 +15,7 @@ def update_stock_history(apps, schema_editor): - Add the appropriate history! """ - from stock.status_codes import StockHistoryCode + from InvenTree.status_codes import StockHistoryCode StockItem = apps.get_model('stock', 'stockitem') StockItemTracking = apps.get_model('stock', 'stockitemtracking') diff --git a/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py b/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py index 90807a8c10e6..7b8cf4d23969 100644 --- a/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py +++ b/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py @@ -2,7 +2,7 @@ import django.core.validators from django.db import migrations, models -import stock.status_codes +import InvenTree.status_codes class Migration(migrations.Migration): @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='status', - field=models.PositiveIntegerField(choices=stock.status_codes.StockStatus.items(), default=10, validators=[django.core.validators.MinValueValidator(0)]), + field=models.PositiveIntegerField(choices=InvenTree.status_codes.StockStatus.items(), default=10, validators=[django.core.validators.MinValueValidator(0)]), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py b/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py deleted file mode 100644 index 1526a637993d..000000000000 --- a/src/backend/InvenTree/stock/migrations/0111_delete_stockitemattachment.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.12 on 2024-06-09 09:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('build', '0050_auto_20240508_0138'), - ('common', '0026_auto_20240608_1238'), - ('company', '0069_company_active'), - ('order', '0099_alter_salesorder_status'), - ('part', '0123_parttesttemplate_choices'), - ('stock', '0110_alter_stockitemtestresult_finished_datetime_and_more') - ] - - operations = [ - migrations.DeleteModel( - name='StockItemAttachment', - ), - ] diff --git a/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py b/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py deleted file mode 100644 index 21b48b91da2c..000000000000 --- a/src/backend/InvenTree/stock/migrations/0112_alter_stocklocation_custom_icon_and_more.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.11 on 2024-07-20 22:30 - -import common.icons -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0111_delete_stockitemattachment'), - ] - - operations = [ - migrations.AlterField( - model_name='stocklocation', - name='custom_icon', - field=models.CharField(blank=True, db_column='icon', help_text='Icon (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), - ), - migrations.AlterField( - model_name='stocklocationtype', - name='icon', - field=models.CharField(blank=True, help_text='Default icon for all locations that have no icon set (optional)', max_length=100, validators=[common.icons.validate_icon], verbose_name='Icon'), - ), - ] diff --git a/src/backend/InvenTree/stock/migrations/0113_stockitem_status_custom_key_and_more.py b/src/backend/InvenTree/stock/migrations/0113_stockitem_status_custom_key_and_more.py deleted file mode 100644 index 5b9bc7e8d6eb..000000000000 --- a/src/backend/InvenTree/stock/migrations/0113_stockitem_status_custom_key_and_more.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.2.14 on 2024-08-07 22:40 - -import django.core.validators -from django.db import migrations - -import generic.states -import generic.states.fields -import InvenTree.status_codes - - -class Migration(migrations.Migration): - - dependencies = [ - ("stock", "0112_alter_stocklocation_custom_icon_and_more"), - ] - - operations = [ - migrations.AddField( - model_name="stockitem", - name="status_custom_key", - field=generic.states.fields.ExtraInvenTreeCustomStatusModelField( - blank=True, - default=None, - help_text="Additional status information for this item", - null=True, - verbose_name="Custom status key", - ), - ), - migrations.AlterField( - model_name="stockitem", - name="status", - field=generic.states.fields.InvenTreeCustomStatusModelField( - choices=InvenTree.status_codes.StockStatus.items(), - default=10, - validators=[django.core.validators.MinValueValidator(0)], - ), - ), - ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index e0482795d524..2d5cfaeaff09 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -9,7 +9,7 @@ from django.conf import settings from django.contrib.auth.models import User -from django.core.exceptions import ValidationError +from django.core.exceptions import FieldError, ValidationError from django.core.validators import MinValueValidator from django.db import models, transaction from django.db.models import Q, Sum @@ -20,7 +20,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ -from djmoney.contrib.exchange.models import convert_money +from jinja2 import Template from mptt.managers import TreeManager from mptt.models import MPTTModel, TreeForeignKey from taggit.managers import TaggableManager @@ -31,13 +31,9 @@ import InvenTree.models import InvenTree.ready import InvenTree.tasks -import report.mixins +import label.models import report.models -from build import models as BuildModels -from common.icons import validate_icon -from common.settings import get_global_setting from company import models as CompanyModels -from generic.states.fields import InvenTreeCustomStatusModelField from InvenTree.fields import InvenTreeModelMoneyField, InvenTreeURLField from InvenTree.status_codes import ( SalesOrderStatusGroups, @@ -47,8 +43,6 @@ ) from part import models as PartModels from plugin.events import trigger_event -from stock import models as StockModels -from stock.generators import generate_batch_code from users.models import Owner logger = logging.getLogger('inventree') @@ -94,7 +88,6 @@ def __str__(self): max_length=100, verbose_name=_('Icon'), help_text=_('Default icon for all locations that have no icon set (optional)'), - validators=[validate_icon], ) @@ -114,9 +107,7 @@ def get_queryset(self): class StockLocation( - InvenTree.models.InvenTreeBarcodeMixin, - report.mixins.InvenTreeReportMixin, - InvenTree.models.InvenTreeTree, + InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeTree ): """Organization tree for StockItem objects. @@ -126,8 +117,6 @@ class StockLocation( ITEM_PARENT_KEY = 'location' - EXTRA_PATH_FIELDS = ['icon'] - objects = StockLocationManager() class Meta: @@ -153,28 +142,12 @@ def get_api_url(): """Return API url.""" return reverse('api-location-list') - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'SL' - - def report_context(self): - """Return report context data for this StockLocation.""" - return { - 'location': self, - 'qr_data': self.barcode, - 'parent': self.parent, - 'stock_location': self, - 'stock_items': self.get_stock_items(), - } - custom_icon = models.CharField( blank=True, max_length=100, verbose_name=_('Icon'), help_text=_('Icon (optional)'), db_column='icon', - validators=[validate_icon], ) owner = models.ForeignKey( @@ -224,11 +197,6 @@ def icon(self) -> str: if self.location_type: return self.location_type.icon - if default_icon := get_global_setting( - 'STOCK_LOCATION_DEFAULT_ICON', cache=True - ): - return default_icon - return '' @icon.setter @@ -258,7 +226,9 @@ def check_ownership(self, user): if user.is_superuser: return True - ownership_enabled = get_global_setting('STOCK_OWNERSHIP_CONTROL') + ownership_enabled = common.models.InvenTreeSetting.get_setting( + 'STOCK_OWNERSHIP_CONTROL' + ) if not ownership_enabled: # Location ownership function is not enabled, so return True @@ -325,6 +295,47 @@ def get_items(self, cascade=False): return self.get_stock_items(cascade=cascade) +def generate_batch_code(): + """Generate a default 'batch code' for a new StockItem. + + By default, this uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), + which can be passed through a simple template. + + Also, this function is exposed to the ValidationMixin plugin class, + allowing custom plugins to be used to generate new batch code values + """ + # First, check if any plugins can generate batch codes + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + batch = plugin.generate_batch_code() + + if batch is not None: + # Return the first non-null value generated by a plugin + return batch + + # If we get to this point, no plugin was able to generate a new batch code + batch_template = common.models.InvenTreeSetting.get_setting( + 'STOCK_BATCH_CODE_TEMPLATE', '' + ) + + now = InvenTree.helpers.current_time() + + # Pass context data through to the template rendering. + # The following context variables are available for custom batch code generation + context = { + 'date': now, + 'year': now.year, + 'month': now.month, + 'day': now.day, + 'hour': now.hour, + 'minute': now.minute, + 'week': now.isocalendar()[1], + } + + return Template(batch_template).render(context) + + def default_delete_on_deplete(): """Return a default value for the 'delete_on_deplete' field. @@ -332,17 +343,17 @@ def default_delete_on_deplete(): Now, there is a user-configurable setting to govern default behaviour. """ try: - return get_global_setting('STOCK_DELETE_DEPLETED_DEFAULT', True) + return common.models.InvenTreeSetting.get_setting( + 'STOCK_DELETE_DEPLETED_DEFAULT', True + ) except (IntegrityError, OperationalError): # Revert to original default behaviour return True class StockItem( - InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, - report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, common.models.MetaMixin, @@ -365,7 +376,7 @@ class StockItem( stocktake_user: User that performed the most recent stocktake review_needed: Flag if StockItem needs review delete_on_deplete: If True, StockItem will be deleted when the stock level gets to zero - status: Status of this StockItem (ref: stock.status_codes.StockStatus) + status: Status of this StockItem (ref: InvenTree.status_codes.StockStatus) notes: Extra notes field build: Link to a Build (if this stock item was created from a build) is_building: Boolean field indicating if this stock item is currently being built (or is "in production") @@ -375,11 +386,6 @@ class StockItem( packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc) """ - class Meta: - """Model meta options.""" - - verbose_name = _('Stock Item') - @staticmethod def get_api_url(): """Return API url.""" @@ -389,55 +395,6 @@ def api_instance_filters(self): """Custom API instance filters.""" return {'parent': {'exclude_tree': self.pk}} - @classmethod - def barcode_model_type_code(cls): - """Return the associated barcode model type code for this model.""" - return 'SI' - - def get_test_keys(self, include_installed=True): - """Construct a flattened list of test 'keys' for this StockItem.""" - keys = [] - - for test in self.part.getTestTemplates(required=True): - if test.key not in keys: - keys.append(test.key) - - for test in self.part.getTestTemplates(required=False): - if test.key not in keys: - keys.append(test.key) - - for result in self.testResultList(include_installed=include_installed): - if result.key not in keys: - keys.append(result.key) - - return list(keys) - - def report_context(self): - """Generate custom report context data for this StockItem.""" - return { - 'barcode_data': self.barcode_data, - 'barcode_hash': self.barcode_hash, - 'batch': self.batch, - 'child_items': self.get_children(), - 'ipn': self.part.IPN, - 'installed_items': self.get_installed_items(cascade=True), - 'item': self, - 'name': self.part.full_name, - 'part': self.part, - 'qr_data': self.barcode, - 'qr_url': self.get_absolute_url(), - 'parameters': self.part.parameters_map(), - 'quantity': InvenTree.helpers.normalize(self.quantity), - 'result_list': self.testResultList(include_installed=True), - 'results': self.testResultMap(include_installed=True), - 'serial': self.serial, - 'stock_item': self, - 'tests': self.testResultMap(), - 'test_keys': self.get_test_keys(), - 'test_template_list': self.part.getTestTemplates(), - 'test_templates': self.part.getTestTemplateMap(), - } - tags = TaggableManager(blank=True) # A Query filter which will be re-used in multiple places to determine if a StockItem is actually "in stock" @@ -741,6 +698,8 @@ def clean(self): self.delete_on_deplete = False except PartModels.Part.DoesNotExist: + # This gets thrown if self.supplier_part is null + # TODO - Find a test than can be performed... pass # Ensure that the item cannot be assigned to itself @@ -945,7 +904,7 @@ def get_part_name(self): help_text=_('Delete this Stock Item when stock is depleted'), ) - status = InvenTreeCustomStatusModelField( + status = models.PositiveIntegerField( default=StockStatus.OK.value, choices=StockStatus.items(), validators=[MinValueValidator(0)], @@ -1020,7 +979,9 @@ def check_ownership(self, user): if user.is_superuser: return True - ownership_enabled = get_global_setting('STOCK_OWNERSHIP_CONTROL') + ownership_enabled = common.models.InvenTreeSetting.get_setting( + 'STOCK_OWNERSHIP_CONTROL' + ) if not ownership_enabled: # Location ownership function is not enabled, so return True @@ -1049,7 +1010,7 @@ def is_stale(self): today = InvenTree.helpers.current_date() - stale_days = get_global_setting('STOCK_STALE_DAYS') + stale_days = common.models.InvenTreeSetting.get_setting('STOCK_STALE_DAYS') if stale_days <= 0: return False @@ -1134,11 +1095,7 @@ def allocateToCustomer( item.add_tracking_entry(code, user, deltas, notes=notes) - trigger_event( - 'stockitem.assignedtocustomer', - id=self.id, - customer=customer.id if customer else None, - ) + trigger_event('stockitem.assignedtocustomer', id=self.id, customer=customer.id) # Return the reference to the stock item return item @@ -1462,14 +1419,6 @@ def add_tracking_entry( if deltas is None: deltas = {} - # Prevent empty entry - if ( - entry_type == StockHistoryCode.STOCK_UPDATE - and len(deltas) == 0 - and not notes - ): - return - # Has a location been specified? location = kwargs.get('location', None) @@ -1721,9 +1670,6 @@ def merge_stock_items(self, other_items, raise_error=False, **kwargs): - Tracking history for the *other* item is deleted - Any allocations (build order, sales order) are moved to this StockItem """ - if isinstance(other_items, StockItem): - other_items = [other_items] - if len(other_items) == 0: return @@ -1731,34 +1677,21 @@ def merge_stock_items(self, other_items, raise_error=False, **kwargs): tree_ids = {self.tree_id} user = kwargs.get('user', None) - location = kwargs.get('location', self.location) + location = kwargs.get('location', None) notes = kwargs.get('notes', None) parent_id = self.parent.pk if self.parent else None - # Keep track of pricing data for the merged data - pricing_data = [] - - if self.purchase_price: - pricing_data.append([self.purchase_price, self.quantity]) - for other in other_items: # If the stock item cannot be merged, return if not self.can_merge(other, raise_error=raise_error, **kwargs): - logger.warning( - 'Stock item <%s> could not be merge into <%s>', other.pk, self.pk - ) return - for other in other_items: tree_ids.add(other.tree_id) + for other in other_items: self.quantity += other.quantity - if other.purchase_price: - # Only add pricing data if it is available - pricing_data.append([other.purchase_price, other.quantity]) - # Any "build order allocations" for the other item must be assigned to this one for allocation in other.allocations.all(): allocation.stock_item = self @@ -1781,34 +1714,10 @@ def merge_stock_items(self, other_items, raise_error=False, **kwargs): user, quantity=self.quantity, notes=notes, - deltas={'location': location.pk if location else None}, + deltas={'location': location.pk}, ) - # Update the location of the item self.location = location - - # Update the unit price - calculate weighted average of available pricing data - if len(pricing_data) > 0: - unit_price, quantity = pricing_data[0] - - # Use the first currency as the base currency - base_currency = unit_price.currency - - total_price = unit_price * quantity - - for price, qty in pricing_data[1:]: - # Attempt to convert the price to the base currency - try: - price = convert_money(price, base_currency) - total_price += price * qty - quantity += qty - except Exception: - # Skip this entry, cannot convert to base currency - continue - - if quantity > 0: - self.purchase_price = total_price / quantity - self.save() # Rebuild stock trees as required @@ -1957,11 +1866,7 @@ def move(self, location, notes, user, **kwargs): except InvalidOperation: return False - allow_out_of_stock_transfer = get_global_setting( - 'STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', backup_value=False, cache=False - ) - - if not allow_out_of_stock_transfer and not self.in_stock: + if not self.in_stock: raise ValidationError(_('StockItem cannot be moved as it is not in stock')) if quantity <= 0: @@ -2220,9 +2125,9 @@ def testResultMap(self, **kwargs): def testResultList(self, **kwargs): """Return a list of test-result objects for this StockItem.""" - return list(self.testResultMap(**kwargs).values()) + return self.testResultMap(**kwargs).values() - def requiredTestStatus(self, required_tests=None): + def requiredTestStatus(self): """Return the status of the tests required for this StockItem. Return: @@ -2232,17 +2137,15 @@ def requiredTestStatus(self, required_tests=None): - failed: Number of tests that have failed """ # All the tests required by the part object - - if required_tests is None: - required_tests = self.part.getRequiredTests() + required = self.part.getRequiredTests() results = self.testResultMap() - total = len(required_tests) + total = len(required) passed = 0 failed = 0 - for test in required_tests: + for test in required: key = InvenTree.helpers.generateTestKey(test.test_name) if key in results: @@ -2264,12 +2167,56 @@ def hasRequiredTests(self): """Return True if there are any 'required tests' associated with this StockItem.""" return self.required_test_count > 0 - def passedAllRequiredTests(self, required_tests=None): + def passedAllRequiredTests(self): """Returns True if this StockItem has passed all required tests.""" - status = self.requiredTestStatus(required_tests=required_tests) + status = self.requiredTestStatus() return status['passed'] >= status['total'] + def available_test_reports(self): + """Return a list of TestReport objects which match this StockItem.""" + reports = [] + + item_query = StockItem.objects.filter(pk=self.pk) + + for test_report in report.models.TestReport.objects.filter(enabled=True): + # Attempt to validate report filter (skip if invalid) + try: + filters = InvenTree.helpers.validateFilterString(test_report.filters) + if item_query.filter(**filters).exists(): + reports.append(test_report) + except (ValidationError, FieldError): + continue + + return reports + + @property + def has_test_reports(self): + """Return True if there are test reports available for this stock item.""" + return len(self.available_test_reports()) > 0 + + def available_labels(self): + """Return a list of Label objects which match this StockItem.""" + labels = [] + + item_query = StockItem.objects.filter(pk=self.pk) + + for lbl in label.models.StockItemLabel.objects.filter(enabled=True): + try: + filters = InvenTree.helpers.validateFilterString(lbl.filters) + + if item_query.filter(**filters).exists(): + labels.append(lbl) + except (ValidationError, FieldError): + continue + + return labels + + @property + def has_labels(self): + """Return True if there are any label templates available for this stock item.""" + return len(self.available_labels()) > 0 + @receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log') def before_delete_stock_item(sender, instance, using, **kwargs): @@ -2289,16 +2236,14 @@ def after_delete_stock_item(sender, instance: StockItem, **kwargs): """Function to be executed after a StockItem object is deleted.""" from part import tasks as part_tasks - if not InvenTree.ready.isImportingData() and InvenTree.ready.canAppAccessDatabase( - allow_test=True - ): + if not InvenTree.ready.isImportingData(): # Run this check in the background InvenTree.tasks.offload_task( part_tasks.notify_low_stock_if_required, instance.part ) # Schedule an update on parent part pricing - if instance.part: + if InvenTree.ready.canAppAccessDatabase(allow_test=True): instance.part.schedule_pricing_update(create=False) @@ -2307,21 +2252,33 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs): """Hook function to be executed after StockItem object is saved/updated.""" from part import tasks as part_tasks - if ( - created - and not InvenTree.ready.isImportingData() - and InvenTree.ready.canAppAccessDatabase(allow_test=True) - ): + if created and not InvenTree.ready.isImportingData(): # Run this check in the background InvenTree.tasks.offload_task( part_tasks.notify_low_stock_if_required, instance.part ) - # Schedule an update on parent part pricing - if instance.part: + if InvenTree.ready.canAppAccessDatabase(allow_test=True): instance.part.schedule_pricing_update(create=True) +class StockItemAttachment(InvenTree.models.InvenTreeAttachment): + """Model for storing file attachments against a StockItem object.""" + + @staticmethod + def get_api_url(): + """Return API url.""" + return reverse('api-stock-attachment-list') + + def getSubdir(self): + """Override attachment location.""" + return os.path.join('stock_files', str(self.stock_item.id)) + + stock_item = models.ForeignKey( + StockItem, on_delete=models.CASCADE, related_name='attachments' + ) + + class StockItemTracking(InvenTree.models.InvenTreeModel): """Stock tracking entry - used for tracking history of a particular StockItem. @@ -2342,11 +2299,6 @@ class StockItemTracking(InvenTree.models.InvenTreeModel): deltas: The changes associated with this history item """ - class Meta: - """Meta data for the StockItemTracking class.""" - - verbose_name = _('Stock Item Tracking') - @staticmethod def get_api_url(): """Return API url.""" @@ -2415,11 +2367,6 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): date: Date the test result was recorded """ - class Meta: - """Meta data for the StockItemTestResult class.""" - - verbose_name = _('Stock Item Test Result') - def __str__(self): """Return string representation.""" return f'{self.test_name} - {self.result}' @@ -2440,95 +2387,29 @@ def clean(self): super().clean() # If this test result corresponds to a template, check the requirements of the template - template = self.template + key = self.key - if template is None: - # Fallback if there is no matching template - for template in self.stock_item.part.getTestTemplates(): - if self.key == template.key: - break + templates = self.stock_item.part.getTestTemplates() - if template: - if template.requires_value and not self.value: - raise ValidationError({ - 'value': _('Value must be provided for this test') - }) + for template in templates: + if key == template.key: + if template.requires_value and not self.value: + raise ValidationError({ + 'value': _('Value must be provided for this test') + }) - if template.requires_attachment and not self.attachment: - raise ValidationError({ - 'attachment': _('Attachment must be uploaded for this test') - }) + if template.requires_attachment and not self.attachment: + raise ValidationError({ + 'attachment': _('Attachment must be uploaded for this test') + }) - if choices := template.get_choices(): - if self.value not in choices: - raise ValidationError({'value': _('Invalid value for this test')}) + break @property def key(self): """Return key for test.""" return InvenTree.helpers.generateTestKey(self.test_name) - def calculate_test_statistics_for_test_template( - self, query_base, test_template, ret, start, end - ): - """Helper function to calculate the passed/failed/total tests count per test template type.""" - query = query_base & Q(template=test_template.pk) - if start is not None and end is not None: - query = query & Q(started_datetime__range=(start, end)) - elif start is not None and end is None: - query = query & Q(started_datetime__gt=start) - elif start is None and end is not None: - query = query & Q(started_datetime__lt=end) - - passed = StockModels.StockItemTestResult.objects.filter( - query & Q(result=True) - ).count() - failed = StockModels.StockItemTestResult.objects.filter( - query & ~Q(result=True) - ).count() - if test_template.test_name not in ret: - ret[test_template.test_name] = {'passed': 0, 'failed': 0, 'total': 0} - ret[test_template.test_name]['passed'] += passed - ret[test_template.test_name]['failed'] += failed - ret[test_template.test_name]['total'] += passed + failed - ret['total']['passed'] += passed - ret['total']['failed'] += failed - ret['total']['total'] += passed + failed - return ret - - def build_test_statistics(self, build_order_pk, start, end): - """Generate a statistics matrix for each test template based on the test executions result counts.""" - build = BuildModels.Build.objects.get(pk=build_order_pk) - if not build or not build.part.trackable: - return {} - - test_templates = build.part.getTestTemplates() - ret = {'total': {'passed': 0, 'failed': 0, 'total': 0}} - for build_item in build.get_build_outputs(): - for test_template in test_templates: - query_base = Q(stock_item=build_item) - ret = self.calculate_test_statistics_for_test_template( - query_base, test_template, ret, start, end - ) - return ret - - def part_test_statistics(self, part_pk, start, end): - """Generate a statistics matrix for each test template based on the test executions result counts.""" - part = PartModels.Part.objects.get(pk=part_pk) - - if not part or not part.trackable: - return {} - - test_templates = part.getTestTemplates() - ret = {'total': {'passed': 0, 'failed': 0, 'total': 0}} - for bo in part.stock_entries(): - for test_template in test_templates: - query_base = Q(stock_item=bo) - ret = self.calculate_test_statistics_for_test_template( - query_base, test_template, ret, start, end - ) - return ret - stock_item = models.ForeignKey( StockItem, on_delete=models.CASCADE, related_name='test_results' ) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 7c80285f6f70..a820de9ccc68 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -1,7 +1,7 @@ """JSON serializers for Stock app.""" import logging -from datetime import timedelta +from datetime import datetime, timedelta from decimal import Decimal from django.core.exceptions import ValidationError as DjangoValidationError @@ -15,25 +15,21 @@ from sql_util.utils import SubqueryCount, SubquerySum from taggit.serializers import TagListSerializerField -import build.models +import common.models import company.models -import company.serializers as company_serializers import InvenTree.helpers import InvenTree.serializers -import order.models +import InvenTree.status_codes import part.filters as part_filters import part.models as part_models -import part.serializers as part_serializers import stock.filters -import stock.status_codes -from common.settings import get_global_setting -from generic.states.fields import InvenTreeCustomStatusSerializerMixin -from importer.mixins import DataImportExportSerializerMixin -from importer.registry import register_importer +from company.serializers import SupplierPartSerializer from InvenTree.serializers import InvenTreeCurrencySerializer, InvenTreeDecimalField +from part.serializers import PartBriefSerializer, PartTestTemplateSerializer from .models import ( StockItem, + StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation, @@ -43,133 +39,6 @@ logger = logging.getLogger('inventree') -class GenerateBatchCodeSerializer(serializers.Serializer): - """Serializer for generating a batch code. - - Any of the provided write-only fields can be used for additional context. - """ - - class Meta: - """Metaclass options.""" - - fields = [ - 'batch_code', - 'build_order', - 'item', - 'location', - 'part', - 'purchase_order', - 'quantity', - ] - - read_only_fields = ['batch_code'] - - write_only_fields = [ - 'build_order', - 'item', - 'location', - 'part', - 'purchase_order', - 'quantity', - ] - - batch_code = serializers.CharField( - read_only=True, help_text=_('Generated batch code'), label=_('Batch Code') - ) - - build_order = serializers.PrimaryKeyRelatedField( - queryset=build.models.Build.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Build Order'), - help_text=_('Select build order'), - ) - - item = serializers.PrimaryKeyRelatedField( - queryset=StockItem.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Stock Item'), - help_text=_('Select stock item to generate batch code for'), - ) - - location = serializers.PrimaryKeyRelatedField( - queryset=StockLocation.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Location'), - help_text=_('Select location to generate batch code for'), - ) - - part = serializers.PrimaryKeyRelatedField( - queryset=part_models.Part.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Part'), - help_text=_('Select part to generate batch code for'), - ) - - purchase_order = serializers.PrimaryKeyRelatedField( - queryset=order.models.PurchaseOrder.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Purchase Order'), - help_text=_('Select purchase order'), - ) - - quantity = serializers.FloatField( - required=False, - allow_null=True, - label=_('Quantity'), - help_text=_('Enter quantity for batch code'), - ) - - -class GenerateSerialNumberSerializer(serializers.Serializer): - """Serializer for generating one or multiple serial numbers. - - Any of the provided write-only fields can be used for additional context. - - Note that in the case where multiple serial numbers are required, - the "serial" field will return a string with multiple serial numbers separated by a comma. - """ - - class Meta: - """Metaclass options.""" - - fields = ['serial', 'part', 'quantity'] - - read_only_fields = ['serial'] - - write_only_fields = ['part', 'quantity'] - - serial = serializers.CharField( - read_only=True, help_text=_('Generated serial number'), label=_('Serial Number') - ) - - part = serializers.PrimaryKeyRelatedField( - queryset=part_models.Part.objects.all(), - many=False, - required=False, - allow_null=True, - label=_('Part'), - help_text=_('Select part to generate serial number for'), - ) - - quantity = serializers.IntegerField( - required=False, - allow_null=False, - default=1, - label=_('Quantity'), - help_text=_('Quantity of serial numbers to generate'), - ) - - class LocationBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Provides a brief serializer for a StockLocation object.""" @@ -180,10 +49,7 @@ class Meta: fields = ['pk', 'name', 'pathstring'] -@register_importer() -class StockItemTestResultSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer -): +class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for the StockItemTestResult model.""" class Meta: @@ -218,10 +84,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if user_detail is not True: - self.fields.pop('user_detail', None) + self.fields.pop('user_detail') if template_detail is not True: - self.fields.pop('template_detail', None) + self.fields.pop('template_detail') user_detail = InvenTree.serializers.UserSerializer(source='user', read_only=True) @@ -234,15 +100,10 @@ def __init__(self, *args, **kwargs): label=_('Test template for this result'), ) - template_detail = part_serializers.PartTestTemplateSerializer( - source='template', read_only=True - ) + template_detail = PartTestTemplateSerializer(source='template', read_only=True) attachment = InvenTree.serializers.InvenTreeAttachmentSerializerField( - required=False, - allow_null=True, - label=_('Attachment'), - help_text=_('Test result attachment'), + required=False ) def validate(self, data): @@ -293,10 +154,7 @@ def validate(self, data): return data -class StockItemSerializerBrief( - InvenTree.serializers.NotesFieldMixin, - InvenTree.serializers.InvenTreeModelSerializer, -): +class StockItemSerializerBrief(InvenTree.serializers.InvenTreeModelSerializer): """Brief serializers for a StockItem.""" class Meta: @@ -310,7 +168,6 @@ class Meta: 'location', 'quantity', 'serial', - 'batch', 'supplier_part', 'barcode_hash', ] @@ -328,24 +185,13 @@ def validate_serial(self, value): return value -@register_importer() -class StockItemSerializer( - DataImportExportSerializerMixin, - InvenTreeCustomStatusSerializerMixin, - InvenTree.serializers.InvenTreeTagModelSerializer, -): +class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): """Serializer for a StockItem. - Includes serialization for the linked part - Includes serialization for the item location """ - export_exclude_fields = ['tracking_items'] - - export_only_fields = ['part_pricing_min', 'part_pricing_max'] - - import_exclude_fields = ['use_pack_size', 'tags'] - class Meta: """Metaclass options.""" @@ -361,13 +207,11 @@ class Meta: 'is_building', 'link', 'location', - 'location_name', 'location_detail', 'location_path', 'notes', 'owner', 'packaging', - 'parent', 'part', 'part_detail', 'purchase_order', @@ -379,10 +223,8 @@ class Meta: 'serial', 'status', 'status_text', - 'status_custom_key', 'stocktake_date', 'supplier_part', - 'sku', 'supplier_part_detail', 'barcode_hash', 'updated', @@ -398,9 +240,6 @@ class Meta: 'stale', 'tracking_items', 'tags', - # Export only fields - 'part_pricing_min', - 'part_pricing_max', ] """ @@ -420,31 +259,6 @@ class Meta: """ extra_kwargs = {'use_pack_size': {'write_only': True}} - def __init__(self, *args, **kwargs): - """Add detail fields.""" - part_detail = kwargs.pop('part_detail', False) - location_detail = kwargs.pop('location_detail', False) - supplier_part_detail = kwargs.pop('supplier_part_detail', False) - tests = kwargs.pop('tests', False) - path_detail = kwargs.pop('path_detail', False) - - super(StockItemSerializer, self).__init__(*args, **kwargs) - - if not part_detail: - self.fields.pop('part_detail', None) - - if not location_detail: - self.fields.pop('location_detail', None) - - if not supplier_part_detail: - self.fields.pop('supplier_part_detail', None) - - if not tests: - self.fields.pop('tests', None) - - if not path_detail: - self.fields.pop('location_path', None) - part = serializers.PrimaryKeyRelatedField( queryset=part_models.Part.objects.all(), many=False, @@ -453,17 +267,6 @@ def __init__(self, *args, **kwargs): label=_('Part'), ) - parent = serializers.PrimaryKeyRelatedField( - many=False, - read_only=True, - label=_('Parent Item'), - help_text=_('Parent stock item'), - ) - - location_name = serializers.CharField( - source='location.name', read_only=True, label=_('Location Name') - ) - location_path = serializers.ListField( child=serializers.DictField(), source='location.get_path', read_only=True ) @@ -509,14 +312,10 @@ def annotate_queryset(queryset): ) ).prefetch_related(None), ), - 'parent', 'part__category', 'part__pricing_data', 'supplier_part', - 'supplier_part__part', - 'supplier_part__supplier', 'supplier_part__manufacturer_part', - 'supplier_part__manufacturer_part__manufacturer', 'supplier_part__tags', 'test_results', 'tags', @@ -545,7 +344,7 @@ def annotate_queryset(queryset): ) # Add flag to indicate if the StockItem is stale - stale_days = get_global_setting('STOCK_STALE_DAYS') + stale_days = common.models.InvenTreeSetting.get_setting('STOCK_STALE_DAYS') stale_date = InvenTree.helpers.current_date() + timedelta(days=stale_days) stale_filter = ( StockItem.IN_STOCK_FILTER @@ -570,10 +369,8 @@ def annotate_queryset(queryset): status_text = serializers.CharField(source='get_status_display', read_only=True) - sku = serializers.CharField(source='supplier_part.SKU', read_only=True) - # Optional detail fields, which can be appended via query parameters - supplier_part_detail = company_serializers.SupplierPartSerializer( + supplier_part_detail = SupplierPartSerializer( source='supplier_part', supplier_detail=False, manufacturer_detail=False, @@ -581,14 +378,10 @@ def annotate_queryset(queryset): many=False, read_only=True, ) - part_detail = part_serializers.PartBriefSerializer( - source='part', many=False, read_only=True - ) - + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) location_detail = LocationBriefSerializer( source='location', many=False, read_only=True ) - tests = StockItemTestResultSerializer( source='test_results', many=True, read_only=True ) @@ -596,22 +389,12 @@ def annotate_queryset(queryset): quantity = InvenTreeDecimalField() # Annotated fields - allocated = serializers.FloatField( - required=False, read_only=True, label=_('Allocated Quantity') - ) - expired = serializers.BooleanField( - required=False, read_only=True, label=_('Expired') - ) - installed_items = serializers.IntegerField( - read_only=True, required=False, label=_('Installed Items') - ) - child_items = serializers.IntegerField( - read_only=True, required=False, label=_('Child Items') - ) - stale = serializers.BooleanField(required=False, read_only=True, label=_('Stale')) - tracking_items = serializers.IntegerField( - read_only=True, required=False, label=_('Tracking Items') - ) + allocated = serializers.FloatField(required=False) + expired = serializers.BooleanField(required=False, read_only=True) + installed_items = serializers.IntegerField(read_only=True, required=False) + child_items = serializers.IntegerField(read_only=True, required=False) + stale = serializers.BooleanField(required=False, read_only=True) + tracking_items = serializers.IntegerField(read_only=True, required=False) purchase_price = InvenTree.serializers.InvenTreeMoneySerializer( label=_('Purchase Price'), @@ -632,17 +415,30 @@ def annotate_queryset(queryset): tags = TagListSerializerField(required=False) - part_pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( - source='part.pricing_data.overall_min', - read_only=True, - label=_('Minimum Pricing'), - ) + def __init__(self, *args, **kwargs): + """Add detail fields.""" + part_detail = kwargs.pop('part_detail', False) + location_detail = kwargs.pop('location_detail', False) + supplier_part_detail = kwargs.pop('supplier_part_detail', False) + tests = kwargs.pop('tests', False) + path_detail = kwargs.pop('path_detail', False) - part_pricing_max = InvenTree.serializers.InvenTreeMoneySerializer( - source='part.pricing_data.overall_max', - read_only=True, - label=_('Maximum Pricing'), - ) + super(StockItemSerializer, self).__init__(*args, **kwargs) + + if not part_detail: + self.fields.pop('part_detail') + + if not location_detail: + self.fields.pop('location_detail') + + if not supplier_part_detail: + self.fields.pop('supplier_part_detail') + + if not tests: + self.fields.pop('tests') + + if not path_detail: + self.fields.pop('location_path') class SerializeStockItemSerializer(serializers.Serializer): @@ -802,7 +598,7 @@ def validate_stock_item(self, stock_item): parent_item = self.context['item'] parent_part = parent_item.part - if get_global_setting( + if common.models.InvenTreeSetting.get_setting( 'STOCK_ENFORCE_BOM_INSTALLATION', backup_value=True, cache=False ): # Check if the selected part is in the Bill of Materials of the parent item @@ -880,36 +676,6 @@ def save(self): item.uninstall_into_location(location, request.user, note) -class TestStatisticsLineField(serializers.DictField): - """DRF field definition for one column of the test statistics.""" - - test_name = serializers.CharField() - results = serializers.DictField(child=serializers.IntegerField(min_value=0)) - - -class TestStatisticsSerializer(serializers.Serializer): - """DRF serializer class for the test statistics.""" - - results = serializers.ListField(child=TestStatisticsLineField(), read_only=True) - - def to_representation(self, obj): - """Just pass through the test statistics from the model.""" - if self.context['type'] == 'by-part': - return obj.part_test_statistics( - self.context['pk'], - self.context['finished_datetime_after'], - self.context['finished_datetime_before'], - ) - elif self.context['type'] == 'by-build': - return obj.build_test_statistics( - self.context['pk'], - self.context['finished_datetime_after'], - self.context['finished_datetime_before'], - ) - - raise ValidationError(_('Unsupported statistic type: ' + self.context['type'])) - - class ConvertStockItemSerializer(serializers.Serializer): """DRF serializer class for converting a StockItem to a valid variant part.""" @@ -1030,8 +796,8 @@ def validate_items(self, items): return items status = serializers.ChoiceField( - choices=stock.status_codes.StockStatus.items(), - default=stock.status_codes.StockStatus.OK.value, + choices=InvenTree.status_codes.StockStatus.items(), + default=InvenTree.status_codes.StockStatus.OK.value, label=_('Status'), ) @@ -1078,7 +844,7 @@ def save(self): transaction_notes.append( StockItemTracking( item=item, - tracking_type=stock.status_codes.StockHistoryCode.EDITED.value, + tracking_type=InvenTree.status_codes.StockHistoryCode.EDITED.value, date=now, deltas=deltas, user=user, @@ -1129,14 +895,9 @@ def annotate_queryset(queryset): return queryset.annotate(sublocations=stock.filters.annotate_sub_locations()) -@register_importer() -class LocationSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeTagModelSerializer -): +class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): """Detailed information about a stock location.""" - import_exclude_fields = ['tags'] - class Meta: """Metaclass options.""" @@ -1163,7 +924,7 @@ class Meta: 'tags', ] - read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] + read_only_fields = ['barcode_hash', 'icon'] def __init__(self, *args, **kwargs): """Optionally add or remove extra fields.""" @@ -1172,7 +933,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not path_detail: - self.fields.pop('path', None) + self.fields.pop('path') @staticmethod def annotate_queryset(queryset): @@ -1185,15 +946,6 @@ def annotate_queryset(queryset): return queryset - parent = serializers.PrimaryKeyRelatedField( - queryset=StockLocation.objects.all(), - many=False, - allow_null=True, - required=False, - label=_('Parent Location'), - help_text=_('Parent stock location'), - ) - url = serializers.CharField(source='get_absolute_url', read_only=True) items = serializers.IntegerField(read_only=True, label=_('Stock Items')) @@ -1217,10 +969,22 @@ def annotate_queryset(queryset): ) -@register_importer() -class StockTrackingSerializer( - DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +class StockItemAttachmentSerializer( + InvenTree.serializers.InvenTreeAttachmentSerializer ): + """Serializer for StockItemAttachment model.""" + + class Meta: + """Metaclass options.""" + + model = StockItemAttachment + + fields = InvenTree.serializers.InvenTreeAttachmentSerializer.attachment_fields([ + 'stock_item' + ]) + + +class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for StockItemTracking model.""" class Meta: @@ -1250,10 +1014,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if item_detail is not True: - self.fields.pop('item_detail', None) + self.fields.pop('item_detail') if user_detail is not True: - self.fields.pop('user_detail', None) + self.fields.pop('user_detail') label = serializers.CharField(read_only=True) @@ -1526,7 +1290,7 @@ def stock_item_adjust_status_options(): In particular, include a Null option for the status field. """ - return [(None, _('No Change'))] + stock.status_codes.StockStatus.items() + return [(None, _('No Change'))] + InvenTree.status_codes.StockStatus.items() class StockAdjustmentItemSerializer(serializers.Serializer): @@ -1559,7 +1323,7 @@ class Meta: ) quantity = serializers.DecimalField( - max_digits=15, decimal_places=5, min_value=Decimal(0), required=True + max_digits=15, decimal_places=5, min_value=0, required=True ) batch = serializers.CharField( diff --git a/src/backend/InvenTree/stock/status_codes.py b/src/backend/InvenTree/stock/status_codes.py deleted file mode 100644 index d59d6225694a..000000000000 --- a/src/backend/InvenTree/stock/status_codes.py +++ /dev/null @@ -1,95 +0,0 @@ -"""Stock status codes.""" - -from django.utils.translation import gettext_lazy as _ - -from generic.states import ColorEnum, StatusCode - - -class StockStatus(StatusCode): - """Status codes for Stock.""" - - OK = 10, _('OK'), ColorEnum.success # Item is OK - ATTENTION = 50, _('Attention needed'), ColorEnum.warning # Item requires attention - DAMAGED = 55, _('Damaged'), ColorEnum.warning # Item is damaged - DESTROYED = 60, _('Destroyed'), ColorEnum.danger # Item is destroyed - REJECTED = 65, _('Rejected'), ColorEnum.danger # Item is rejected - LOST = 70, _('Lost'), ColorEnum.dark # Item has been lost - QUARANTINED = ( - 75, - _('Quarantined'), - ColorEnum.info, - ) # Item has been quarantined and is unavailable - RETURNED = ( - 85, - _('Returned'), - ColorEnum.warning, - ) # Item has been returned from a customer - - -class StockStatusGroups: - """Groups for StockStatus codes.""" - - # The following codes correspond to parts that are 'available' or 'in stock' - AVAILABLE_CODES = [ - StockStatus.OK.value, - StockStatus.ATTENTION.value, - StockStatus.DAMAGED.value, - StockStatus.RETURNED.value, - ] - - -class StockHistoryCode(StatusCode): - """Status codes for StockHistory.""" - - LEGACY = 0, _('Legacy stock tracking entry') - - CREATED = 1, _('Stock item created') - - # Manual editing operations - EDITED = 5, _('Edited stock item') - ASSIGNED_SERIAL = 6, _('Assigned serial number') - - # Manual stock operations - STOCK_COUNT = 10, _('Stock counted') - STOCK_ADD = 11, _('Stock manually added') - STOCK_REMOVE = 12, _('Stock manually removed') - - # Location operations - STOCK_MOVE = 20, _('Location changed') - STOCK_UPDATE = 25, _('Stock updated') - - # Installation operations - INSTALLED_INTO_ASSEMBLY = 30, _('Installed into assembly') - REMOVED_FROM_ASSEMBLY = 31, _('Removed from assembly') - - INSTALLED_CHILD_ITEM = 35, _('Installed component item') - REMOVED_CHILD_ITEM = 36, _('Removed component item') - - # Stock splitting operations - SPLIT_FROM_PARENT = 40, _('Split from parent item') - SPLIT_CHILD_ITEM = 42, _('Split child item') - - # Stock merging operations - MERGED_STOCK_ITEMS = 45, _('Merged stock items') - - # Convert stock item to variant - CONVERTED_TO_VARIANT = 48, _('Converted to variant') - - # Build order codes - BUILD_OUTPUT_CREATED = 50, _('Build order output created') - BUILD_OUTPUT_COMPLETED = 55, _('Build order output completed') - BUILD_OUTPUT_REJECTED = 56, _('Build order output rejected') - BUILD_CONSUMED = 57, _('Consumed by build order') - - # Sales order codes - SHIPPED_AGAINST_SALES_ORDER = 60, _('Shipped against Sales Order') - - # Purchase order codes - RECEIVED_AGAINST_PURCHASE_ORDER = 70, _('Received against Purchase Order') - - # Return order codes - RETURNED_AGAINST_RETURN_ORDER = 80, _('Returned against Return Order') - - # Customer actions - SENT_TO_CUSTOMER = 100, _('Sent to customer') - RETURNED_FROM_CUSTOMER = 105, _('Returned from customer') diff --git a/src/backend/InvenTree/stock/templates/stock/item.html b/src/backend/InvenTree/stock/templates/stock/item.html index f85c5694e9cc..33810b6da659 100644 --- a/src/backend/InvenTree/stock/templates/stock/item.html +++ b/src/backend/InvenTree/stock/templates/stock/item.html @@ -208,8 +208,6 @@

    {% trans "Installed Stock Items" %}

    'stock-notes', '{% url "api-stock-detail" item.pk %}', { - model_type: 'stockitem', - model_id: {{ item.pk }}, {% if roles.stock.change and user_owns_item %} editable: true, {% else %} @@ -220,12 +218,21 @@

    {% trans "Installed Stock Items" %}

    }); onPanelLoad('attachments', function() { - loadAttachmentTable('stockitem', {{ item.pk }}); + loadAttachmentTable('{% url "api-stock-attachment-list" %}', { + filters: { + stock_item: {{ item.pk }}, + }, + fields: { + stock_item: { + value: {{ item.pk }}, + hidden: true, + } + } + }); }); {% settings_value "TEST_STATION_DATA" as test_station_fields %} - {% if item.part.trackable %} loadStockTestResultsTable( $("#test-result-table"), { part: {{ item.part.id }}, @@ -235,9 +242,12 @@

    {% trans "Installed Stock Items" %}

    ); $("#test-report").click(function() { - printReports('stockitem', [{{ item.pk }}]); + printReports({ + items: [{{ item.pk }}], + key: 'item', + url: '{% url "api-stockitem-testreport-list" %}', + }); }); - {% endif %} {% if user.is_staff %} $("#delete-test-results").click(function() { diff --git a/src/backend/InvenTree/stock/templates/stock/item_base.html b/src/backend/InvenTree/stock/templates/stock/item_base.html index 8550bc9419ba..c0e12b172ca8 100644 --- a/src/backend/InvenTree/stock/templates/stock/item_base.html +++ b/src/backend/InvenTree/stock/templates/stock/item_base.html @@ -425,7 +425,7 @@
    {% if item.quantity != available %}{% decimal available %} / {% endif %}{% d {% trans "Status" %} - {% display_status_label 'stock' item.status_custom_key item.status %} + {% status_label 'stock' item.status %} {% if item.expiry_date %} @@ -494,14 +494,19 @@
    {% if item.quantity != available %}{% decimal available %} / {% endif %}{% d }); $("#stock-test-report").click(function() { - printReports('stockitem', [{{ item.pk }}]); + printReports({ + items: [{{ item.pk }}], + key: 'item', + url: '{% url "api-stockitem-testreport-list" %}', + }); }); $("#print-label").click(function() { printLabels({ items: [{{ item.pk }}], - model_type: 'stockitem', singular_name: '{% trans "stock item" escape %}', + url: '{% url "api-stockitem-label-list" %}', + key: 'item', }); }); @@ -534,7 +539,7 @@
    {% if item.quantity != available %}{% decimal available %} / {% endif %}{% d $("#show-qr-code").click(function() { showQRDialog( '{% trans "Stock Item QR Code" escape %}', - '{{ item.barcode }}', + '{"stockitem": {{ item.pk }} }', ); }); @@ -646,6 +651,7 @@
    {% if item.quantity != available %}{% decimal available %} / {% endif %}{% d {% endif %} tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, notes: { diff --git a/src/backend/InvenTree/stock/templates/stock/location.html b/src/backend/InvenTree/stock/templates/stock/location.html index a2e34576eef1..4d36aa6d226f 100644 --- a/src/backend/InvenTree/stock/templates/stock/location.html +++ b/src/backend/InvenTree/stock/templates/stock/location.html @@ -15,7 +15,10 @@ {% block heading %} {% if location %} {% trans "Stock Location" %}: - +{% settings_value "STOCK_LOCATION_DEFAULT_ICON" as default_icon %} +{% if location.icon or default_icon %} + +{% endif %} {{ location.name }} {% else %} {% trans "Stock" %} @@ -167,13 +170,6 @@ {% trans "Stock Items" %} {{ location.item_count }} - {% if location.location_type %} - - - {% trans "Location Type" %} - {{ location.location_type }} - - {% endif %} {% else %} @@ -200,11 +196,9 @@

    {% trans "Stock Items" %}

    {% include "spacer.html" %}
    - {% if roles.stock.add and not part.virtual %} - {% endif %}
    @@ -241,10 +235,6 @@

    {% trans "Sublocations" %}

    {% block js_ready %} {{ block.super }} - loadApiIconPacks().then(() => { - $('#location-icon').addClass(getApiIconClass('{{ location.icon }}')); - }); - {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} {% if stocktake_enable and roles.stocktake.add %} $('#location-stocktake').click(function() { @@ -252,12 +242,14 @@

    {% trans "Sublocations" %}

    category: { tree_picker: { url: '{% url "api-part-category-tree" %}', + default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { {% if location %}value: {{ location.pk }},{% endif %} tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, @@ -279,8 +271,6 @@

    {% trans "Sublocations" %}

    params: { {% if location %} parent: {{ location.pk }}, - {% else %} - top_level: true, {% endif %} }, allowTreeView: true, @@ -294,8 +284,9 @@

    {% trans "Sublocations" %}

    printLabels({ items: locs, - model_type: 'stocklocation', singular_name: '{% trans "stock location" escape %}', + key: 'location', + url: '{% url "api-stocklocation-label-list" %}', }); }); {% endif %} @@ -303,7 +294,11 @@

    {% trans "Sublocations" %}

    {% if report_enabled %} $('#print-location-report').click(function() { - printReports('stocklocation', [{{ location.pk }}]); + printReports({ + items: [{{ location.pk }}], + key: 'location', + url: '{% url "api-stocklocation-report-list" %}', + }); }); {% endif %} @@ -391,7 +386,7 @@

    {% trans "Sublocations" %}

    $('#show-qr-code').click(function() { showQRDialog( '{% trans "Stock Location QR Code" escape %}', - '{{ location.barcode }}' + '{"stocklocation": {{ location.pk }} }' ); }); @@ -454,6 +449,7 @@

    {% trans "Sublocations" %}

    return node; }, + defaultIcon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }); {% endblock js_ready %} diff --git a/src/backend/InvenTree/stock/templates/stock/stock_sidebar.html b/src/backend/InvenTree/stock/templates/stock/stock_sidebar.html index 84a7eae3b2c9..3032bab5bfce 100644 --- a/src/backend/InvenTree/stock/templates/stock/stock_sidebar.html +++ b/src/backend/InvenTree/stock/templates/stock/stock_sidebar.html @@ -8,7 +8,7 @@ {% trans "Allocations" as text %} {% include "sidebar_item.html" with label="allocations" text=text icon="fa-bookmark" %} {% endif %} -{% if item.part.testable %} +{% if item.part.trackable %} {% trans "Test Data" as text %} {% include "sidebar_item.html" with label='test-data' text=text icon="fa-vial" %} {% endif %} diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 44e553cacfe0..88fe7bb0c05b 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -2,12 +2,10 @@ import io import os -import random from datetime import datetime, timedelta from enum import IntEnum import django.http -from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.urls import reverse @@ -18,17 +16,16 @@ import build.models import company.models import part.models -from common.models import InvenTreeCustomUserStateModel, InvenTreeSetting +from common.models import InvenTreeSetting +from InvenTree.status_codes import StockHistoryCode, StockStatus from InvenTree.unit_test import InvenTreeAPITestCase from part.models import Part, PartTestTemplate from stock.models import ( StockItem, StockItemTestResult, - StockItemTracking, StockLocation, StockLocationType, ) -from stock.status_codes import StockHistoryCode, StockStatus class StockAPITestCase(InvenTreeAPITestCase): @@ -473,13 +470,13 @@ def test_list(self): """Test that the list endpoint works as expected.""" location_types = [ StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='ti:package:outline' + name='Type 1', description='Type 1 desc', icon='fas fa-box' ), StockLocationType.objects.create( - name='Type 2', description='Type 2 desc', icon='ti:package:outline' + name='Type 2', description='Type 2 desc', icon='fas fa-box' ), StockLocationType.objects.create( - name='Type 3', description='Type 3 desc', icon='ti:package:outline' + name='Type 3', description='Type 3 desc', icon='fas fa-box' ), ] @@ -494,7 +491,7 @@ def test_list(self): def test_delete(self): """Test that we can delete a location type via API.""" location_type = StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='ti:package:outline' + name='Type 1', description='Type 1 desc', icon='fas fa-box' ) self.delete( reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), @@ -507,19 +504,8 @@ def test_create(self): self.post( self.list_url, {'name': 'Test Type 1', 'description': 'Test desc 1', 'icon': 'fas fa-box'}, - expected_code=400, - ) - - self.post( - self.list_url, - { - 'name': 'Test Type 1', - 'description': 'Test desc 1', - 'icon': 'ti:package:outline', - }, expected_code=201, ) - self.assertIsNotNone( StockLocationType.objects.filter(name='Test Type 1').first() ) @@ -527,20 +513,14 @@ def test_create(self): def test_update(self): """Test that we can update a location type via API.""" location_type = StockLocationType.objects.create( - name='Type 1', description='Type 1 desc', icon='ti:package:outline' + name='Type 1', description='Type 1 desc', icon='fas fa-box' ) - self.patch( - reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), - {'icon': 'fas fa-shapes'}, - expected_code=400, - ) - res = self.patch( reverse('api-location-type-detail', kwargs={'pk': location_type.pk}), - {'icon': 'ti:tag:outline'}, + {'icon': 'fas fa-shapes'}, expected_code=200, ).json() - self.assertEqual(res['icon'], 'ti:tag:outline') + self.assertEqual(res['icon'], 'fas fa-shapes') class StockItemListTest(StockAPITestCase): @@ -572,7 +552,7 @@ def test_top_level_filtering(self): response = self.get( self.list_url, {'location': 'null', 'cascade': False}, expected_code=200 ) - self.assertLess(len(response.data), StockItem.objects.count()) + self.assertTrue(len(response.data) < StockItem.objects.count()) # Filter with "cascade=True" response = self.get( @@ -682,10 +662,10 @@ def test_filter_by_has_batch(self): self.assertEqual(n_stock_items, len(with_batch) + len(without_batch)) for item in with_batch: - self.assertNotIn(item['batch'], [None, '']) + self.assertFalse(item['batch'] in [None, '']) for item in without_batch: - self.assertIn(item['batch'], [None, '']) + self.assertTrue(item['batch'] in [None, '']) def test_filter_by_tracked(self): """Test the 'tracked' filter. @@ -766,7 +746,9 @@ def export_data(self, filters=None): self.assertEqual(response.status_code, 200) - self.assertIsInstance(response, django.http.response.StreamingHttpResponse) + self.assertTrue( + isinstance(response, django.http.response.StreamingHttpResponse) + ) file_object = io.StringIO(response.getvalue().decode('utf-8')) @@ -783,11 +765,11 @@ def test_export(self): # Expected headers headers = [ - 'Part', - 'Customer', - 'Stock Location', + 'Part ID', + 'Customer ID', + 'Location ID', 'Location Name', - 'Parent Item', + 'Parent ID', 'Quantity', 'Status', ] @@ -903,6 +885,13 @@ def test_filter_by_allocated(self): def test_query_count(self): """Test that the number of queries required to fetch stock items is reasonable.""" + + def get_stock(data, expected_status=200): + """Helper function to fetch stock items.""" + response = self.client.get(self.list_url, data=data) + self.assertEqual(response.status_code, expected_status) + return response.data + # Create a bunch of StockItem objects prt = Part.objects.first() @@ -912,120 +901,20 @@ def test_query_count(self): ]) # List *all* stock items - self.get(self.list_url, {}, max_query_count=35) + with self.assertNumQueriesLessThan(25): + get_stock({}) # List all stock items, with part detail - self.get(self.list_url, {'part_detail': True}, max_query_count=35) + with self.assertNumQueriesLessThan(20): + get_stock({'part_detail': True}) # List all stock items, with supplier_part detail - self.get(self.list_url, {'supplier_part_detail': True}, max_query_count=35) + with self.assertNumQueriesLessThan(20): + get_stock({'supplier_part_detail': True}) # List all stock items, with 'location' and 'tests' detail - self.get( - self.list_url, {'location_detail': True, 'tests': True}, max_query_count=35 - ) - - -class CustomStockItemStatusTest(StockAPITestCase): - """Tests for custom stock item statuses.""" - - list_url = reverse('api-stock-list') - - def setUp(self): - """Setup for all tests.""" - super().setUp() - self.status = InvenTreeCustomUserStateModel.objects.create( - key=11, - name='OK - advanced', - label='OK - adv.', - color='secondary', - logical_key=10, - model=ContentType.objects.get(model='stockitem'), - reference_status='StockStatus', - ) - self.status2 = InvenTreeCustomUserStateModel.objects.create( - key=51, - name='attention 2', - label='attention 2', - color='secondary', - logical_key=50, - model=ContentType.objects.get(model='stockitem'), - reference_status='StockStatus', - ) - - def test_custom_status(self): - """Tests interaction with states.""" - # Create a stock item with the custom status code via the API - response = self.post( - self.list_url, - { - 'name': 'Test Type 1', - 'description': 'Test desc 1', - 'quantity': 1, - 'part': 1, - 'status_custom_key': self.status.key, - }, - expected_code=201, - ) - self.assertEqual(response.data['status'], self.status.logical_key) - self.assertEqual(response.data['status_custom_key'], self.status.key) - pk = response.data['pk'] - - # Update the stock item with another custom status code via the API - response = self.patch( - reverse('api-stock-detail', kwargs={'pk': pk}), - {'status_custom_key': self.status2.key}, - expected_code=200, - ) - self.assertEqual(response.data['status'], self.status2.logical_key) - self.assertEqual(response.data['status_custom_key'], self.status2.key) - - # Try if status_custom_key is rewrite with status bying set - response = self.patch( - reverse('api-stock-detail', kwargs={'pk': pk}), - {'status': self.status.logical_key}, - expected_code=200, - ) - self.assertEqual(response.data['status'], self.status.logical_key) - self.assertEqual(response.data['status_custom_key'], self.status.logical_key) - - # Create a stock item with a normal status code via the API - response = self.post( - self.list_url, - { - 'name': 'Test Type 1', - 'description': 'Test desc 1', - 'quantity': 1, - 'part': 1, - 'status_key': self.status.key, - }, - expected_code=201, - ) - self.assertEqual(response.data['status'], self.status.logical_key) - self.assertEqual(response.data['status_custom_key'], self.status.logical_key) - - # Test case with wrong key - response = self.patch( - reverse('api-stock-detail', kwargs={'pk': pk}), - {'status_custom_key': 23456789}, - expected_code=400, - ) - self.assertIn('Invalid choice', str(response.data)) - - def test_options(self): - """Test the StockItem OPTIONS endpoint to contain custom StockStatuses.""" - response = self.options(self.list_url) - - self.assertEqual(response.status_code, 200) - - # Check that the response contains the custom StockStatuses - actions = response.data['actions']['POST'] - self.assertIn('status_custom_key', actions) - status_custom_key = actions['status_custom_key'] - self.assertEqual(len(status_custom_key['choices']), 10) - status = status_custom_key['choices'][1] - self.assertEqual(status['value'], self.status.key) - self.assertEqual(status['display_name'], self.status.label) + with self.assertNumQueriesLessThan(20): + get_stock({'location_detail': True, 'tests': True}) class StockItemTest(StockAPITestCase): @@ -1243,7 +1132,7 @@ def test_creation_with_serials(self): # Check that each serial number was created for i in range(1, 11): - self.assertIn(str(i), sn) + self.assertTrue(str(i) in sn) # Check the unique stock item has been created @@ -1417,13 +1306,10 @@ def test_return_from_customer(self): self.assertIn('This field is required', str(response.data['location'])) - # TODO: Return to this and work out why it is taking so long - # Ref: https://github.com/inventree/InvenTree/pull/7157 response = self.post( url, {'location': '1', 'notes': 'Returned from this customer for testing'}, expected_code=201, - max_query_time=5.0, ) item.refresh_from_db() @@ -1533,7 +1419,7 @@ def test_action(self): data = {} # POST with a valid action - response = self.post(url, data, expected_code=400) + response = self.post(url, data) self.assertIn('This field is required', str(response.data['items'])) @@ -1568,7 +1454,7 @@ def test_action(self): # POST with an invalid quantity value data['items'] = [{'pk': 1234, 'quantity': '10x0d'}] - response = self.post(url, data, expected_code=400) + response = self.post(url, data) self.assertContains( response, 'A valid number is required', @@ -1577,8 +1463,7 @@ def test_action(self): data['items'] = [{'pk': 1234, 'quantity': '-1.234'}] - response = self.post(url, data, expected_code=400) - + response = self.post(url, data) self.assertContains( response, 'Ensure this value is greater than or equal to 0', @@ -1587,14 +1472,6 @@ def test_action(self): def test_transfer(self): """Test stock transfers.""" - stock_item = StockItem.objects.get(pk=1234) - - # Mark this stock item as "quarantined" (cannot be moved) - stock_item.status = StockStatus.QUARANTINED.value - stock_item.save() - - InvenTreeSetting.set_setting('STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', False) - data = { 'items': [{'pk': 1234, 'quantity': 10}], 'location': 1, @@ -1603,14 +1480,6 @@ def test_transfer(self): url = reverse('api-stock-transfer') - # First attempt should *fail* - stock item is quarantined - response = self.post(url, data, expected_code=400) - - self.assertIn('cannot be moved as it is not in stock', str(response.data)) - - # Now, allow transfer of "out of stock" items - InvenTreeSetting.set_setting('STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', True) - # This should succeed response = self.post(url, data, expected_code=201) @@ -1828,150 +1697,6 @@ def test_bulk_delete(self): self.assertEqual(StockItemTestResult.objects.count(), n) - def test_value_choices(self): - """Test that the 'value' field is correctly validated.""" - url = reverse('api-stock-test-result-list') - - test_template = PartTestTemplate.objects.first() - - test_template.choices = 'AA, BB, CC' - test_template.save() - - stock_item = StockItem.objects.create( - part=test_template.part, quantity=1, location=StockLocation.objects.first() - ) - - # Create result with invalid choice - response = self.post( - url, - { - 'template': test_template.pk, - 'stock_item': stock_item.pk, - 'result': True, - 'value': 'DD', - }, - expected_code=400, - ) - - self.assertIn('Invalid value for this test', str(response.data['value'])) - - # Create result with valid choice - response = self.post( - url, - { - 'template': test_template.pk, - 'stock_item': stock_item.pk, - 'result': True, - 'value': 'BB', - }, - expected_code=201, - ) - - # Create result with unrestricted choice - test_template.choices = '' - test_template.save() - - response = self.post( - url, - { - 'template': test_template.pk, - 'stock_item': stock_item.pk, - 'result': False, - 'value': '12345', - }, - expected_code=201, - ) - - -class StockTrackingTest(StockAPITestCase): - """Tests for the StockTracking API endpoints.""" - - fixtures = [ - *StockAPITestCase.fixtures, - 'build', - 'order', - 'return_order', - 'sales_order', - ] - - @classmethod - def setUpTestData(cls): - """Initialize some test data for the StockTracking tests.""" - super().setUpTestData() - - import build.models - import company.models - import order.models - import stock.models - import stock.status_codes - - entries = [] - - N_BO = build.models.Build.objects.count() - N_PO = order.models.PurchaseOrder.objects.count() - N_RO = order.models.ReturnOrder.objects.count() - N_SO = order.models.SalesOrder.objects.count() - - N_COMPANY = company.models.Company.objects.count() - N_LOCATION = stock.models.StockLocation.objects.count() - - # Generate a large quantity of tracking items - # Note that the pk values are not guaranteed to exist in the database - for item in StockItem.objects.all(): - for i in range(50): - entries.append( - StockItemTracking( - item=item, - notes='This is a test entry', - tracking_type=stock.status_codes.StockHistoryCode.LEGACY.value, - deltas={ - 'quantity': 50 - i, - 'buildorder': random.randint(0, N_BO + 1), - 'purchaseorder': random.randint(0, N_PO + 1), - 'returnorder': random.randint(0, N_RO + 1), - 'salesorder': random.randint(0, N_SO + 1), - 'customer': random.randint(0, N_COMPANY + 1), - 'location': random.randint(0, N_LOCATION + 1), - }, - ) - ) - - StockItemTracking.objects.bulk_create(entries) - - def get_url(self): - """Helper function to get stock tracking api url.""" - return reverse('api-stock-tracking-list') - - def test_count(self): - """Test list endpoint with limit = 1.""" - url = self.get_url() - - N = StockItemTracking.objects.count() - - # Test counting - response = self.get(url, {'limit': 1}) - self.assertEqual(response.data['count'], N) - - def test_list(self): - """Test list endpoint.""" - url = self.get_url() - - N = StockItemTracking.objects.count() - self.assertGreater(N, 1000) - - response = self.client.get(url, max_query_count=25) - self.assertEqual(len(response.data), N) - - # Check expected delta values - keys = ['quantity', 'returnorder', 'buildorder', 'customer'] - - for item in response.data: - deltas = item['deltas'] - - for key in keys: - self.assertIn(key, deltas) - self.assertIsNotNone(deltas.get(key, None)) - class StockAssignTest(StockAPITestCase): """Unit tests for the stock assignment API endpoint, where stock items are manually assigned to a customer.""" diff --git a/src/backend/InvenTree/stock/test_views.py b/src/backend/InvenTree/stock/test_views.py index 0552a5af7a65..e6bb42063631 100644 --- a/src/backend/InvenTree/stock/test_views.py +++ b/src/backend/InvenTree/stock/test_views.py @@ -5,9 +5,9 @@ from django.urls import reverse from common.models import InvenTreeSetting +from InvenTree.status_codes import StockStatus from InvenTree.unit_test import InvenTreeTestCase from stock.models import StockItem, StockLocation -from stock.status_codes import StockStatus from users.models import Owner diff --git a/src/backend/InvenTree/stock/tests.py b/src/backend/InvenTree/stock/tests.py index dcbf2cf3d3a7..89d9e8e9d234 100644 --- a/src/backend/InvenTree/stock/tests.py +++ b/src/backend/InvenTree/stock/tests.py @@ -10,18 +10,12 @@ from build.models import Build from common.models import InvenTreeSetting from company.models import Company +from InvenTree.status_codes import StockHistoryCode from InvenTree.unit_test import InvenTreeTestCase from order.models import SalesOrder from part.models import Part, PartTestTemplate -from stock.status_codes import StockHistoryCode -from .models import ( - StockItem, - StockItemTestResult, - StockItemTracking, - StockLocation, - StockLocationType, -) +from .models import StockItem, StockItemTestResult, StockItemTracking, StockLocation class StockTestBase(InvenTreeTestCase): @@ -761,14 +755,23 @@ def test_location_tree(self): # First, we will create a stock location structure A = StockLocation.objects.create(name='A', description='Top level location') + B1 = StockLocation.objects.create(name='B1', parent=A) + B2 = StockLocation.objects.create(name='B2', parent=A) + B3 = StockLocation.objects.create(name='B3', parent=A) + C11 = StockLocation.objects.create(name='C11', parent=B1) + C12 = StockLocation.objects.create(name='C12', parent=B1) + C21 = StockLocation.objects.create(name='C21', parent=B2) + C22 = StockLocation.objects.create(name='C22', parent=B2) + C31 = StockLocation.objects.create(name='C31', parent=B3) + C32 = StockLocation.objects.create(name='C32', parent=B3) # Check that the tree_id is correct for each sublocation @@ -892,62 +895,6 @@ def test_metadata(self): self.assertEqual(len(p.metadata.keys()), 4) - def test_merge(self): - """Test merging of multiple stock items.""" - from djmoney.money import Money - - part = Part.objects.first() - part.stock_items.all().delete() - - # Test simple merge without any pricing information - s1 = StockItem.objects.create(part=part, quantity=10) - s2 = StockItem.objects.create(part=part, quantity=20) - s3 = StockItem.objects.create(part=part, quantity=30) - - self.assertEqual(part.stock_items.count(), 3) - s1.merge_stock_items([s2, s3]) - self.assertEqual(part.stock_items.count(), 1) - s1.refresh_from_db() - self.assertEqual(s1.quantity, 60) - self.assertIsNone(s1.purchase_price) - - part.stock_items.all().delete() - - # Create some stock items with pricing information - s1 = StockItem.objects.create(part=part, quantity=10, purchase_price=None) - s2 = StockItem.objects.create( - part=part, quantity=15, purchase_price=Money(10, 'USD') - ) - s3 = StockItem.objects.create(part=part, quantity=30) - - self.assertEqual(part.stock_items.count(), 3) - s1.merge_stock_items([s2, s3]) - self.assertEqual(part.stock_items.count(), 1) - s1.refresh_from_db() - self.assertEqual(s1.quantity, 55) - self.assertEqual(s1.purchase_price, Money(10, 'USD')) - - part.stock_items.all().delete() - - s1 = StockItem.objects.create( - part=part, quantity=10, purchase_price=Money(5, 'USD') - ) - s2 = StockItem.objects.create( - part=part, quantity=25, purchase_price=Money(10, 'USD') - ) - s3 = StockItem.objects.create( - part=part, quantity=5, purchase_price=Money(75, 'USD') - ) - - self.assertEqual(part.stock_items.count(), 3) - s1.merge_stock_items([s2, s3]) - self.assertEqual(part.stock_items.count(), 1) - s1.refresh_from_db() - self.assertEqual(s1.quantity, 40) - - # Final purchase price should be the weighted average - self.assertAlmostEqual(s1.purchase_price.amount, 16.875, places=3) - class StockBarcodeTest(StockTestBase): """Run barcode tests for the stock app.""" @@ -958,6 +905,12 @@ def test_stock_item_barcode_basics(self): self.assertEqual(StockItem.barcode_model_type(), 'stockitem') + # Call format_barcode method + barcode = item.format_barcode(brief=False) + + for key in ['tool', 'version', 'instance', 'stockitem']: + self.assertIn(key, barcode) + # Render simple barcode data for the StockItem barcode = item.barcode self.assertEqual(barcode, '{"stockitem": 1}') @@ -968,7 +921,7 @@ def test_location_barcode_basics(self): loc = StockLocation.objects.get(pk=1) - barcode = loc.format_barcode() + barcode = loc.format_barcode(brief=True) self.assertEqual('{"stocklocation": 1}', barcode) @@ -1311,39 +1264,3 @@ def test_installed_tests(self): tests = item.testResultMap(include_installed=False) self.assertEqual(len(tests), 3) self.assertNotIn('somenewtest', tests) - - -class StockLocationTest(InvenTreeTestCase): - """Tests for the StockLocation model.""" - - def test_icon(self): - """Test stock location icon.""" - # No default icon set - loc = StockLocation.objects.create(name='Test Location') - loc_type = StockLocationType.objects.create( - name='Test Type', icon='ti:cube-send:outline' - ) - self.assertEqual(loc.icon, '') - - # Set a default icon - InvenTreeSetting.set_setting( - 'STOCK_LOCATION_DEFAULT_ICON', 'ti:package:outline' - ) - self.assertEqual(loc.icon, 'ti:package:outline') - - # Assign location type and check that it takes precedence over default icon - loc.location_type = loc_type - loc.save() - self.assertEqual(loc.icon, 'ti:cube-send:outline') - - # Set a custom icon and assert that it takes precedence over all other icons - loc.icon = 'ti:tag:outline' - loc.save() - self.assertEqual(loc.icon, 'ti:tag:outline') - InvenTreeSetting.set_setting('STOCK_LOCATION_DEFAULT_ICON', '') - - # Test that the icon can be set to None again - loc.icon = '' - loc.location_type = None - loc.save() - self.assertEqual(loc.icon, '') diff --git a/src/backend/InvenTree/stock/views.py b/src/backend/InvenTree/stock/views.py index 57140a9952f2..3fb10d968f65 100644 --- a/src/backend/InvenTree/stock/views.py +++ b/src/backend/InvenTree/stock/views.py @@ -4,7 +4,7 @@ from django.urls import reverse from django.views.generic import DetailView, ListView -from common.settings import get_global_setting +import common.settings from InvenTree.views import InvenTreeRoleMixin from plugin.views import InvenTreePluginViewMixin @@ -34,7 +34,9 @@ def get_context_data(self, **kwargs): # No 'ownership' checks are necessary for the top-level StockLocation view context['user_owns_location'] = True context['location_owner'] = None - context['ownership_enabled'] = get_global_setting('STOCK_OWNERSHIP_CONTROL') + context['ownership_enabled'] = common.models.InvenTreeSetting.get_setting( + 'STOCK_OWNERSHIP_CONTROL' + ) return context @@ -51,7 +53,9 @@ def get_context_data(self, **kwargs): """Extend template context.""" context = super().get_context_data(**kwargs) - context['ownership_enabled'] = get_global_setting('STOCK_OWNERSHIP_CONTROL') + context['ownership_enabled'] = common.models.InvenTreeSetting.get_setting( + 'STOCK_OWNERSHIP_CONTROL' + ) context['location_owner'] = context['location'].get_location_owner() context['user_owns_location'] = context['location'].check_ownership( self.request.user @@ -76,7 +80,9 @@ def get_context_data(self, **kwargs): data['previous'] = self.object.get_next_serialized_item(reverse=True) data['next'] = self.object.get_next_serialized_item() - data['ownership_enabled'] = get_global_setting('STOCK_OWNERSHIP_CONTROL') + data['ownership_enabled'] = common.models.InvenTreeSetting.get_setting( + 'STOCK_OWNERSHIP_CONTROL' + ) data['item_owner'] = self.object.get_item_owner() data['user_owns_item'] = self.object.check_ownership(self.request.user) diff --git a/src/backend/InvenTree/templates/InvenTree/settings/barcode.html b/src/backend/InvenTree/templates/InvenTree/settings/barcode.html index 8da99c0a9a79..3e6fb6835be5 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/barcode.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/barcode.html @@ -15,8 +15,6 @@ {% include "InvenTree/settings/setting.html" with key="BARCODE_ENABLE" icon="fa-qrcode" %} {% include "InvenTree/settings/setting.html" with key="BARCODE_INPUT_DELAY" icon="fa-hourglass-half" %} {% include "InvenTree/settings/setting.html" with key="BARCODE_WEBCAM_SUPPORT" icon="fa-video" %} - {% include "InvenTree/settings/setting.html" with key="BARCODE_SHOW_TEXT" icon="fa-closed-captioning" %} - {% include "InvenTree/settings/setting.html" with key="BARCODE_GENERATION_PLUGIN" icon="fa-qrcode" %}
    diff --git a/src/backend/InvenTree/templates/InvenTree/settings/build.html b/src/backend/InvenTree/templates/InvenTree/settings/build.html index cce783b3723c..781bb715257a 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/build.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/build.html @@ -14,10 +14,6 @@ {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REFERENCE_PATTERN" %} {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_RESPONSIBLE" %} - {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_ACTIVE_PART" %} - {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_LOCKED_PART" %} - {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_VALID_BOM" %} - {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REQUIRE_CLOSED_CHILDS" %} {% include "InvenTree/settings/setting.html" with key="PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/login.html b/src/backend/InvenTree/templates/InvenTree/settings/login.html index d94a3a18315c..d2b557978c4d 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/login.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/login.html @@ -39,10 +39,6 @@ {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO" icon="fa-user-shield" %} {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO_REG" icon="fa-user-plus" %} {% include "InvenTree/settings/setting.html" with key="LOGIN_SIGNUP_SSO_AUTO" icon="fa-key" %} - {% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_SSO_GROUP_SYNC" icon="fa-users" %} - {% include "InvenTree/settings/setting.html" with key="SSO_GROUP_KEY" icon="fa-key" %} - {% include "InvenTree/settings/setting.html" with key="SSO_GROUP_MAP" icon="fa-book" %} - {% include "InvenTree/settings/setting.html" with key="SSO_REMOVE_GROUPS" icon="fa-user-minus" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/part.html b/src/backend/InvenTree/templates/InvenTree/settings/part.html index 96aafc3f30c5..00d606c5b92f 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/part.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/part.html @@ -12,11 +12,9 @@ {% include "InvenTree/settings/setting.html" with key="PART_ENABLE_REVISION" %} - {% include "InvenTree/settings/setting.html" with key="PART_REVISION_ASSEMBLY_ONLY" %} {% include "InvenTree/settings/setting.html" with key="PART_IPN_REGEX" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_EDIT_IPN" %} - {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DELETE_FROM_ASSEMBLY" %} {% include "InvenTree/settings/setting.html" with key="PART_NAME_FORMAT" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_RELATED" icon="fa-random" %} {% include "InvenTree/settings/setting.html" with key="PART_CREATE_INITIAL" icon="fa-boxes" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/pricing.html b/src/backend/InvenTree/templates/InvenTree/settings/pricing.html index 8e99fbc983e9..cba117ad14e1 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/pricing.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/pricing.html @@ -12,7 +12,6 @@
    {% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-globe" %} - {% include "InvenTree/settings/setting.html" with key="CURRENCY_CODES" %} {% include "InvenTree/settings/setting.html" with key="PART_INTERNAL_PRICE" %} {% include "InvenTree/settings/setting.html" with key="PART_BOM_USE_INTERNAL_PRICE" %} {% include "InvenTree/settings/setting.html" with key="PRICING_DECIMAL_PLACES_MIN" icon='fa-dollar-sign' %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html b/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html index 8e857739a745..cbc0b56e0581 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html @@ -19,7 +19,7 @@ if (notification) { url = `/api/settings/notification/${pk}/`; } else if (plugin) { - url = `/api/plugins/${plugin}/settings/${setting}/`; + url = `/api/plugins/settings/${plugin}/${setting}/`; } else if (user) { url = `/api/settings/user/${setting}/`; } diff --git a/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html b/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html index 5b2a0ce8980e..85d90193dbac 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/settings_staff_js.html @@ -330,6 +330,7 @@ icon: 'fa-sitemap', tree_picker: { url: '{% url "api-part-category-tree" %}', + default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, default_value: {}, @@ -393,6 +394,7 @@ value: pk, tree_picker: { url: '{% url "api-part-category-tree" %}', + default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, default_value: {}, @@ -427,8 +429,7 @@ }); // Javascript for the Stock settings panel -onPanelLoad("stock", async function() { - await loadApiIconPacks(); +onPanelLoad("stock", function() { // Construct the stock location type table $('#location-type-table').bootstrapTable({ @@ -439,15 +440,6 @@ return '{% trans "No stock location types found" escape %}'; }, columns: [ - { - field: 'icon', - sortable: true, - title: '{% trans "Icon" escape %}', - width: "50px", - formatter: function(value, row) { - return `` - } - }, { field: 'name', sortable: true, @@ -458,6 +450,11 @@ sortable: false, title: '{% trans "Description" escape %}', }, + { + field: 'icon', + sortable: true, + title: '{% trans "Icon" escape %}', + }, { field: 'location_count', sortable: true, @@ -563,11 +560,13 @@ category: { tree_picker: { url: '{% url "api-part-category-tree" %}', + default_icon: global_settings.PART_CATEGORY_DEFAULT_ICON, }, }, location: { tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, generate_report: {}, diff --git a/src/backend/InvenTree/templates/InvenTree/settings/so.html b/src/backend/InvenTree/templates/InvenTree/settings/so.html index 493ac324071d..9be6df6025f1 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/so.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/so.html @@ -15,7 +15,6 @@ {% include "InvenTree/settings/setting.html" with key="SALESORDER_REQUIRE_RESPONSIBLE" %} {% include "InvenTree/settings/setting.html" with key="SALESORDER_DEFAULT_SHIPMENT" icon="fa-truck-loading" %} {% include "InvenTree/settings/setting.html" with key="SALESORDER_EDIT_COMPLETED_ORDERS" icon='fa-edit' %} - {% include "InvenTree/settings/setting.html" with key="SALESORDER_SHIP_COMPLETE" %}
    diff --git a/src/backend/InvenTree/templates/InvenTree/settings/stock.html b/src/backend/InvenTree/templates/InvenTree/settings/stock.html index 89dd5e95b90f..9ccca21af02e 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/stock.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/stock.html @@ -23,7 +23,6 @@ {% include "InvenTree/settings/setting.html" with key="STOCK_LOCATION_DEFAULT_ICON" icon="fa-icons" %} {% include "InvenTree/settings/setting.html" with key="STOCK_SHOW_INSTALLED_ITEMS" icon="fa-sitemap" %} {% include "InvenTree/settings/setting.html" with key="STOCK_ENFORCE_BOM_INSTALLATION" icon="fa-check-circle" %} - {% include "InvenTree/settings/setting.html" with key="STOCK_ALLOW_OUT_OF_STOCK_TRANSFER" icon="fa-dolly" %} {% include "InvenTree/settings/setting.html" with key="TEST_STATION_DATA" icon="fa-network-wired" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/user.html b/src/backend/InvenTree/templates/InvenTree/settings/user.html index c0fa53aedc24..f164d2aa977b 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/user.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/user.html @@ -162,9 +162,6 @@
    {% trans "Change factors" %}
    -{% inventree_customize 'hide_active_sessions' as hide_active_sessions %} - -{% if not hide_active_sessions %}
    @@ -214,8 +211,6 @@

    {% trans "Active Sessions" %}

    -{% endif %} - {% endblock content %} {% block js_ready %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/user_display.html b/src/backend/InvenTree/templates/InvenTree/settings/user_display.html index ab2144939db3..7ae7ae19e359 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/user_display.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/user_display.html @@ -41,7 +41,7 @@
    {% trans "Select theme" %}
    + ${report_list} + +
    +
    + `; + + openModal({ + modal: modal, + }); + + modalEnable(modal, true); + modalSetTitle(modal, '{% trans "Select Test Report Template" %}'); + modalSetContent(modal, html); + + attachSelect(modal); + + modalSubmit(modal, function() { + + var label = $(modal).find('#id_report'); + + var pk = label.val(); + + closeModal(modal); + + if (options.success) { + options.success(pk); + } + }); + +} + /* * Print report(s) for the selected items: @@ -28,52 +112,49 @@ * - Request printed document * * Required options: - * - model_type: The "type" of report template to print against + * - url: The list URL for the particular template type * - items: The list of objects to print + * - key: The key to use in the query parameters */ -function printReports(model_type, items) { +function printReports(options) { - if (!items || items.length == 0) { + if (!options.items || options.items.length == 0) { showAlertDialog( '{% trans "Select Items" %}', - '{% trans "No items selected for printing" %}', + '{% trans "No items selected for printing" }', ); return; } - // Join the items with a comma character - const item_string = items.join(','); - - constructForm('{% url "api-report-print" %}', { - method: 'POST', - title: '{% trans "Print Report" %}', - fields: { - template: { - filters: { - enabled: true, - model_type: model_type, - items: item_string, - } - }, - items: { - hidden: true, - value: items, + let params = { + enabled: true, + }; + + params[options.key] = options.items; + + // Request a list of available report templates + inventreeGet(options.url, params, { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Reports Found" %}', + '{% trans "No report templates found which match the selected items" %}', + ); + return; } - }, - onSuccess: function(response) { - if (response.complete) { - if (response.output) { - window.open(response.output, '_blank'); - } else { - showMessage('{% trans "Report print successful" %}', { - style: 'success' + + // Select report template for printing + selectReport(response, options.items, { + success: function(pk) { + let href = `${options.url}${pk}/print/?`; + + options.items.forEach(function(item) { + href += `${options.key}=${item}&`; }); + + window.open(href); } - } else { - showMessage('{% trans "Report printing failed" %}', { - style: 'warning', - }); - } + }); } - }) + }); } diff --git a/src/backend/InvenTree/templates/js/translated/return_order.js b/src/backend/InvenTree/templates/js/translated/return_order.js index 57ac61018536..5163b9696d16 100644 --- a/src/backend/InvenTree/templates/js/translated/return_order.js +++ b/src/backend/InvenTree/templates/js/translated/return_order.js @@ -242,7 +242,8 @@ function loadReturnOrderTable(table, options={}) { setupFilterList('returnorder', $(table), '#filter-list-returnorder', { download: true, report: { - key: 'returnorder', + url: '{% url "api-return-order-report-list" %}', + key: 'order', } }); @@ -326,10 +327,10 @@ function loadReturnOrderTable(table, options={}) { }, { sortable: true, - field: 'status_custom_key', + field: 'status', title: '{% trans "Status" %}', formatter: function(value, row) { - return returnOrderStatusDisplay(row.status_custom_key); + return returnOrderStatusDisplay(row.status); } }, { @@ -552,6 +553,7 @@ function receiveReturnOrderItems(order_id, line_items, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, } }, diff --git a/src/backend/InvenTree/templates/js/translated/sales_order.js b/src/backend/InvenTree/templates/js/translated/sales_order.js index 542330156d14..53085cf180f2 100644 --- a/src/backend/InvenTree/templates/js/translated/sales_order.js +++ b/src/backend/InvenTree/templates/js/translated/sales_order.js @@ -473,15 +473,15 @@ function completePendingShipmentsHelper(shipments, shipment_idx, options={}) { /* - * Launches a modal form to mark a SalesOrder as "shipped" + * Launches a modal form to mark a SalesOrder as "complete" */ -function shipSalesOrder(order_id, options={}) { +function completeSalesOrder(order_id, options={}) { constructForm( `/api/order/so/${order_id}/complete/`, { method: 'POST', - title: '{% trans "Ship Sales Order" %}', + title: '{% trans "Complete Sales Order" %}', confirm: true, fieldsFunction: function(opts) { var fields = { @@ -497,13 +497,13 @@ function shipSalesOrder(order_id, options={}) { preFormContent: function(opts) { var html = `
    - {% trans "Ship this order?" %} + {% trans "Mark this order as complete?" %}
    `; if (opts.context.pending_shipments) { html += `
    - {% trans "Order cannot be shipped as there are incomplete shipments" %}
    + {% trans "Order cannot be completed as there are incomplete shipments" %}
    `; } @@ -511,7 +511,7 @@ function shipSalesOrder(order_id, options={}) { html += `
    {% trans "This order has line items which have not been completed." %}
    - {% trans "Shipping this order means that the order and line items will no longer be editable." %} + {% trans "Completing this order means that the order and line items will no longer be editable." %}
    `; } @@ -524,43 +524,6 @@ function shipSalesOrder(order_id, options={}) { ); } -/* - * Launches a modal form to mark a SalesOrder as "completed" - */ -function completeSalesOrder(order_id, options={}) { - - constructForm( - `/api/order/so/${order_id}/complete/`, - { - method: 'POST', - title: '{% trans "Complete Sales Order" %}', - confirm: true, - fieldsFunction: function(opts) { - var fields = { - accept_incomplete: {}, - }; - - if (opts.context.is_complete) { - delete fields['accept_incomplete']; - } - - return fields; - }, - preFormContent: function(opts) { - var html = ` -
    - {% trans "Mark this order as complete?" %} -
    `; - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - /* * Launches sa modal form to mark a SalesOrder as "issued" @@ -682,7 +645,8 @@ function loadSalesOrderTable(table, options) { setupFilterList('salesorder', $(table), '#filter-list-salesorder', { download: true, report: { - key: 'salesorder' + url: '{% url "api-so-report-list" %}', + key: 'order' } }); @@ -851,10 +815,10 @@ function loadSalesOrderTable(table, options) { }, { sortable: true, - field: 'status_custom_key', + field: 'status', title: '{% trans "Status" %}', formatter: function(value, row) { - return salesOrderStatusDisplay(row.status_custom_key); + return salesOrderStatusDisplay(row.status); } }, { diff --git a/src/backend/InvenTree/templates/js/translated/stock.js b/src/backend/InvenTree/templates/js/translated/stock.js index 6c2153634308..5254eec00fd5 100644 --- a/src/backend/InvenTree/templates/js/translated/stock.js +++ b/src/backend/InvenTree/templates/js/translated/stock.js @@ -4,7 +4,6 @@ /* globals addCachedAlert, - addTableFilter, baseCurrency, calculateTotalPrice, clearFormInput, @@ -17,9 +16,7 @@ formatCurrency, formatDecimal, formatPriceRange, - getApiIconClass, getCurrencyConversionRates, - getFormFieldElement, getFormFieldValue, getTableData, global_settings, @@ -39,11 +36,8 @@ makeIconBadge, makeIconButton, makeRemoveButton, - moment, orderParts, partDetail, - reloadTableFilters, - removeTableFilter, renderClipboard, renderDate, renderLink, @@ -74,7 +68,6 @@ duplicateStockItem, editStockItem, editStockLocation, - filterTestStatisticsTableDateRange, findStockItemBySerialNumber, installStockItem, loadInstalledInTable, @@ -83,7 +76,6 @@ loadStockTestResultsTable, loadStockTrackingTable, loadTableFilters, - prepareTestStatisticsTable, mergeStockItems, removeStockRow, serializeStockItem, @@ -144,8 +136,8 @@ function stockLocationTypeFields() { name: {}, description: {}, icon: { - help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Tabler Icons.`, - placeholder: 'ti:: (e.g. ti:alert-circle:filled)', + help_text: `{% trans "Default icon for all locations that have no icon set (optional) - Explore all available icons on" %} Font Awesome.`, + placeholder: 'fas fa-box', icon: "fa-icons", }, } @@ -161,6 +153,7 @@ function stockLocationFields(options={}) { required: false, tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, name: {}, @@ -179,8 +172,8 @@ function stockLocationFields(options={}) { }, }, custom_icon: { - help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Tabler Icons.`, - placeholder: 'ti:: (e.g. ti:alert-circle:filled)', + help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Font Awesome.`, + placeholder: 'fas fa-box', icon: "fa-icons", }, }; @@ -362,6 +355,7 @@ function stockItemFields(options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, quantity: { @@ -380,7 +374,7 @@ function stockItemFields(options={}) { batch: { icon: 'fa-layer-group', }, - status_custom_key: {}, + status: {}, expiry_date: { icon: 'fa-calendar-alt', }, @@ -698,7 +692,7 @@ function assignStockToCustomer(items, options={}) { var thumbnail = thumbnailImage(part.thumbnail || part.image); - var status = stockStatusDisplay(item.status_custom_key, {classes: 'float-right'}); + var status = stockStatusDisplay(item.status, {classes: 'float-right'}); var quantity = ''; @@ -879,7 +873,7 @@ function mergeStockItems(items, options={}) { quantity = `{% trans "Quantity" %}: ${item.quantity}`; } - quantity += stockStatusDisplay(item.status_custom_key, {classes: 'float-right'}); + quantity += stockStatusDisplay(item.status, {classes: 'float-right'}); let buttons = wrapButtons( makeIconButton( @@ -921,6 +915,7 @@ function mergeStockItems(items, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, notes: { @@ -1015,16 +1010,14 @@ function mergeStockItems(items, options={}) { */ function adjustStock(action, items, options={}) { - let formTitle = 'Form Title Here'; - let actionTitle = null; - - const allowExtraFields = action == 'move'; + var formTitle = 'Form Title Here'; + var actionTitle = null; // API url var url = null; - let specifyLocation = false; - let allowSerializedStock = false; + var specifyLocation = false; + var allowSerializedStock = false; switch (action) { case 'move': @@ -1076,7 +1069,7 @@ function adjustStock(action, items, options={}) { for (var idx = 0; idx < items.length; idx++) { - const item = items[idx]; + var item = items[idx]; if ((item.serial != null) && (item.serial != '') && !allowSerializedStock) { continue; @@ -1113,11 +1106,15 @@ function adjustStock(action, items, options={}) { var thumb = thumbnailImage(item.part_detail.thumbnail || item.part_detail.image); - var status = stockStatusDisplay(item.status_custom_key, { + var status = stockStatusDisplay(item.status, { classes: 'float-right' }); - let quantityString = ''; + var quantity = item.quantity; + + if (item.part_detail.units != null) { + quantity += ` ${item.part_detail.units}`; + } var location = locationDetail(item, false); @@ -1125,18 +1122,12 @@ function adjustStock(action, items, options={}) { location = item.location_detail.pathstring; } - if (!item.serial) { - quantityString = `${item.quantity}`; - - if (item.part_detail?.units) { - quantityString += ` [${item.part_detail.units}]`; - } - } else { - quantityString = `#${item.serial}`; + if (item.serial != null) { + quantity = `#${item.serial}`; } if (item.batch) { - quantityString += ` - {% trans "Batch" %}: ${item.batch}`; + quantity += ` - {% trans "Batch" %}: ${item.batch}`; } var actionInput = ''; @@ -1158,73 +1149,16 @@ function adjustStock(action, items, options={}) { ); } - let buttons = ''; - - if (allowExtraFields) { - buttons += makeIconButton( - 'fa-layer-group', - 'button-row-add-batch', - pk, - '{% trans "Adjust batch code" %}', - { - collapseTarget: `row-batch-${pk}` - } - ); - - buttons += makeIconButton( - 'fa-boxes', - 'button-row-add-packaging', - pk, - '{% trans "Adjust packaging" %}', - { - collapseTarget: `row-packaging-${pk}` - } - ); - } - - buttons += makeRemoveButton( + let buttons = wrapButtons(makeRemoveButton( 'button-stock-item-remove', pk, '{% trans "Remove stock item" %}', - ); - - buttons = wrapButtons(buttons); - - // Add in options for "batch code" and "serial numbers" - const batch_input = constructField( - `items_batch_code_${pk}`, - { - type: 'string', - required: false, - label: '{% trans "Batch Code" %}', - help_text: '{% trans "Enter batch code for incoming stock items" %}', - icon: 'fa-layer-group', - value: item.batch, - }, - { - hideLabels: true, - } - ); - - const packaging_input = constructField( - `items_packaging_${pk}`, - { - type: 'string', - required: false, - label: '{% trans "Packaging" %}', - help_text: '{% trans "Specify packaging for incoming stock items" %}', - icon: 'fa-boxes', - value: item.packaging, - }, - { - hideLabels: true, - } - ); + )); html += ` ${thumb} ${item.part_detail.full_name} - ${quantityString}${status} + ${quantity}${status} ${location}
    @@ -1233,19 +1167,6 @@ function adjustStock(action, items, options={}) {
    ${buttons} - - - - - {% trans "Batch" %} - ${batch_input} - - - - - {% trans "Packaging" %} - ${packaging_input} - `; itemCount += 1; @@ -1342,30 +1263,21 @@ function adjustStock(action, items, options={}) { var item_pk_values = []; items.forEach(function(item) { - let pk = item.pk; + var pk = item.pk; // Does the row exist in the form? - let row = $(opts.modal).find(`#stock_item_${pk}`); + var row = $(opts.modal).find(`#stock_item_${pk}`); if (row.exists()) { item_pk_values.push(pk); - let quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); - let line = { - pk: pk, - quantity: quantity - }; - - if (getFormFieldElement(`items_batch_code_${pk}`).exists()) { - line.batch = getFormFieldValue(`items_batch_code_${pk}`); - } - - if (getFormFieldElement(`items_packaging_${pk}`).exists()) { - line.packaging = getFormFieldValue(`items_packaging_${pk}`); - } + var quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); - data.items.push(line); + data.items.push({ + pk: pk, + quantity: quantity, + }); } }); @@ -1922,8 +1834,7 @@ function makeStockActions(table) { } }, { - - label: 'status_custom_key', + label: 'status', icon: 'fa-info-circle icon-blue', title: '{% trans "Change stock status" %}', permission: 'stock.change', @@ -2030,10 +1941,12 @@ function loadStockTable(table, options) { setupFilterList(filterKey, table, filterTarget, { download: true, report: { - key: 'stockitem', + url: '{% url "api-stockitem-testreport-list" %}', + key: 'item', }, labels: { - model_type: 'stockitem', + url: '{% url "api-stockitem-label-list" %}', + key: 'item', }, singular_name: '{% trans "stock item" %}', plural_name: '{% trans "stock items" %}', @@ -2258,7 +2171,7 @@ function loadStockTable(table, options) { columns.push(col); col = { - field: 'status_custom_key', + field: 'status', title: '{% trans "Status" %}', formatter: function(value) { return stockStatusDisplay(value); @@ -2653,7 +2566,8 @@ function loadStockLocationTable(table, options) { setupFilterList(filterKey, table, filterListElement, { download: true, labels: { - model_type: 'stocklocation', + url: '{% url "api-stocklocation-label-list" %}', + key: 'location' }, singular_name: '{% trans "stock location" %}', plural_name: '{% trans "stock locations" %}', @@ -2816,8 +2730,9 @@ function loadStockLocationTable(table, options) { } } - if (row.icon) { - html += ``; + const icon = row.icon || global_settings.STOCK_LOCATION_DEFAULT_ICON; + if (icon) { + html += ``; } html += renderLink( @@ -3076,11 +2991,11 @@ function loadStockTrackingTable(table, options) { } // Status information - if (details.status_custom_key) { + if (details.status) { html += `{% trans "Status" %}`; html += ''; - html += stockStatusDisplay(details.status_custom_key); + html += stockStatusDisplay(details.status); html += ''; } @@ -3201,7 +3116,7 @@ function loadInstalledInTable(table, options) { } }, { - field: 'status_custom_key', + field: 'status', title: '{% trans "Status" %}', formatter: function(value) { return stockStatusDisplay(value); @@ -3266,6 +3181,7 @@ function uninstallStockItem(installed_item_id, options={}) { }, tree_picker: { url: '{% url "api-location-tree" %}', + default_icon: global_settings.STOCK_LOCATION_DEFAULT_ICON, }, }, note: { @@ -3402,7 +3318,7 @@ function setStockStatus(items, options={}) { method: 'POST', preFormContent: html, fields: { - status_custom_key: {}, + status: {}, note: {}, }, processBeforeUpload: function(data) { @@ -3418,105 +3334,3 @@ function setStockStatus(items, options={}) { } }); } - - -/* - * Load TestStatistics table. - */ -function loadTestStatisticsTable(table, prefix, url, options, filters = {}) { - inventreeGet(url, filters, { - async: true, - success: function(data) { - const keys = ['passed', 'failed', 'total'] - let header = ''; - let rows = [] - let passed= ''; - let failed = ''; - let total = ''; - $('.test-stat-result-cell').remove(); - $.each(data[0], function(key, value){ - if (key != "total") { - header += '' + key + ''; - keys.forEach(function(keyName) { - var tdText = '-'; - if (value['total'] != '0' && value[keyName] != '0') { - let percentage = '' - if (keyName != 'total' && value[total] != 0) { - percentage = ' (' + (100.0 * (parseFloat(value[keyName]) / parseFloat(value['total']))).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 2}) + '%)'; - } - tdText = value[keyName] + percentage; - } - rows[keyName] += '' + tdText + ''; - }) - } - }); - $('#' + prefix + '-test-statistics-table-header-id').after(header); - - keys.forEach(function(keyName) { - let valueStr = data[0]['total'][keyName]; - if (keyName != 'total' && data[0]['total']['total'] != '0') { - valueStr += ' (' + (100.0 * (parseFloat(valueStr) / parseFloat(data[0]['total']['total']))).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 2}) + '%)'; - } - rows[keyName] += '' + valueStr + ''; - $('#' + prefix + '-test-statistics-table-body-' + keyName).after(rows[keyName]); - }); - $('#' + prefix + '-test-statistics-table').show(); - setupFilterList(prefix + "teststatistics", table, "#filter-list-" + prefix + "teststatistics", options); - }, - }); -} - -function prepareTestStatisticsTable(keyName, apiUrl) -{ - let options = { - custom_actions: [ - { - icon: 'fa-calendar-week', - actions: [ - { - icon: 'fa-calendar-week', - title: '{% trans "This week" %}', - label: 'this-week', - callback: function(data) { - filterTestStatisticsTableDateRange(data, 'this-week', $("#test-statistics-table"), keyName + 'teststatistics', options); - } - }, - { - icon: 'fa-calendar-week', - title: '{% trans "This month" %}', - label: 'this-month', - callback: function(data) { - filterTestStatisticsTableDateRange(data, 'this-month', $("#test-statistics-table"), keyName + 'teststatistics', options); - } - }, - ], - } - ], - callback: function(table, filters, options) { - loadTestStatisticsTable($("#test-statistics-table"), keyName, apiUrl, options, filters); - } - } - setupFilterList(keyName + 'teststatistics', $("#test-statistics-table"), '#filter-list-' + keyName + 'teststatistics', options); - - // Load test statistics table - loadTestStatisticsTable($("#test-statistics-table"), keyName, apiUrl, options); -} - -function filterTestStatisticsTableDateRange(data, range, table, tableKey, options) -{ - var startDateString = ''; - var d = new Date(); - if (range == "this-week") { - startDateString = moment(new Date(d.getFullYear(), d.getMonth(), d.getDate() - (d.getDay() == 0 ? 6 : d.getDay() - 1))).format('YYYY-MM-DD'); - } else if (range == "this-month") { - startDateString = moment(new Date(d.getFullYear(), d.getMonth(), 1)).format('YYYY-MM-DD'); - } else { - console.warn(`Invalid range specified for filterTestStatisticsTableDateRange`); - return; - } - var filters = addTableFilter(tableKey, 'finished_datetime_after', startDateString); - removeTableFilter(tableKey, 'finished_datetime_before') - - reloadTableFilters(table, filters, options); - setupFilterList(tableKey, table, "#filter-list-" + tableKey, options); -} diff --git a/src/backend/InvenTree/templates/js/translated/table_filters.js b/src/backend/InvenTree/templates/js/translated/table_filters.js index f45c14e0b01c..0c10b06f3325 100644 --- a/src/backend/InvenTree/templates/js/translated/table_filters.js +++ b/src/backend/InvenTree/templates/js/translated/table_filters.js @@ -18,27 +18,28 @@ */ -// Construct a dynamic API filter for an "owner" -function constructOwnerFilter(title) { +// Construct a dynamic API filter for the "issued by" field +function constructIssuedByFilter() { return { - title: title, + title: '{% trans "Issued By" %}', options: function() { - var ownersList = {}; - inventreeGet('{% url "api-owner-list" %}', {}, { + let users = {}; + + inventreeGet('{% url "api-user-list" %}', {}, { async: false, success: function(response) { - for (var key in response) { - let owner = response[key]; - ownersList[owner.pk] = { - key: owner.pk, - value: `${owner.name} (${owner.label})`, + for (let user of response) { + users[user.pk] = { + key: user.pk, + value: user.username }; } } }); - return ownersList; - }, - }; + + return users; + } + } } // Construct a dynamic API filter for the "project" field @@ -141,10 +142,6 @@ function getVariantsTableFilters() { type: 'bool', title: '{% trans "Virtual" %}', }, - testable: { - type: 'bool', - title: '{% trans "Testable" %}', - }, trackable: { type: 'bool', title: '{% trans "Trackable" %}', @@ -156,10 +153,6 @@ function getVariantsTableFilters() { // Return a dictionary of filters for the BOM table function getBOMTableFilters() { return { - sub_part_testable: { - type: 'bool', - title: '{% trans "Testable Part" %}', - }, sub_part_trackable: { type: 'bool', title: '{% trans "Trackable Part" %}', @@ -469,20 +462,6 @@ function getStockTestTableFilters() { }; } -// Return a dictionary of filters for the "test statistics" table -function getTestStatisticsTableFilters() { - - return { - finished_datetime_after: { - type: 'date', - title: '{% trans "Interval start" %}', - }, - finished_datetime_before: { - type: 'date', - title: '{% trans "Interval end" %}', - } - }; -} // Return a dictionary of filters for the "stocktracking" table function getStockTrackingTableFilters() { @@ -548,8 +527,26 @@ function getBuildTableFilters() { type: 'bool', title: '{% trans "Assigned to me" %}', }, - assigned_to: constructOwnerFilter('{% trans "Responsible" %}'), - issued_by: constructOwnerFilter('{% trans "Issued By" %}'), + assigned_to: { + title: '{% trans "Responsible" %}', + options: function() { + var ownersList = {}; + inventreeGet('{% url "api-owner-list" %}', {}, { + async: false, + success: function(response) { + for (var key in response) { + let owner = response[key]; + ownersList[owner.pk] = { + key: owner.pk, + value: `${owner.name} (${owner.label})`, + }; + } + } + }); + return ownersList; + }, + }, + issued_by: constructIssuedByFilter(), }; if (global_settings.PROJECT_CODES_ENABLED) { @@ -719,11 +716,6 @@ function getPartTableFilters() { title: '{% trans "Active" %}', description: '{% trans "Show active parts" %}', }, - locked: { - type: 'bool', - title: '{% trans "Locked" %}', - description: '{% trans "Show locked parts" %}', - }, assembly: { type: 'bool', title: '{% trans "Assembly" %}', @@ -774,10 +766,6 @@ function getPartTableFilters() { type: 'bool', title: '{% trans "Template" %}', }, - testable: { - type: 'bool', - title: '{% trans "Testable" %}', - }, trackable: { type: 'bool', title: '{% trans "Trackable" %}', @@ -870,8 +858,6 @@ function getAvailableTableFilters(tableKey) { return getBuildItemTableFilters(); case 'buildlines': return getBuildLineTableFilters(); - case 'buildteststatistics': - return getTestStatisticsTableFilters(); case 'bom': return getBOMTableFilters(); case 'category': @@ -894,8 +880,6 @@ function getAvailableTableFilters(tableKey) { return getPartTableFilters(); case 'parttests': return getPartTestTemplateFilters(); - case 'partteststatistics': - return getTestStatisticsTableFilters(); case 'plugins': return getPluginTableFilters(); case 'purchaseorder': diff --git a/src/backend/InvenTree/templates/test_statistics_table.html b/src/backend/InvenTree/templates/test_statistics_table.html deleted file mode 100644 index 24361a3bf932..000000000000 --- a/src/backend/InvenTree/templates/test_statistics_table.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load i18n %} -{% load inventree_extras %} - - - - - - - - - - - - - - - - - - - - diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index c8cfb1280746..43fe8ad5217e 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -3,28 +3,20 @@ import datetime import logging -from django.contrib.auth import authenticate, get_user, login, logout +from django.contrib.auth import get_user, login from django.contrib.auth.models import Group, User -from django.http.response import HttpResponse -from django.shortcuts import redirect -from django.urls import include, path, re_path, reverse +from django.urls import include, path, re_path from django.views.generic.base import RedirectView -from allauth.account import app_settings -from allauth.account.adapter import get_adapter -from allauth_2fa.utils import user_has_valid_totp_device from dj_rest_auth.views import LoginView, LogoutView from drf_spectacular.utils import OpenApiResponse, extend_schema, extend_schema_view from rest_framework import exceptions, permissions from rest_framework.authentication import BasicAuthentication from rest_framework.decorators import authentication_classes -from rest_framework.generics import DestroyAPIView -from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView import InvenTree.helpers -from common.models import InvenTreeSetting from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ( ListAPI, @@ -35,13 +27,8 @@ ) from InvenTree.serializers import ExendedUserSerializer, UserCreateSerializer from InvenTree.settings import FRONTEND_URL_BASE -from users.models import ApiToken, Owner -from users.serializers import ( - ApiTokenSerializer, - GroupSerializer, - OwnerSerializer, - RoleSerializer, -) +from users.models import ApiToken, Owner, RuleSet, check_user_role +from users.serializers import GroupSerializer, OwnerSerializer logger = logging.getLogger('inventree') @@ -119,15 +106,44 @@ class OwnerDetail(RetrieveAPI): serializer_class = OwnerSerializer -class RoleDetails(RetrieveAPI): - """API endpoint which lists the available role permissions for the current user.""" +class RoleDetails(APIView): + """API endpoint which lists the available role permissions for the current user. + + (Requires authentication) + """ permission_classes = [permissions.IsAuthenticated] - serializer_class = RoleSerializer + serializer_class = None - def get_object(self): - """Overwritten to always return current user.""" - return self.request.user + def get(self, request, *args, **kwargs): + """Return the list of roles / permissions available to the current user.""" + user = request.user + + roles = {} + + for ruleset in RuleSet.RULESET_CHOICES: + role, _text = ruleset + + permissions = [] + + for permission in RuleSet.RULESET_PERMISSIONS: + if check_user_role(user, role, permission): + permissions.append(permission) + + if len(permissions) > 0: + roles[role] = permissions + else: + roles[role] = None # pragma: no cover + + data = { + 'user': user.pk, + 'username': user.username, + 'roles': roles, + 'is_staff': user.is_staff, + 'is_superuser': user.is_superuser, + } + + return Response(data) class UserDetail(RetrieveUpdateDestroyAPI): @@ -169,24 +185,7 @@ class UserList(ListCreateAPI): filterset_fields = ['is_staff', 'is_active', 'is_superuser'] -class GroupMixin: - """Mixin for Group API endpoints to add permissions filter.""" - - def get_serializer(self, *args, **kwargs): - """Return serializer instance for this endpoint.""" - # Do we wish to include extra detail? - try: - params = self.request.query_params - kwargs['permission_detail'] = InvenTree.helpers.str2bool( - params.get('permission_detail', None) - ) - except AttributeError: - pass - kwargs['context'] = self.get_serializer_context() - return self.serializer_class(*args, **kwargs) - - -class GroupDetail(GroupMixin, RetrieveUpdateDestroyAPI): +class GroupDetail(RetrieveUpdateDestroyAPI): """Detail endpoint for a particular auth group.""" queryset = Group.objects.all() @@ -194,7 +193,7 @@ class GroupDetail(GroupMixin, RetrieveUpdateDestroyAPI): permission_classes = [permissions.IsAuthenticated] -class GroupList(GroupMixin, ListCreateAPI): +class GroupList(ListCreateAPI): """List endpoint for all auth groups.""" queryset = Group.objects.all() @@ -217,50 +216,7 @@ class GroupList(GroupMixin, ListCreateAPI): class Login(LoginView): """API view for logging in via API.""" - def post(self, request, *args, **kwargs): - """API view for logging in via API.""" - _data = request.data.copy() - _data.update(request.POST.copy()) - - if not _data.get('mfa', None): - return super().post(request, *args, **kwargs) - - # Check if login credentials valid - user = authenticate( - request, username=_data.get('username'), password=_data.get('password') - ) - if user is None: - return HttpResponse(status=401) - - # Check if user has mfa set up - if not user_has_valid_totp_device(user): - return super().post(request, *args, **kwargs) - - # Stage login and redirect to 2fa - request.session['allauth_2fa_user_id'] = str(user.id) - request.session['allauth_2fa_login'] = { - 'email_verification': app_settings.EMAIL_VERIFICATION, - 'signal_kwargs': None, - 'signup': False, - 'email': None, - 'redirect_url': reverse('platform'), - } - return redirect(reverse('two-factor-authenticate')) - - def process_login(self): - """Process the login request, ensure that MFA is enforced if required.""" - # Normal login process - ret = super().process_login() - user = self.request.user - adapter = get_adapter(self.request) - - # User requires 2FA or MFA is enforced globally - no logins via API - if adapter.has_2fa_enabled(user) or InvenTreeSetting.get_setting( - 'LOGIN_ENFORCE_MFA' - ): - logout(self.request) - raise exceptions.PermissionDenied('MFA required for this user') - return ret + ... @extend_schema_view( @@ -287,7 +243,7 @@ def post(self, request): try: token = ApiToken.objects.get(key=token_key, user=request.user) token.delete() - except ApiToken.DoesNotExist: # pragma: no cover + except ApiToken.DoesNotExist: pass return super().logout(request) @@ -349,22 +305,6 @@ def get(self, request, *args, **kwargs): raise exceptions.NotAuthenticated() -class TokenListView(DestroyAPIView, ListAPI): - """List of registered tokens for current users.""" - - permission_classes = (IsAuthenticated,) - serializer_class = ApiTokenSerializer - - def get_queryset(self): - """Only return data for current user.""" - return ApiToken.objects.filter(user=self.request.user) - - def perform_destroy(self, instance): - """Revoke token.""" - instance.revoked = True - instance.save() - - class LoginRedirect(RedirectView): """Redirect to the correct starting page after backend login.""" @@ -379,13 +319,6 @@ def get_redirect_url(self, *args, **kwargs): user_urls = [ path('roles/', RoleDetails.as_view(), name='api-user-roles'), path('token/', GetAuthToken.as_view(), name='api-token'), - path( - 'tokens/', - include([ - path('/', TokenListView.as_view(), name='api-token-detail'), - path('', TokenListView.as_view(), name='api-token-list'), - ]), - ), path('me/', MeUserDetail.as_view(), name='api-user-me'), path( 'owner/', diff --git a/src/backend/InvenTree/users/apps.py b/src/backend/InvenTree/users/apps.py index fdf96ca0ec55..a4c52ee77716 100644 --- a/src/backend/InvenTree/users/apps.py +++ b/src/backend/InvenTree/users/apps.py @@ -26,7 +26,7 @@ def ready(self): # Skip if running migrations if InvenTree.ready.isRunningMigrations(): - return # pragma: no cover + return if InvenTree.ready.canAppAccessDatabase(allow_test=True): try: diff --git a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py deleted file mode 100644 index 31d606fab23b..000000000000 --- a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 4.2.12 on 2024-05-23 16:40 - -from importlib import import_module - -from django.conf import settings -from django.db import migrations - - -def clear_sessions(apps, schema_editor): # pragma: no cover - """Clear all user sessions.""" - - # Ignore in test mode - if settings.TESTING: - return - - try: - engine = import_module(settings.SESSION_ENGINE) - engine.SessionStore.clear_expired() - print('Cleared all user sessions to deal with GHSA-2crp-q9pc-457j') - except Exception: - # Database may not be ready yet, so this does not matter anyhow - pass - -class Migration(migrations.Migration): - - atomic = False - - dependencies = [ - ("users", "0010_alter_apitoken_key"), - ] - - operations = [ - migrations.RunPython( - clear_sessions, reverse_code=migrations.RunPython.noop, - ) - ] diff --git a/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py b/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py deleted file mode 100644 index fbe0a7bebd6c..000000000000 --- a/src/backend/InvenTree/users/migrations/0012_alter_ruleset_can_view.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.12 on 2024-07-18 21:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("users", "0011_auto_20240523_1640"), - ] - - operations = [ - migrations.AlterField( - model_name="ruleset", - name="can_view", - field=models.BooleanField( - default=False, help_text="Permission to view items", verbose_name="View" - ), - ), - ] diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index cb4af4c59202..fc4cc141ec1e 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -21,9 +21,9 @@ from rest_framework.authtoken.models import Token as AuthToken +import common.models as common_models import InvenTree.helpers import InvenTree.models -from common.settings import get_global_setting from InvenTree.ready import canAppAccessDatabase, isImportingData logger = logging.getLogger('inventree') @@ -34,7 +34,7 @@ # string representation of a user def user_model_str(self): """Function to override the default Django User __str__.""" - if get_global_setting('DISPLAY_FULL_NAMES', cache=True): + if common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES'): if self.first_name or self.last_name: return f'{self.first_name} {self.last_name}' return self.username @@ -224,12 +224,11 @@ def get_ruleset_models(): 'auth_permission', 'users_apitoken', 'users_ruleset', - 'report_labeloutput', - 'report_labeltemplate', 'report_reportasset', - 'report_reportoutput', 'report_reportsnippet', - 'report_reporttemplate', + 'report_billofmaterialsreport', + 'report_purchaseorderreport', + 'report_salesorderreport', 'account_emailaddress', 'account_emailconfirmation', 'socialaccount_socialaccount', @@ -258,6 +257,7 @@ def get_ruleset_models(): 'part_partpricing', 'part_bomitem', 'part_bomitemsubstitute', + 'part_partattachment', 'part_partsellpricebreak', 'part_partinternalpricebreak', 'part_parttesttemplate', @@ -269,13 +269,23 @@ def get_ruleset_models(): 'company_supplierpart', 'company_manufacturerpart', 'company_manufacturerpartparameter', + 'company_manufacturerpartattachment', + 'label_partlabel', ], 'stocktake': ['part_partstocktake', 'part_partstocktakereport'], - 'stock_location': ['stock_stocklocation', 'stock_stocklocationtype'], + 'stock_location': [ + 'stock_stocklocation', + 'stock_stocklocationtype', + 'label_stocklocationlabel', + 'report_stocklocationreport', + ], 'stock': [ 'stock_stockitem', + 'stock_stockitemattachment', 'stock_stockitemtracking', 'stock_stockitemtestresult', + 'report_testreport', + 'label_stockitemlabel', ], 'build': [ 'part_part', @@ -285,11 +295,15 @@ def get_ruleset_models(): 'build_build', 'build_builditem', 'build_buildline', + 'build_buildorderattachment', 'stock_stockitem', 'stock_stocklocation', + 'report_buildreport', + 'label_buildlinelabel', ], 'purchase_order': [ 'company_company', + 'company_companyattachment', 'company_contact', 'company_address', 'company_manufacturerpart', @@ -297,26 +311,34 @@ def get_ruleset_models(): 'company_supplierpart', 'company_supplierpricebreak', 'order_purchaseorder', + 'order_purchaseorderattachment', 'order_purchaseorderlineitem', 'order_purchaseorderextraline', + 'report_purchaseorderreport', ], 'sales_order': [ 'company_company', + 'company_companyattachment', 'company_contact', 'company_address', 'order_salesorder', 'order_salesorderallocation', + 'order_salesorderattachment', 'order_salesorderlineitem', 'order_salesorderextraline', 'order_salesordershipment', + 'report_salesorderreport', ], 'return_order': [ 'company_company', + 'company_companyattachment', 'company_contact', 'company_address', 'order_returnorder', 'order_returnorderlineitem', 'order_returnorderextraline', + 'order_returnorderattachment', + 'report_returnorderreport', ], } @@ -334,7 +356,6 @@ def get_ruleset_ignore(): 'admin_logentry', 'contenttypes_contenttype', # Models which currently do not require permissions - 'common_attachment', 'common_colortheme', 'common_customunit', 'common_inventreesetting', @@ -345,7 +366,7 @@ def get_ruleset_ignore(): 'common_projectcode', 'common_webhookendpoint', 'common_webhookmessage', - 'common_inventreecustomuserstatemodel', + 'label_labeloutput', 'users_owner', # Third-party tables 'error_report_error', @@ -358,10 +379,6 @@ def get_ruleset_ignore(): 'django_q_task', 'django_q_schedule', 'django_q_success', - # Importing - 'importer_dataimportsession', - 'importer_dataimportcolumnmap', - 'importer_dataimportrow', ] RULESET_CHANGE_INHERIT = [('part', 'partparameter'), ('part', 'bomitem')] @@ -390,7 +407,7 @@ class Meta: ) can_view = models.BooleanField( - verbose_name=_('View'), default=False, help_text=_('Permission to view items') + verbose_name=_('View'), default=True, help_text=_('Permission to view items') ) can_add = models.BooleanField( @@ -410,7 +427,7 @@ class Meta: ) @classmethod - def check_table_permission(cls, user: User, table, permission): + def check_table_permission(cls, user, table, permission): """Check if the provided user has the specified permission against the table.""" # Superuser knows no bounds if user.is_superuser: @@ -609,9 +626,9 @@ def get_permission_object(permission_string): content_type=content_type, codename=perm ) except ContentType.DoesNotExist: # pragma: no cover - # logger.warning( - # "Error: Could not find permission matching '%s'", permission_string - # ) + logger.warning( + "Error: Could not find permission matching '%s'", permission_string + ) permission = None return permission @@ -669,7 +686,7 @@ def get_permission_object(permission_string): ) -def clear_user_role_cache(user: User): +def clear_user_role_cache(user): """Remove user role permission information from the cache. - This function is called whenever the user / group is updated @@ -679,23 +696,30 @@ def clear_user_role_cache(user: User): """ for role in RuleSet.get_ruleset_models().keys(): for perm in ['add', 'change', 'view', 'delete']: - key = f'role_{user.pk}_{role}_{perm}' + key = f'role_{user}_{role}_{perm}' cache.delete(key) -def check_user_permission(user: User, model, permission): - """Check if the user has a particular permission against a given model type. +def get_user_roles(user): + """Return all roles available to a given user.""" + roles = set() - Arguments: - user: The user object to check - model: The model class to check (e.g. Part) - permission: The permission to check (e.g. 'view' / 'delete') - """ - permission_name = f'{model._meta.app_label}.{permission}_{model._meta.model_name}' - return user.has_perm(permission_name) + for group in user.groups.all(): + for rule in group.rule_sets.all(): + name = rule.name + if rule.can_view: + roles.add(f'{name}.view') + if rule.can_add: + roles.add(f'{name}.add') + if rule.can_change: + roles.add(f'{name}.change') + if rule.can_delete: + roles.add(f'{name}.delete') + + return roles -def check_user_role(user: User, role, permission): +def check_user_role(user, role, permission): """Check if a user has a particular role:permission combination. If the user is a superuser, this will return True @@ -704,11 +728,11 @@ def check_user_role(user: User, role, permission): return True # First, check the cache - key = f'role_{user.pk}_{role}_{permission}' + key = f'role_{user}_{role}_{permission}' try: result = cache.get(key) - except Exception: # pragma: no cover + except Exception: result = None if result is not None: @@ -739,7 +763,7 @@ def check_user_role(user: User, role, permission): # Save result to cache try: cache.set(key, result, timeout=3600) - except Exception: # pragma: no cover + except Exception: pass return result @@ -805,8 +829,9 @@ def get_api_url(): # pragma: no cover def __str__(self): """Defines the owner string representation.""" - if self.owner_type.name == 'user' and get_global_setting( - 'DISPLAY_FULL_NAMES', cache=True + if ( + self.owner_type.name == 'user' + and common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES') ): display_name = self.owner.get_full_name() else: @@ -815,8 +840,9 @@ def __str__(self): def name(self): """Return the 'name' of this owner.""" - if self.owner_type.name == 'user' and get_global_setting( - 'DISPLAY_FULL_NAMES', cache=True + if ( + self.owner_type.name == 'user' + and common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES') ): return self.owner.get_full_name() or str(self.owner) return str(self.owner) diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 8455dfd2b680..b4e3dbb7da4d 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -1,14 +1,12 @@ """DRF API serializers for the 'users' app.""" -from django.contrib.auth.models import Group, Permission, User -from django.core.exceptions import AppRegistryNotReady -from django.db.models import Q +from django.contrib.auth.models import Group, User from rest_framework import serializers from InvenTree.serializers import InvenTreeModelSerializer -from .models import ApiToken, Owner, RuleSet, check_user_role +from .models import Owner, RuleSet, check_user_role class OwnerSerializer(InvenTreeModelSerializer): @@ -32,25 +30,7 @@ class Meta: """Metaclass defines serializer fields.""" model = Group - fields = ['pk', 'name', 'permissions'] - - def __init__(self, *args, **kwargs): - """Initialize this serializer with extra fields as required.""" - permission_detail = kwargs.pop('permission_detail', False) - - super().__init__(*args, **kwargs) - - try: - if not permission_detail: - self.fields.pop('permissions', None) - except AppRegistryNotReady: - pass - - permissions = serializers.SerializerMethodField() - - def get_permissions(self, group: Group): - """Return a list of permissions associated with the group.""" - return generate_permission_dict(group.permissions.all()) + fields = ['pk', 'name'] class RoleSerializer(InvenTreeModelSerializer): @@ -60,21 +40,16 @@ class Meta: """Metaclass options.""" model = User - fields = [ - 'user', - 'username', - 'roles', - 'permissions', - 'is_staff', - 'is_superuser', - ] + fields = ['user', 'username', 'is_staff', 'is_superuser', 'roles'] user = serializers.IntegerField(source='pk') + username = serializers.CharField() + is_staff = serializers.BooleanField() + is_superuser = serializers.BooleanField() roles = serializers.SerializerMethodField() - permissions = serializers.SerializerMethodField() def get_roles(self, user: User) -> dict: - """Roles associated with the user.""" + """Return roles associated with the specified User.""" roles = {} for ruleset in RuleSet.RULESET_CHOICES: @@ -92,59 +67,3 @@ def get_roles(self, user: User) -> dict: roles[role] = None # pragma: no cover return roles - - def get_permissions(self, user: User) -> dict: - """Permissions associated with the user.""" - if user.is_superuser: - permissions = Permission.objects.all() - else: - permissions = Permission.objects.filter( - Q(user=user) | Q(group__user=user) - ).distinct() - - return generate_permission_dict(permissions) - - -def generate_permission_dict(permissions): - """Generate a dictionary of permissions for a given set of permissions.""" - perms = {} - - for permission in permissions: - perm, model = permission.codename.split('_') - - if model not in perms: - perms[model] = [] - - perms[model].append(perm) - return perms - - -class ApiTokenSerializer(InvenTreeModelSerializer): - """Serializer for the ApiToken model.""" - - in_use = serializers.SerializerMethodField(read_only=True) - - def get_in_use(self, token: ApiToken) -> bool: - """Return True if the token is currently used to call the endpoint.""" - from InvenTree.middleware import get_token_from_request - - request = self.context.get('request') - rq_token = get_token_from_request(request) - return token.key == rq_token - - class Meta: - """Meta options for ApiTokenSerializer.""" - - model = ApiToken - fields = [ - 'created', - 'expiry', - 'id', - 'last_seen', - 'name', - 'token', - 'active', - 'revoked', - 'user', - 'in_use', - ] diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index ea271f7e19c9..c25b9acbff75 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -12,29 +12,6 @@ class UserAPITests(InvenTreeAPITestCase): """Tests for user API endpoints.""" - def test_user_options(self): - """Tests for the User OPTIONS request.""" - self.assignRole('admin.add') - response = self.options(reverse('api-user-list'), expected_code=200) - - fields = response.data['actions']['POST'] - - # Check some of the field values - self.assertEqual(fields['username']['label'], 'Username') - - self.assertEqual(fields['email']['label'], 'Email') - self.assertEqual(fields['email']['help_text'], 'Email address of the user') - - self.assertEqual(fields['is_active']['label'], 'Active') - self.assertEqual( - fields['is_active']['help_text'], 'Is this user account active' - ) - - self.assertEqual(fields['is_staff']['label'], 'Staff') - self.assertEqual( - fields['is_staff']['help_text'], 'Does this user have staff permissions' - ) - def test_user_api(self): """Tests for User API endpoints.""" response = self.get(reverse('api-user-list'), expected_code=200) @@ -71,25 +48,6 @@ def test_group_api(self): self.assertIn('name', response.data) - def test_logout(self): - """Test api logout endpoint.""" - token_key = self.get(url=reverse('api-token')).data['token'] - self.client.logout() - self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key) - - self.post(reverse('api-logout'), expected_code=200) - self.get(reverse('api-token'), expected_code=401) - - def test_login_redirect(self): - """Test login redirect endpoint.""" - response = self.get(reverse('api-login-redirect'), expected_code=302) - self.assertEqual(response.url, '/index/') - - # PUI - self.put(reverse('api-ui-preference'), {'preferred_method': 'pui'}) - response = self.get(reverse('api-login-redirect'), expected_code=302) - self.assertEqual(response.url, '/platform/logged-in/') - class UserTokenTests(InvenTreeAPITestCase): """Tests for user token functionality.""" @@ -198,13 +156,3 @@ def test_token_auth(self): token.save() self.client.get(me, expected_code=200) - - def test_buildin_token(self): - """Test the built-in token authentication.""" - response = self.post( - reverse('rest_login'), - {'username': self.username, 'password': self.password}, - expected_code=200, - ) - self.assertIn('key', response.data) - self.assertTrue(response.data['key'].startswith('inv-')) diff --git a/src/backend/InvenTree/users/tests.py b/src/backend/InvenTree/users/tests.py index 1d5d9686c0c8..84f0cd1668d0 100644 --- a/src/backend/InvenTree/users/tests.py +++ b/src/backend/InvenTree/users/tests.py @@ -5,7 +5,7 @@ from django.test import TestCase, tag from django.urls import reverse -from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase +from InvenTree.unit_test import InvenTreeTestCase from users.models import ApiToken, Owner, RuleSet @@ -123,8 +123,8 @@ def test_permission_assign(self): for model in models: permission_set.add(model) - # By default no permissions should be assigned - self.assertEqual(group.permissions.count(), 0) + # Every ruleset by default sets one permission, the "view" permission set + self.assertEqual(group.permissions.count(), len(permission_set)) # Add some more rules for rule in rulesets: @@ -182,13 +182,13 @@ def test_owner(self): # Get related owners (user + group) related_owners = group_as_owner.get_related_owners(include_group=True) - self.assertIn(user_as_owner, related_owners) - self.assertIn(group_as_owner, related_owners) + self.assertTrue(user_as_owner in related_owners) + self.assertTrue(group_as_owner in related_owners) # Get related owners (only user) related_owners = group_as_owner.get_related_owners(include_group=False) - self.assertIn(user_as_owner, related_owners) - self.assertNotIn(group_as_owner, related_owners) + self.assertTrue(user_as_owner in related_owners) + self.assertFalse(group_as_owner in related_owners) # Get related owners on user related_owners = user_as_owner.get_related_owners() @@ -221,10 +221,6 @@ def test_api(self): self.client.login(username=self.username, password=self.password) # user list self.do_request(reverse('api-owner-list'), {}) - - # user list with 'is_active' filter - self.do_request(reverse('api-owner-list'), {'is_active': False}) - # user list with search self.do_request(reverse('api-owner-list'), {'search': 'user'}) @@ -269,47 +265,3 @@ def test_token(self): reverse('api-user-me'), {'name': 'another-token'}, 200 ) self.assertEqual(response['username'], self.username) - - -class MFALoginTest(InvenTreeAPITestCase): - """Some simplistic tests to ensure that MFA is working.""" - - def test_api(self): - """Test that the API is working.""" - auth_data = {'username': self.username, 'password': self.password} - login_url = reverse('api-login') - - # Normal login - response = self.post(login_url, auth_data, expected_code=200) - self.assertIn('key', response.data) - self.client.logout() - - # Add MFA - totp_model = self.user.totpdevice_set.create() - - # Login with MFA enabled but not provided - response = self.post(login_url, auth_data, expected_code=403) - self.assertContains(response, 'MFA required for this user', status_code=403) - - # Login with MFA enabled and provided - should redirect to MFA page - auth_data['mfa'] = 'anything' - response = self.post(login_url, auth_data, expected_code=302) - self.assertEqual(response.url, reverse('two-factor-authenticate')) - # MFA not finished - no access allowed - self.get(reverse('api-token'), expected_code=401) - - # Login with MFA enabled and provided - but incorrect pwd - auth_data['password'] = 'wrong' - self.post(login_url, auth_data, expected_code=401) - auth_data['password'] = self.password - - # Remove MFA - totp_model.delete() - - # Login with MFA disabled but correct credentials provided - response = self.post(login_url, auth_data, expected_code=200) - self.assertIn('key', response.data) - - # Wrong login should not work - auth_data['password'] = 'wrong' - self.post(login_url, auth_data, expected_code=401) diff --git a/src/backend/InvenTree/web/tests.py b/src/backend/InvenTree/web/tests.py index d63fe112d05a..df13a20d30a8 100644 --- a/src/backend/InvenTree/web/tests.py +++ b/src/backend/InvenTree/web/tests.py @@ -18,10 +18,10 @@ class TemplateTagTest(InvenTreeTestCase): def assertSettings(self, settings_data): """Helper to test if needed args are in the settings.""" - self.assertIn('debug', settings_data) - self.assertIn('server_list', settings_data) - self.assertIn('show_server_selector', settings_data) - self.assertIn('environment', settings_data) + self.assertTrue('debug' in settings_data) + self.assertTrue('server_list' in settings_data) + self.assertTrue('show_server_selector' in settings_data) + self.assertTrue('environment' in settings_data) def test_spa_bundle(self): """Test the 'spa_bundle' template tag.""" @@ -32,8 +32,8 @@ def test_spa_bundle(self): return # pragma: no cover shipped_js = resp.split('